如何在C#中运行一系列过程并保持其环境设置?

时间:2020-03-06 14:45:10  来源:igfitidea点击:

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

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

请注意,不幸的是,老式的学生已经宣布不能使用nant / ant,所以"嘿,为什么不使用Nant呢!"不是我要找的答案。

谢谢。

解决方案

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

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

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

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

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

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

(*),除了可能与操作系统内部混为一谈。