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

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

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

感谢。

有帮助吗?

解决方案

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

其他提示

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

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

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

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

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

(*)除了,也许,搞乱OS-internals。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top