如何使用参数从java服务器端运行vb exe文件
我正在编写一个java服务器进程,该进程还应仅在windows中运行带有参数的vb.exe文件 我尝试使用ProcessBuilder和start函数以及ProcesswithExec函数,但没有出现错误,但什么也没有发生 例如,cmd:如何使用参数从java服务器端运行vb exe文件,java,maven,server,Java,Maven,Server,我正在编写一个java服务器进程,该进程还应仅在windows中运行带有参数的vb.exe文件 我尝试使用ProcessBuilder和start函数以及ProcesswithExec函数,但没有出现错误,但什么也没有发生 例如,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 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 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);
}
File f = new File("./");
try{
System.out.println("Start dir is :" + f.getCanonicalFile());
}catch...
File f = new File("./");
try{
System.out.println("Start dir is :" + f.getCanonicalFile());
}catch...
请参阅github.com/tgkprog/nli/blob/master/RunCmd.java如果您重定向到日志,请不要在循环中再次获取流。不要通过cmd.exe调用。在我的例子中,忽略实际的命令,放置ur exe和params,我只是像在ubuntu上一样调用了一个sh文件。用4个参数调用正如我所理解的process builder,不应该在命令字符串中串联参数,而是将每个参数作为独立参数传递。您是否尝试过
ProcessBuilder pb=newprocessbuilder(命令)这个可执行文件应该在服务器上还是在客户端上运行?Alexandre Cartapanis:我试过了,但结果是一样的-没有错误,什么也没有发生。Andrew Thompson:我如何检查它?我在命令提示符下运行相同的命令行,它可以正常工作。问题是,只有在java服务器上执行此操作时,正如我所理解的process builder,您不应该在命令字符串中串联参数,而应该将每个参数作为独立参数传递。您是否尝试过ProcessBuilder pb=newprocessbuilder(命令)这个可执行文件应该在服务器上还是在客户端上运行?Alexandre Cartapanis:我试过了,但结果是一样的-没有错误,什么也没有发生。Andrew Thompson:我如何检查它?我在命令提示符下运行相同的命令行,它可以正常工作。问题是,只有当我在java服务器上执行此操作时,您的答案是:1。日志文件为空,但未发生任何事件2。我将命令行(C:\AL500\BIAFLABEL\AddToQueue.exe C:\AL500\BIAFLABEL\Templates\2.xml-printer\\mickaelbpc\System-N)放在run.cmd文件中,它可以手动工作,但我必须使用空格s3。pb.directory()为空-这意味着使用当前Java进程的工作目录。当前目录是:C:\eclipse,我可以从这个文件夹手动运行命令行。你有什么想法或其他解决方案吗?你能展示你现在的完整代码吗?我能想到的唯一一件事是处理流(输入、输出和错误流),如果处理不当,进程可能会挂起process.waitFor();如果可能的话,在您完全设置了流程之后将其移动到github中,以便将您的类放入github中,这样它就可以运行并且很容易看到关于您的答案的完整文件:1。日志文件为空,但未发生任何事件2。我将命令行(C:\AL500\BIAFLABEL\AddToQueue.exe C:\AL500\BIAFLABEL\Templates\2.xml-printer\\mickaelbpc\System-N)放在run.cmd文件中,它可以手动工作,但我必须使用空格s3。pb.directory()为空-这意味着使用当前Java进程的工作目录。当前目录是:C:\eclipse,我可以从这个文件夹手动运行命令行。你有什么想法或其他解决方案吗?你能展示你现在的完整代码吗?我能想到的唯一一件事就是处理流(输入、输出和错误流),如果不这样做的话
File f = new File("./");
try{
System.out.println("Start dir is :" + f.getCanonicalFile());
}catch...