这一个看起来微不足道,但答案几乎没有我了。更改调用进程的环境变量
我有一个Windows批处理文件,它调用一个C#程序来做一个额外的验证,不能在批处理文件中完成。验证完成后,我需要将状态和字符串返回到调用shell。
现在返回值是微不足道的,我的C#控制台应用程序只是设置一个返回值(如果您愿意,退出代码)。我认为这个字符串也是小菜一碟。我试图定义使用一个新的shell变量:
Environment.SetEnvironmentVariable("ERR", "Some text");
此调用应该(和做)的当前进程中定义一个shell变量 - 那就是创建的变量非常的C#程序。只要C#应用程序终止,创建C#应用程序的shell就会对该变量一无所知,该值就会丢失。所以......一个没有特别用处的调用......根本......除非可能我从C3应用程序创建了一个子进程,否则它可能会继承我的变量。
SetEnvironmentVariable调用的EnvironmentVariableTarget.Machine和EnvironmentVariableTarget.User目标也不能解决问题,因为只有新创建的进程才会从注册表中获取这些新值。
因此,唯一可行的解决方案,我能想到的是:
- 写入stdout
- 写入到文件
- 编码额外的含义为返回值
前两个有点丑陋,最后一个有其局限性和问题。
任何其他想法(如何在父进程中设置shell变量)?也许这样的shell变量修改是一个安全问题(想想PATH)...
谢谢你的时间。
确实如此。控制台应用程序的结果通常通过返回码返回。显然''Environment.Exit()'在框架上有点粗糙......所以一个简单的'return x'是首选的方法。但是,我想知道是否有一种方法可以将**另一个值**推送到父shell环境中。例如错误代码123以字符串形式的解释... 我现在正在使用stdout ...将其重定向到一个文件,将其读回到一个shell var,删除该文件...略有肮脏,但它的作品。 – JamesH 2011-05-23 14:10:42