【发布时间】:2019-04-28 07:47:38
【问题描述】:
我正在编写一个 java 服务器进程,它还应该只在 windows 中运行带有参数的 vb.exe 文件。
我尝试使用带有 start 功能的 ProcessBuilder 和带有 exec 功能的 Process 但我没有错误但没有任何反应!
以cmd为例:
"C:\AL500\BIAFLABEL\AddToQueue.exe" "C:\AL500\BiafLabel\Templates\2.xml" -printer \\mickaelbpc\System-N
代码中的命令行定义:
String fullcmd = "\"C:\\AL500\\BIAFLABEL\\AddToQueue.exe\" \"C:\\AL500\\BiafLabel\\Templates\\2.xml\" -printer \\\\mickaelbpc\\System-N";
String fullcmd1 = "C:\\AL500\\BIAFLABEL\\AddToQueue.exe C:\\AL500\\BiafLabel\\Templates\\2.xml -printer \\\\mickaelbpc\\System-N";
String cmd1 = "C:\\AL500\\BIAFLABEL\\AddToQueue.exe";
String cmd2 = "C:\\AL500\\BiafLabel\\Templates\\2.xml";
String cmd3 = "-printer";
String cmd4 = "\\\\mickaelbpc\\System-N";
String[] command = new String[]{cmd1, cmd2, cmd3,cmd4};
-
进程+数组:
File dir = new File("C:/workspace"); Process process = Runtime.getRuntime().exec(command, null, dir); process.waitFor(); InputStream stdout = process.getInputStream(); InputStream stderr = process.getErrorStream(); String strData; StringBuffer sb = new StringBuffer(""); BufferedReader brData = new BufferedReader(new InputStreamReader(stdout)); while ((strData = brData.readLine()) != null) { sb = sb.append(strData).append("\r\n"); } brData.close(); -
ProcessBuilder + 带“:”的字符串命令
ProcessBuilder pb=new ProcessBuilder(fullcmd); pb.redirectErrorStream(true); Process process1=pb.start(); BufferedReader inStreamReader = new BufferedReader( new InputStreamReader(process1.getInputStream())); String line; while (true) { line = inStreamReader.readLine(); if (line == null) { break; } System.out.println(line); -
ProcessBuilder + 不带“:”的字符串命令
File log = new File("log"); ProcessBuilder pb=new ProcessBuilder(/*command*/fullcmd1); pb.redirectErrorStream(true); pb.redirectOutput(Redirect.appendTo(log)); Process process1=pb.start(); BufferedReader inStreamReader = new BufferedReader( new InputStreamReader(process1.getInputStream())); String line; while (true) { line = inStreamReader.readLine(); if (line == null) { break; } System.out.println(line); }更改后我收到此错误:“java.io.IOException:无法运行程序“C:\AL500\BIAFLABEL\AddToQueue.exe C:\ AL500\BiafLabel\Templates\2.xml -printer \mickaelbpc\System-N": CreateProcess error=2, 系统找不到指定的文件" 能否请教?
-
带有 cmd.exe 的 ProcessBuilder:
ProcessBuilder pb=new ProcessBuilder("cmd.exe","/c",fullcmd); pb.redirectErrorStream(true); Process process1=pb.start(); BufferedReader inStreamReader = new BufferedReader( new InputStreamReader(process1.getInputStream())); String line; while (true) { line = inStreamReader.readLine(); if (line == null) { break; } System.out.println(line); }
我做了所有的选项等等...如果有必要我会添加更多的例子
vb exe 应该打印一个文件。知道如何从java进程运行它吗?或者我的代码有什么问题?
【问题讨论】:
-
据我了解流程构建器,您不应该在命令字符串中连接参数,而是将每个参数作为独立参数传递。你试过
ProcessBuilder pb=new ProcessBuilder(command); -
这个可执行文件应该运行在服务器还是客户端?
-
Alexandre Cartapanis:我试过了,但结果相同 - 没有错误,也没有任何反应。
-
Andrew Thompson:我如何检查它?我在命令提示符下运行相同的命令行并且它可以工作。问题只是当我在 java 服务器上这样做时