我正在尝试使用 C# 在 cmd
中运行 java 命令来获取程序的一些输入,Java 的路径设置正确,并且我能够在 cmd
没有任何问题,但是当我在 C# 中尝试它时,它显示“'java'不被识别为内部或外部命令、可操作程序或批处理文件。”就好像路径未设置一样。
但是我可以在外面运行相同的命令,不知道问题是什么,请帮忙,提前感谢!
string cmd = @"/c java -jar """ + $"{treeEditDistanceDataFolder}libs" + $@"\RTED_v1.1.jar"" -f ""{f1}"" ""{f2}"" -c 1 1 1 -s heavy --switch -m";
Console.WriteLine(cmd);
var proc = new Process();
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.Arguments = cmd;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.Start();
Console.WriteLine("Process started");
string output = proc.StandardOutput.ReadToEnd();
Console.WriteLine("Output was read");
string error = proc.StandardError.ReadToEnd();
proc.WaitForExit();
最佳答案
这一行是你的问题:
proc.StartInfo.UseShellExecute = false;
当UseShellExecute
为true
时,如果要启动的应用程序只是可执行文件名称,则将使用系统和用户PATH
变量。由于您将其设置为 false
,并且您的应用程序文件夹中不存在 java
,因此 .NET 无法找到它。
您有两个选择:
- 将
UseShellExecute
设置为true
,以便它可以使用PATH
变量来查找 java。 - 使用完全限定路径,例如
“C:\Program Files\Java\jdk1.8.0_101\bin\java”
参见this answer了解更多信息。
关于通过 CMD 的 Java 命令在 C#.NET 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59657637/