C#环境变量值未添加

时间:2015-08-07 06:10:12

标签: c# windows winapi environment-variables

我正在尝试为Path环境变量添加一个值,但我似乎无法让它工作。我已经经历了几个类似的问题,我很确定我有完全相同的代码,但它仍然不会添加变量我看不到它。我已经检查了管理员和本地用户帐户的更改。我在应用程序运行(调试)期间和之后都检查过。我也完全关闭VS2013并检查。

这是我正在使用的代码

string path = @"C:\Users\bono\Documents\Visual Studio 2013\Projects\3D-Scanner\AddEnviromentToPath\bin\Debug\AddEnviromentToPath.exe";
ProcessStartInfo process_start_info = new ProcessStartInfo();
process_start_info.FileName = path;
process_start_info.Verb = "runas";
process_start_info.WindowStyle = ProcessWindowStyle.Normal;
process_start_info.UseShellExecute = true;
process_start_info.Arguments = PATH_TO_PCL;

Process.Start(process_start_info); //Process that handles the adding of the value

AddEnviromentToPath计划:

class Program {
    static void Main(string[] args) {
        //Just to make sure we're adding both
        AddToEnvironmentPath(args[0], EnvironmentVariableTarget.User);
        AddToEnvironmentPath(args[0], EnvironmentVariableTarget.Machine);
    }

    static void AddToEnvironmentPath(string pathComponent, EnvironmentVariableTarget target) {
        string targetPath = System.Environment.GetEnvironmentVariable("Path", target) ?? string.Empty;

        if (!string.IsNullOrEmpty(targetPath) && !targetPath.EndsWith(";")) {
            targetPath = targetPath + ';';
        }

        targetPath = targetPath + pathComponent;
        Environment.SetEnvironmentVariable("Path", targetPath, target);
    }
}

请注意,我正在运行VS2013并将主应用程序作为标准用户运行。当AddEnviromentToPath程序运行时,我会收到管理员验证面板。我使用管理员帐户登录。

编辑:

其他人似乎使用基本相同的代码:
How do I get and set Environment variables in C#?
Environment is not being set in windows using c#. Where am I going wrong?

2 个答案:

答案 0 :(得分:1)

假设Environment.SetEnvironmentVariable在幕后调用Win32 SetEnvironmentVariable函数,本说明可能适用:

  

设置指定环境变量的内容   目前的过程   
...
  此功能对系统没有影响   环境变量或其他过程的环境变量。

如果要更改全局环境变量并让现有进程注意到它,则需要:

  • 将其保存到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
  • 下的注册表中
  • 使用WM_SETTINGCHANGE消息通知现有的更改流程。

有关详细信息,请参阅MSDN Environment Variables文档。

答案 1 :(得分:0)

ProcessStartInfo救援!

您需要查看此文档:

https://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.environmentvariables%28v=vs.110%29.aspx

解决您问题的关键文字:

  

虽然您无法设置EnvironmentVariables属性,但您可以   修改属性返回的StringDictionary。