我正在尝试使用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
的路径。
答案 0 :(得分:2)
修复:自从我更新PATH
后,我没有关闭Visual Studio。
有时,解决方案可能是最简单的事情......
答案 1 :(得分:1)
最有可能看到不同的路径:
您从使用默认路径的桌面快捷方式(或开始菜单)启动VS(以及相应的应用程序)。使用其他CMD配置文件启动命令提示符,该文件会添加更多路径。
修正: