应用退出后保留环境变量

ben*_*rce 3 .net environment-variables

是否可以在控制台应用程序中保留环境变量,该应用程序在进程退出后可用.

我想要一个控制台应用程序来设置一个字符串,该字符串可用于执行它的批处理文件.

控制台应用程序位于dotnet中.

Fre*_*örk 5

您可以使用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)


Nei*_*eil 5

这与小福的类似,只是您可能想完全跳过文本文件并让程序将数据写入控制台。在程序名称周围打勾以使批处理文件执行它并使用输出,如下所示:

for /f "tokens=1,2 delims=," %%a in ('MyProgram.exe') do (
    set %%a=%%b
    set %%a=%%b
)
Run Code Online (Sandbox Code Playgroud)

如果您想输出应忽略的其他文本行,那么您可以在 for 循环内添加一个过滤器。