Process.Start() 无法找到 javac,即使它在 PATH 中

Process.Start() unable to find javac, even though it is in PATH

我正在尝试使用 Process.Start() 从 C# 控制台应用程序编译 Java。这是我的代码:

static string ProjectRootDirectory
{
    get
    {
        return Path.GetFullPath(Path.Combine(Directory.GetCurrentDirectory(), @"..\.."));
    }
}

static void Main(string[] args)
{
    var info = new ProcessStartInfo()
    {
        RedirectStandardOutput = true,
        FileName = "javac", 
        Arguments = Path.Combine(ProjectRootDirectory, @"Java\Main.java"), 
        UseShellExecute = false
    };
    var proc = Process.Start(info);
    using (var reader = proc.StandardOutput)
    {
        string s = reader.ReadToEnd();
        System.Diagnostics.Debug.WriteLine(s);
        Console.WriteLine(s);
        Console.ReadKey();
    }
}

当我 运行 这个时,我在 Process.Start() 上得到一个 Win32Exception 因为它说 "The system cannot find the file specified." 但是,我已经通过 PATH 设置为 C:\Program Files\Java\jdk1.8.0_31\bin\。这是我的完整 PATH(Java 路径位于末尾):

C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\wbem;C:\Program Files\Microsoft SQL Server0\Tools\Binn\;C:\Program Files (x86)\Windows Kits.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\TypeScript.0\;C:\Program Files\Microsoft SQL Server0\Tools\Binn\;C:\Users\James\utils\bash\;C:\Users\James\utils\batch\;C:\Program Files (x86)\Git\bin\;%JAVA_HOME%\bin\

这是 JAVA_HOME 环境变量我的 PATH 引用:

C:\Program Files\Java\jdk1.8.0_31\

当我在命令提示符中手动输入 javac [file] 时,它工作正常。 但是在 Process.Start() 中,我必须指定 javac [file] 的完整路径=26=]。知道为什么吗?

编辑: 根据 的建议,我发现 PATH 确实被当前进程所看待。打印 Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Process) 结果为

C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\NativeBinaries/x86;C:\ProgramData\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\wbem;C:\Program Files\Microsoft SQL Server0\Tools\Binn\;C:\Program Files (x86)\Windows Kits.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\TypeScript.0\;C:\Program Files\Microsoft SQL Server0\Tools\Binn\;C:\Users\James\utils\bash\;C:\Users\James\utils\batch\;C:\Program Files (x86)\Git\bin\

这似乎排除了 javac 的路径。

看到不同路径的最可能原因:

您从使用默认路径的桌面快捷方式(或开始菜单)启动 VS(和相应的应用程序)。您使用添加更多路径的附加 CMD 配置文件启动命令提示符。

修复:

  • 更新系统范围的 PATH 变量以包含 javac 路径
  • 从相同的命令提示符启动 VS (devenv.exe),您从
  • 获得正确的 PATH 变量
  • 从相同的命令提示符启动您的程序,您从中获得正确的 PATH 变量(而不是 VS)。

修复:我没有关闭 Visual Studio 自从我更新了我的 PATH

有时,解决方案可能是最简单的事情...