使用System.Diagnostics.Process启动一个Jar文件

3

我有一个JAR文件,我想从C#中运行它。

以下是我目前拥有的:

clientProcess.StartInfo.FileName = @"java -jar C:\Users\Owner\Desktop\myJarFile.jar";
            clientProcess.StartInfo.Arguments = "[Something]";

            clientProcess.Start();
            clientProcess.WaitForExit();

            int exitCode = clientProcess.ExitCode;

很不幸,我收到了“系统找不到指定的文件”的错误提示,这是有道理的,因为这不是一个文件,而是一个命令。

我在网上看到过一些代码,告诉你要使用:

System.Diagnostics.Process.Start("java -jar myprog.jar");

然而,我需要返回代码,并且需要等待其退出。
谢谢。

你尝试过使用 clientProcess.StartInfo.FileName = @"C:\Users\Owner\Desktop\myJarFile.jar"; 吗? - yogi
可能是重复的问题:如何从C#执行Java程序? - Filburt
@yogi - 我试过了,但它默默地失败了。 - Aabela
@Filburt - 我不同意。我的问题更具体。仅运行它的答案是使用我放在底部的代码。但是,我想要运行它,等待直到完成并获取退出代码 - 这就是问题开始的地方。 - Aabela
2个回答

12

终于解决了。文件名必须为java,并且参数必须包含jar文件的位置(以及您想传递的任何参数)。

System.Diagnostics.Process clientProcess = new Process();
clientProcess.StartInfo.FileName = "java";
clientProcess.StartInfo.Arguments = @"-jar "+ jarPath +" " + argumentsFortheJarFile;
clientProcess.Start();
clientProcess.WaitForExit();   
int code = clientProcess.ExitCode;

1
看起来你忘记删除结尾的!= 0);了 :) - Updater

2
您需要设置环境变量Path,指向java.exe可执行文件的路径,或者直接指定java.exe的完整路径。
 ProcessStartInfo ps = new ProcessStartInfo(@"c:\Program Files\java\jdk1.7.0\bin\java.exe",@"-jar C:\Users\Owner\Desktop\myJarFile.jar");
 Process.Start(ps);

我该如何获取返回代码,或者阻塞直到它完成? - Aabela

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接