这个似乎微不足道,但现在几天我的答案已经躲过了.
我有一个Windows批处理文件,它调用C#程序进行额外的验证,这是在批处理文件中无法完成的.验证完成后,我需要将状态和字符串返回给调用shell.
现在返回值很简单,我的C#控制台应用程序只是设置一个返回值(如果你愿意,退出代码).我认为这根绳子也是小菜一碟.我尝试使用以下命令定义一个新的shell变量:
Environment.SetEnvironmentVariable("ERR", "Some text");
Run Code Online (Sandbox Code Playgroud)
这个调用应该(并且确实)在当前进程中定义一个shell变量- 这是创建变量的C#进程.一旦C#应用程序终止并且创建C#应用程序的shell对变量一无所知,该值就会丢失.所以...一个没有特别用途的电话......完全......除非我从C3应用程序创建了一个子进程,否则它可能会继承我的变量.
SetEnvironmentVariable调用的EnvironmentVariableTarget.Machine和EnvironmentVariableTarget.User目标也不能解决问题,因为只有新创建的进程才能从注册表中获取这些新值.
所以我能想到的唯一可行解决方案是:
前两个有点难看,最后一个有其局限性和问题.
任何其他想法(如何在父进程中设置shell变量)?也许这样的shell变量修改是一个安全问题(想想PATH)......
感谢您的时间.