Hi all,
In my Java program I am launching batch script(.bat file).
I am facing following error:

 FATAL: command execution failed
    java.io.IOException: Cannot run program "cmd" (in directory "C:\..\Project_Name"): CreateProcess error=87, The parameter is incorrect
        at java.lang.ProcessBuilder.start(Unknown Source)
        at hudson.Proc$LocalProc.<init>(Proc.java:244)
        at hudson.Proc$LocalProc.<init>(Proc.java:216)
        at hudson.Launcher$LocalLauncher.launch(Launcher.java:815)
        at hudson.Launcher$ProcStarter.start(Launcher.java:381)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1148)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1113)
        at hudson.remoting.UserRequest.perform(UserRequest.java:120)
        at hudson.remoting.UserRequest.perform(UserRequest.java:48)
        at hudson.remoting.Request$2.run(Request.java:326)
        at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at hudson.remoting.Engine$1$1.run(Engine.java:62)
        at java.lang.Thread.run(Unknown Source)
        at ......remote call to VM1(Native Method)
        at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1416)
        at hudson.remoting.UserResponse.retrieve(UserRequest.java:220)
        at hudson.remoting.Channel.call(Channel.java:781)
        at hudson.Launcher$RemoteLauncher.launch(Launcher.java:928)
        at hudson.Launcher$ProcStarter.start(Launcher.java:381)
        at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:95)
        at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:64)
        at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
        at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:782)
        at hudson.model.Build$BuildExecution.build(Build.java:205)
        at hudson.model.Build$BuildExecution.doRun(Build.java:162)
        at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:534)
        at hudson.model.Run.execute(Run.java:1738)
        at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
        at hudson.model.ResourceController.execute(ResourceController.java:98)
        at hudson.model.Executor.run(Executor.java:410)
    Caused by: java.io.IOException: CreateProcess error=87, The parameter is incorrect
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(Unknown Source)
        at java.lang.ProcessImpl.start(Unknown Source)
        at java.lang.ProcessBuilder.start(Unknown Source)
        at hudson.Proc$LocalProc.<init>(Proc.java:244)
        at hudson.Proc$LocalProc.<init>(Proc.java:216)
        at hudson.Launcher$LocalLauncher.launch(Launcher.java:815)
        at hudson.Launcher$ProcStarter.start(Launcher.java:381)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1148)
        at hudson.Launcher$RemoteLaunchCallable.call(Launcher.java:1113)
        at hudson.remoting.UserRequest.perform(UserRequest.java:120)
        at hudson.remoting.UserRequest.perform(UserRequest.java:48)
        at hudson.remoting.Request$2.run(Request.java:326)
        at hudson.remoting.InterceptingExecutorService$1.call(InterceptingExecutorService.java:68)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at hudson.remoting.Engine$1$1.run(Engine.java:62)
        at java.lang.Thread.run(Unknown Source)
    Build step 'Execute Windows batch command' marked build as failure
    Finished: FAILURE

I have made Jenkins service as Windows service and tried with providing administrator privileges to the service. But I am facing the same error.

Following are the ways I am launching my batch script:

Desktop.getDesktop().open(new File("C:\\file1.bat"));
and
Runtime.getRuntime().exec("cmd /c C:\\file1.bat");

Please anyone tell me how to solve this(In this case my all client machines are windows machines).

  1. Use ProcessBuilder, which is the more recent replacement for Runtime exec
  2. Parse the args yourself and pass then separately to ProcessBuilder, because its default parsing of command and parameters is a frequent source of problems. eg try something like

new ProcessBuilder("cmd", "/c", "C:\file1.bat").start();

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.