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
。
有时,解决方案可能是最简单的事情...
我正在尝试使用 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
。
有时,解决方案可能是最简单的事情...