通过 CMD 的 Java 命令在 C#.NET 中不起作用

标签 java c# cmd path command

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

UseShellExecutetrue时,如果要启动的应用程序只是可执行文件名称,则将使用系统和用户PATH变量。由于您将其设置为 false,并且您的应用程序文件夹中不存在 java,因此 .NET 无法找到它。

您有两个选择:

  1. UseShellExecute 设置为 true,以便它可以使用 PATH 变量来查找 java。
  2. 使用完全限定路径,例如“C:\Program Files\Java\jdk1.8.0_101\bin\java”

参见this answer了解更多信息。

关于通过 CMD 的 Java 命令在 C#.NET 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59657637/

相关文章:

c# - 使用 'not exists' 和 'group by' Linq 到对象?

java - 在 JFreeChart 中的 XYLineChart 顶部放置一个圆圈

Java apache FTPServer 和 common.net FTPClient

c# - UdpClient 接收广播地址

cmd msbuild 错误级别始终为 0

batch-file - 批处理 - 动态标签或函数

windows - 从 CMD 检测命令行应用程序,而不会弄乱 PATH 变量或 System32/SysWow64 目录

Java JFileChooser getAbsoluteFile 添加文件扩展名

java - 在快速排序算法中寻找聪明的主元

c# - 如何将 DateTime 的 "time"转换为 int?