设置易失性环境变量
本文关键字:环境变量 易失性 设置 | 更新日期: 2023-09-27 18:22:31
在vbscript中,可以将环境变量设置为volatile。它将仅在登录会话期间持续存在。
Set colVolEnvVars = objWShell.Environment("VOLATILE")
colVolEnvVars(C_VOL_ENV_VAR_VALUE) = value
这些环境变量存储在:HKEY_CURRENT_USER''Volatile environment 中
在c#中,您可以使用设置环境变量
Environment.SetEnvironmentVariable(envVar, value, EnvironmentVariableTarget);
EnvironmentVariableTarget
枚举设置环境变量的类型。然而,它没有volatile的值。
我可以使用GetEnvironmentVariable
读取c#中的易失性环境变量,但我不能设置一个。
我知道我可以创建一个用户环境变量,然后在使用后将其删除。或者我可以从c#运行一个vbscript文件来获得所需的结果。我希望c#足够强大,有一个更优雅的解决方案。
我如何在c#中产生这种行为?
.NET中没有API来设置易失性环境变量。
也就是说,实际Environment.SetEnvironmentVariable
的实现实际上非常简单(来自.NET参考源):
using (RegistryKey environmentKey =
Registry.CurrentUser.OpenSubKey("Environment", true)) {
if (environmentKey != null) {
if (value == null)
environmentKey.DeleteValue(variable, false);
else
environmentKey.SetValue(variable, value);
}
}
您可以很容易地将其调整为使用Volatile environment
密钥而不是Environment
。
可移植性也不是问题,因为其他.NET平台一开始就不支持全局环境变量(只支持EnvironmentVariableTarget.Process
)。也许这样对你更好?除非提升,否则环境变量会由您启动的进程(及其子进程)继承——很少有Volatile environment
是可取的。
根据我的评论和Luaan的回答;我使用Registry
类创建了一个set volatile环境变量函数。
void CreateVolatileEnvironmentVariable(string envVar, string value)
{
RegistryKey rkeyVolatileEnv;
rkeyVolatileEnv = Registry.CurrentUser.OpenSubKey("Volatile Environment", true);
if (rkeyVolatileEnv != null)
{
rkeyVolatileEnv.SetValue(envVar, value);
}
}