如何在C#中运行一系列进程并保持它们的环境设置?

如何在C#中运行一系列进程并保持它们的环境设置?,c#,build-process,makefile,environment,auto-build,C#,Build Process,Makefile,Environment,Auto Build,我正在开发一个自动生成器,它将在构建过程中运行一系列步骤,并构建目标应用程序。我们过去常常使用一个批处理文件来设置一组环境变量,或者称为设置环境变量并最终运行“make”的工具 我一直在使用“Process”类,它非常适合运行这些命令,但不幸的是,每次运行对环境进行更改(如向路径添加内容)时,“Process”完成时,这些变量都会丢失。下一个“进程”被实例化并再次从“调用”应用程序(my exe)继承环境-这意味着上一个命令的所有环境设置都将丢失。你如何处理这种情况?有没有更好的方法在C#中运行

我正在开发一个自动生成器,它将在构建过程中运行一系列步骤,并构建目标应用程序。我们过去常常使用一个批处理文件来设置一组环境变量,或者称为设置环境变量并最终运行“make”的工具

我一直在使用“Process”类,它非常适合运行这些命令,但不幸的是,每次运行对环境进行更改(如向路径添加内容)时,“Process”完成时,这些变量都会丢失。下一个“进程”被实例化并再次从“调用”应用程序(my exe)继承环境-这意味着上一个命令的所有环境设置都将丢失。你如何处理这种情况?有没有更好的方法在C#中运行一系列类似批处理文件的命令并维护它们所设置的环境

请注意,不幸的是,老同学们已经声明nant/ant不是一个选项,所以“嘿,为什么不使用nant——它就是这样!”并不是我想要的答案


谢谢。

好的,System.Environment.SetEnvironmentVariable()方法将允许您指定所设置变量的范围。这就是你要找的吗?不确定我是否理解。

我们使用CruiseControl.net运行NAnt脚本。强烈推荐


可以使用-D:command-line开关调用NAnt脚本,以设置等效的环境变量

我建议使用一些代码将环境变量保存到外部文件中,然后您可以在以下过程开始时通过外部文件检索这些变量。

我认为问题不在于在此处指定自定义环境变量。(您可以通过ProcessStartInfo进行设置。)问题在于读取正在运行的进程对环境变量所做的更改。我不确定这是否可能。我知道的唯一方法是为流程本身和/或其子流程设置环境变量。我不知道如何为父进程设置环境变量。

环境变量从未设置,也无法为父进程(*)设置。仅适用于当前流程及其创建的流程-这是概念的一部分


(*)除了可能会弄乱操作系统的内部结构之外。

是的-如果有办法从以前运行的流程中获取修改过的变量,这将是一个很好的解决方案,但我看不到任何方法。是否有办法改为使用MSBuild?我认为反南特阵营不会介意使用这个,因为它来自于南特女士。