Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用参数从java服务器端运行vb exe文件_Java_Maven_Server - Fatal编程技术网

如何使用参数从java服务器端运行vb exe文件

如何使用参数从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

我正在编写一个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 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+字符串命令,不带“:

    更改后,我收到以下错误:“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进程运行它吗?或者我的代码有什么问题

  • 研究命令的错误和输出流。需要重定向它们并在单独的线程中对它们进行流式处理。或者试试这个

    文件日志=新文件(“日志”); pb.重定向错误流(真); pb.redirectOutput(Redirect.appendTo(log))

  • 完整路径正确吗?您能否将逗号行空间打印到一个名为run.cmd的文件中,并手动运行该文件,然后从提示符中查看结果

  • 您从哪个目录启动进程可能与java程序运行的目录不同?Process builder具有

  • 要知道java程序正在使用哪个目录,请执行以下操作:

    File f = new File("./");
    try{
        System.out.println("Start dir is :" + f.getCanonicalFile());
    }catch...
    

  • 我不认为您不需要添加引号,只需在数组中用实际值设置它们。但是,如果从.cmd运行,则需要在参数中加引号,用空格限定参数。测试时,最好在路径或参数中没有空格
  • 请参阅github.com/tgkprog/nli/blob/master/RunCmd.java如果您重定向到日志,请不要在循环中再次获取流。不要通过cmd.exe调用。在我的例子中,忽略实际的命令,放置ur exe和params,我只是像在ubuntu上一样调用了一个sh文件。你和你的4个情人打电话

  • 研究命令的错误和输出流。需要重定向它们并在单独的线程中对它们进行流式处理。或者试试这个

    文件日志=新文件(“日志”); pb.重定向错误流(真); pb.redirectOutput(Redirect.appendTo(log))

  • 完整路径正确吗?您能否将逗号行空间打印到一个名为run.cmd的文件中,并手动运行该文件,然后从提示符中查看结果

  • 您从哪个目录启动进程可能与java程序运行的目录不同?Process builder具有

  • 要知道java程序正在使用哪个目录,请执行以下操作:

    File f = new File("./");
    try{
        System.out.println("Start dir is :" + f.getCanonicalFile());
    }catch...
    

  • 我不认为您不需要添加引号,只需在数组中用实际值设置它们。但是,如果从.cmd运行,则需要在参数中加引号,用空格限定参数。测试时,最好在路径或参数中没有空格

  • 请参阅github.com/tgkprog/nli/blob/master/RunCmd.java如果您重定向到日志,请不要在循环中再次获取流。不要通过cmd.exe调用。在我的例子中,忽略实际的命令,放置ur exe和params,我只是像在ubuntu上一样调用了一个sh文件。用4个参数调用

    正如我所理解的process builder,不应该在命令字符串中串联参数,而是将每个参数作为独立参数传递。您是否尝试过
    ProcessBuilder pb=newprocessbuilder(命令)ProcessBuilder pb=newprocessbuilder(命令)File f = new File("./");
    try{
        System.out.println("Start dir is :" + f.getCanonicalFile());
    }catch...