首页 > 解决方案 > 通过 CMD 的 Java 命令在 C#.NET 中不起作用

问题描述

我正在尝试cmd使用 C# 运行 java 命令以获取我的程序的一些输入,Java 的路径设置正确,并且我能够在cmd没有任何问题的情况下运行 Java 命令,但是当我在 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();

标签: javac#cmdpathcommand

解决方案


这条线是你的问题:

proc.StartInfo.UseShellExecute = false;

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

你有两个选择:

  1. 设置UseShellExecutetrue以便它可以使用该PATH变量来查找 java.util.
  2. 使用完全限定的路径,例如"C:\Program Files\Java\jdk1.8.0_101\bin\java"

有关更多信息,请参阅此答案


推荐阅读