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

时间:2015-04-03 17:48:29

标签: c# path environment-variables javac process.start

我正在尝试使用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();
    }
}

当我运行此操作时,我在Win32Exception上获得Process.Start(),因为它显示"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 Server\110\Tools\Binn\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files\Microsoft SQL Server\120\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的完整路径。知道为什么吗?

编辑:根据Alexei Levenkov的建议,我发现当前流程确实看到了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 Server\110\Tools\Binn\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Users\James\utils\bash\;C:\Users\James\utils\batch\;C:\Program Files (x86)\Git\bin\

似乎排除了javac的路径。

2 个答案:

答案 0 :(得分:2)

修复:自从我更新PATH后,我没有关闭Visual Studio。

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

答案 1 :(得分:1)

最有可能看到不同的路径:

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

修正:

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