What kind of problem(s) could cause Java's ProcessBuilder.start method to return an IOException with a note saying error=5?
Specifically, we've seen a remote customer system running some Java code along the lines of...
ProcessBuilder pb = new ProcessBuilder(cmdArray);
pb.redirectErrorStream(true);
Process p = pb.start();
...throw exceptions like this...
java.io.IOException: CreateProcess: C:\example\example.exe argument1 argument2 error=5
at java.l开发者_StackOverflowang.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 example_code_above
We have confirmed that the command noted in the exception, "C:\example\example.exe argument1 argument2" can be run successfully by hand via cmd.exe, so we are confident the command itself is not broken.
error=5
means one of:
1) file is not executable
2) file is not accessible
EDIT: wont throw exception
3) the command (example.exe) exits with exit code 5
Alexandr is correct, it's Windows security that's not allowing that process to run, but that powershell command didn't work for me. here's what I did:
- Open up Windows explorer, and navigate to example.exe
- Right click on it and choose "Properties"
- Go to the "Security" tab and click the "Edit" button
- Select your username in the top box and in the bottom one give "Full Control" or at least "Read & Execute"
- Click OK to get rid of these boxes
Now your user can execute that program. Yay!
Sometimes this happens because the path you put in code is not correct. For windows put "\\"
as a path separator instead of "\"
For example change path to "C:\\example\\example.exe"
I have the same exception because of Windows UAC.
This can happen even if your account has administrator privileges.
To be able to run such command I had to use powershell to elevate privileges.
powershell start-process 'start.bat' -Verb RunAs
精彩评论