回答
可以使用Environment.SetEnvironmentVariable:
Environment.SetEnvironmentVariable("SomeVariable", "Some value", EnvironmentVariableTarget.User);
最后一个参数将决定变量(过程,用户或机器)的范围和寿命。如果您想为机器设置变量,则需要以管理员身份运行。
编辑:我注意到的是,如果执行与上面的代码控制台应用程序,直到你打开一个新的命令行窗口(环境变量不适用,因此,如果从一个批处理文件执行控制台应用程序,该变量将不可用于该批处理文件,除非有技巧让它刷新它所看到的一组环境变量)。
编辑2:好吧,我正在挖掘这个,并且似乎没有明显的方式让批处理文件得到一组刷新的环境变量。我找到的一种解决方法是让.net代码写一个批处理文件来设置变量,而不是自己设置它们。调用批处理脚本可以运行创建批处理文件已在环境设置:
.NET控制台应用程序:
static void Main(string[] args)
{
string outputFile = @"c:\temp\setvars.bat";
string variable = "set SomeVariable=Some value";
File.WriteAllText(outputFile, variable);
}
BAT文件:
call myconsoleapp.exe
call c:\temp\setvars.bat
echo %SomeVariable%
是,设置系统环境变量而不是进程环境变量。 (我认为在技术上,用户环境变量也会持续存在,但仅限于该用户的上下文)。
使用system.environment类访问SetEnvironmentVariable方法。
由于您希望批处理文件能够读取它,因此您可能仅限于使用传统环境变量。
尝试使用Environment.SetEnvironmentVariable与用户或机器的EnvironmentVariableTarget。然后,您应该能够从批处理文件中获取类似于%my_var%的内容。
Environment.SetEnvironmentVariable("my_var", "data", EnvironmentVariableTarget.User);
编辑:弗雷德里克有打我给它一个类似的解决方案,我同意,这被称为行为的环境变量。我打算建议让C#应用程序将要返回的字符串写入文本文件,然后将其解析到批处理文件中。例如:
for /f "tokens=1,2 delims=," %%a in (data.txt) do (
if %%a==env1 echo %%b
if %%a==env2 echo %%b
)
...其中data.txt中可能看起来像:
env1,hello
env2,there
这类似于晓芙的,除了你可能想完全跳过的文本文件,让你的程序写数据传送到控制台。把蜱周围的节目名称有批处理文件来执行它,并使用输出,这样的:如果你想
for /f "tokens=1,2 delims=," %%a in ('MyProgram.exe') do (
set %%a=%%b
set %%a=%%b
)
文本的输出其他行应该被忽略,那么你可以添加里面的一个过滤器for循环。
- 1. 如何在程序关闭后保留环境变量
- 2. 甚至在退出后,Python脚本中的环境变量仍然保留
- 3. 应用程序退出后保留用户名nsstring
- 4. 退出后保留iPhone应用程序的状态
- 5. 在Java中保留环境变量
- 6. 在Spring应用程序环境中读取环境变量
- 7. shell脚本完成后保留环境变量
- 8. 构建后在Web应用程序中保留会话变量
- 9. 在应用程序退出时保存变量
- 10. 变量在退出jquery函数后保留其旧值
- 11. 退出应用程序后退按键
- 12. WP7 PhoneGap应用程序后退按钮退出应用程序
- 13. 在退出时保留Silverlight应用程序中的值
- 14. 如何在应用程序退出时保留剪贴板
- 15. 循环退出后的局部变量
- 16. Linux - 保护环境变量
- 17. 保存环境变量
- 18. 在应用程序环境中使用链接的容器环境变量?
- 19. 退出后,应用程序停留在内存中
- 20. For循环保留变量
- 21. 虚拟应用程序的不同应用程序设置/环境变量
- 22. 使用环境变量配置应用程序
- 23. 应用程序使用哪些环境变量
- 24. 导出的环境变量与环境变量
- 25. 通过退出应用程序退出无限循环
- 26. 退出WinSCP后保留临时文件
- 27. listenFailure后退出扭曲应用程序
- 28. 应用程序退出后的操作?
- 29. Rancher在升级服务时不保留环境变量
- 30. 在rails和javascript中保留一组环境变量
你打败了我。我认为这是一个很好的解决方案,我的答案略有不同。我认为没有其他“好”的方法。 – Xiaofu 2009-05-29 06:31:02
这个解决方案效果很好,可惜这个环境变量有这个限制,但是一个解决方法是可行的。 – benPearce 2009-06-01 03:24:57