进程无法访问环境变量

时间:2014-06-03 05:39:12

标签: c# windows environment-variables

我有一个WPF应用程序。 对于我的应用程序,我正在设置一个环境变量并更新路径变量。

Environment.SetEnvironmentVariable(var_name, value, EnvironmentVariableTarget.Machine);

第一次运行它会搜索该变量,如果找不到则会设置它。

if (IsSonarRunnerHomePathSet() == false)
{
    SetSonarRunnerHomePath(strSonarPath);   
}

代码

public bool IsSonarRunnerHomePathSet()
{
    try
    {
    string envJavaHome = Environment.GetEnvironmentVariable("SONAR_RUNNER_HOME", EnvironmentVariableTarget.Machine);
    return (envJavaHome != null) ? true : false;
    }
    catch (Exception ex)
    {       
        throw new Exception(" GetEnvironmentVariable Error -" + ex.Message);
    }
}

public void SetSonarRunnerHomePath(string strSonarDirPath)
{
    try
    {                
        Environment.SetEnvironmentVariable(sonar_runner_home, strSonarDirPath, EnvironmentVariableTarget.Machine);
    }
    catch (Exception ex)
    {                
        throw new Exception("SetEnvironmentVariable SONAR_RUNNER_HOME Error - " + ex.Message);
    }
}

之后,我使用Process.Start从我的应用程序执行bat文件,该文件使用此环境变量。 Bat文件在运行时创建,bat文件包含

cd /D  someDirPath      //someDirPath is provided from user as input
sonar-runner.bat -X     // run sonar-runner from someDirPath

proc = new Process();
//command to execute
proc.StartInfo.FileName = batchFileName;
proc.StartInfo.UseShellExecute = false;
proc.Start();

但是该过程无法找到该环境变量。

当我第二次运行我的应用程序时,它能够在我的WPF应用程序中找到它:

Environment.GetEnvironmentVariable(var_name, EnvironmentVariableTarget.Machine);

但是当bat文件开始执行时,它仍然无法找到该环境变量。

我在bat文件中添加了一个命令来显示环境变量,我的变量没有显示出来。 但是当我打开命令提示符并给出set命令来查看环境变量时。 它显示了我的变量。

获得以下错误

'sonar-runner.bat' is not recognized as an internal or external command,

该批处理过程如何才能看到它,即使在第二次也不能看到它?

有任何建议/帮助吗?

0 个答案:

没有答案