2015-01-15 86 views
1

我有这个C#程序,我做了,虽然我可以通过单击exe文件或通过单击一个批处理文件运行它很好,我不能启动该程序我对一个Java程序运行。我试过这行代码,无法运行软件。C#程序将不会从Java执行

Runtime.getRuntime().exec("nameOfTheExeFile"); 

或将其设置为我启动程序的批处理文件。

Runtime.getRuntime().exec("nameOfTheBatchFile"); 

现在,有趣的是,当我与批处理文件试试我得到一个错误,指出该文件无法找到,但是当我双击该批处理文件,它会启动exe文件就好了。

我甚至尝试使用的过程,但我不与该进程得到任何运气以及

List cmdAndArgs = Arrays.asList(new String[]{"cmd.exe", "/c", "ProgramName.exe"}); 

ProcessBuilder pb = new ProcessBuilder(cmdAndArgs); 

Process p = pb.start(); 

奇怪的是我没有得到任何错误的。即使当我尝试单元测试时,我也没有任何错误。有没有我失踪的过程或什么?我迷失在做什么。

更新:

当我在任务管理器检查,我可以看到该程序正在运行,但不是exe文件的版本。我看到ProgramName.vshost.exe,是否有这个显示的原因,而不是exe文件?

+4

可以ProgramName.exe在您的PATH发现了什么? – NESPowerGlove 2015-01-15 18:29:24

+0

是的,它是可以的,我没有得到一个错误,说该文件不存在,或者我找不到该批处理文件。批处理文件与exe文件位于同一目录中。 – 2015-01-15 18:40:59

+0

我有目录设置我确信,因为我可以设置目录和列表,并仍然可以找到批处理文件 – 2015-01-15 18:42:46

回答

1

既然你的程序是命令行程序,你需要从cmd启动它。我不确定这是否是最好的方法,但它是有效的。

Runtime.getRuntime().exec("cmd /c start nameOfTheBatchFile"); 

批处理文件:

start cmd.exe /k "nameOfExeFile" 
exit 
+0

如果路径错误,我会得到一个空错误?我没有得到那个错误。其他然后当我尝试从批处理文件运行它。 – 2015-01-15 19:20:11

+0

Runtime.getRuntime()。exec(“nameOfTheExeFile”);会给你IOException,但是即使找不到文件,processbuilder也不会抛出任何异常。你可以自己尝试。 – FINDarkside 2015-01-15 19:25:19

+0

那是奇怪的,当我尝试我得到一个文件不存在的错误,但为什么会给我的Java,并且在你问是的exe文件之前:P,我试图与批处理文件,而我仍然可以运行exe文件不想运行的批处理文件。 – 2015-01-15 19:44:55