3

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

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

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

谢谢。

4

5 回答 5

0

那么,System.Environment.SetEnvironmentVariable() 方法将让您指定您设置的变量的范围。这是你想要的?不确定我是否理解。

于 2008-09-25T22:06:08.000 回答
0

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

可以使用 -D: 命令行开关调用 NAnt 脚本来设置等效的环境变量。

于 2008-09-25T22:06:19.687 回答
0

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

于 2008-09-25T22:06:24.490 回答
0

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

于 2008-09-25T22:14:53.270 回答
0

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

(*) 除了,也许,搞乱操作系统内部。

于 2008-09-26T04:56:39.467 回答