在C#中执行jar文件

时间:2018-08-13 04:13:25

标签: c#

我在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;
            }
        }

但是该程序根本没有运行。我还将属性设置为显示窗口。这样我就可以查看其运行与否。但是它只显示这样的命令提示符

enter image description here

我还打印了arguments中传递的System.Diagnostics.Process,以检查参数是否正确。

程序打印完参数后。我只是复制并粘贴在命令提示符下。该程序将按预期工作。但是为什么它在我的C#代码中不起作用?

非常感谢您。

1 个答案:

答案 0 :(得分:2)

Java本身就是一个程序,因此您实际上不需要运行cmd.exe

将参数更改为以下内容,以便传递java的参数:

string arguments = "-jar" + " \"" + epubCheckPath + "\"" + " \"" + epub + "\"";

然后只需启动java而不是cmd

pProcess.StartInfo.FileName = @"java";