ben*_*rce 3 .net environment-variables
是否可以在控制台应用程序中保留环境变量,该应用程序在进程退出后可用.
我想要一个控制台应用程序来设置一个字符串,该字符串可用于执行它的批处理文件.
控制台应用程序位于dotnet中.
您可以使用Environment.SetEnvironmentVariable:
Environment.SetEnvironmentVariable("SomeVariable", "Some value", EnvironmentVariableTarget.User);
Run Code Online (Sandbox Code Playgroud)
最后一个参数将确定变量的范围和生命周期(Process,User或Machine).如果要为机器设置变量,则需要以admin身份运行.
编辑:我注意到,如果使用上面的代码执行控制台应用程序,则在打开新的命令窗口之前环境变量不可用(因此,如果从批处理文件执行控制台应用程序,则该变量将不可用于批处理文件,除非有一个技巧让它刷新它看到的环境变量集).
编辑2:好的,我正在挖掘这个,似乎没有明显的方法让批处理文件获得一组刷新的环境变量.我找到的一个解决方法是让.net代码编写一个批处理文件来设置变量,而不是自己设置它们.然后,调用批处理脚本可以运行创建的批处理文件以设置环境:
.Net控制台应用:
static void Main(string[] args)
{
string outputFile = @"c:\temp\setvars.bat";
string variable = "set SomeVariable=Some value";
File.WriteAllText(outputFile, variable);
}
Run Code Online (Sandbox Code Playgroud)
BAT文件:
call myconsoleapp.exe
call c:\temp\setvars.bat
echo %SomeVariable%
Run Code Online (Sandbox Code Playgroud)
这与小福的类似,只是您可能想完全跳过文本文件并让程序将数据写入控制台。在程序名称周围打勾以使批处理文件执行它并使用输出,如下所示:
for /f "tokens=1,2 delims=," %%a in ('MyProgram.exe') do (
set %%a=%%b
set %%a=%%b
)
Run Code Online (Sandbox Code Playgroud)
如果您想输出应忽略的其他文本行,那么您可以在 for 循环内添加一个过滤器。
| 归档时间: |
|
| 查看次数: |
2890 次 |
| 最近记录: |