我在c#中执行jar文件时遇到问题。
此jar文件为epubcheck.jar
这是我运行文件的代码
public string IdpfValidateEpub(string epub)
{
try
{
string result = null;
string epubCheckPath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "epubcheck.jar");
string arguments = "java -jar" + " \"" + epubCheckPath + "\"" + " \"" + epub + "\"";
System.Diagnostics.Process pProcess = new System.Diagnostics.Process();
//strCommand is path and file name of command to run
pProcess.StartInfo.FileName = @"cmd.exe";
//strCommandParameters are parameters to pass to program
pProcess.StartInfo.Arguments = arguments;
Debug.WriteLine("arguments: " + pProcess.StartInfo.Arguments);
pProcess.StartInfo.UseShellExecute = false;
pProcess.StartInfo.CreateNoWindow = false;
//Set output of program to be written to process output stream
pProcess.StartInfo.RedirectStandardOutput = true;
//Start the process
pProcess.Start();
//Get program output
result = pProcess.StandardOutput.ReadToEnd();
//Wait for process to finish
pProcess.WaitForExit();
return result;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
Debug.WriteLine(ex.StackTrace);
throw ex;
}
}
但是该程序根本没有运行。我还将属性设置为显示窗口。这样我就可以查看其运行与否。但是它只显示这样的命令提示符
我还打印了arguments
中传递的System.Diagnostics.Process
,以检查参数是否正确。
程序打印完参数后。我只是复制并粘贴在命令提示符下。该程序将按预期工作。但是为什么它在我的C#代码中不起作用?
非常感谢您。
答案 0 :(得分:2)
Java本身就是一个程序,因此您实际上不需要运行cmd.exe
。
将参数更改为以下内容,以便传递java
的参数:
string arguments = "-jar" + " \"" + epubCheckPath + "\"" + " \"" + epub + "\"";
然后只需启动java
而不是cmd
:
pProcess.StartInfo.FileName = @"java";