Kra*_*ime 9 c# environment-variables
我使用以下代码来获取和设置环境变量.
public static string Get( string name, bool ExpandVariables=true ) {
if ( ExpandVariables ) {
return System.Environment.GetEnvironmentVariable( name );
} else {
return (string)Microsoft.Win32.Registry.LocalMachine.OpenSubKey( @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\" ).GetValue( name, "", Microsoft.Win32.RegistryValueOptions.DoNotExpandEnvironmentNames );
}
}
public static void Set( string name, string value ) {
System.Environment.SetEnvironmentVariable( name, value );
}
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,即使程序以管理员身份运行,只要程序运行,环境变量就会持续存在.我已经通过在上一个实例中设置的变量运行Get来确认了这一点.
上面的示例用法
Set("OPENSSL_CONF", @"c:\openssl\openssl.cfg");
Run Code Online (Sandbox Code Playgroud)
并检索
MessageBox.Show( Get("OPENSSL_CONF") );
Run Code Online (Sandbox Code Playgroud)
程序运行时,使用后Set,使用Get没有任何问题返回值.问题是环境变量不是永久性的(在系统上设置).
它也永远不会出现在高级属性下.
提前致谢.
Yuv*_*kov 15
在程序运行时,使用Set后,使用Get返回值,没有任何问题.问题是环境变量不是永久性的(在系统上设置).
那是因为SetEnvironmentVariable您在过程变量中使用存储的过载.来自文档:
调用此方法等效于使用值为EnvironmentVariableTarget.Process的目标参数调用SetEnvironmentVariable(String,String,EnvironmentVariableTarget)重载.
您需要使用重载指定EnvironmentVariableTarget.Machine:
public static void Set(string name, string value)
{
Environment.SetEnvironmentVariable(name, value, EnvironmentVariableTarget.Machine);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14054 次 |
| 最近记录: |