java.io.IOException的可能原因:CreateProcess error = 5

什么样的问题可能会导致Java的ProcessBuilder.start方法返回一个IOExceptionexception,并loggingerror = 5?

具体来说,我们已经看到一个远程客户系统运行一些Java代码沿线…

ProcessBuilder pb = new ProcessBuilder(cmdArray); pb.redirectErrorStream(true); Process p = pb.start(); 

抛出像这样的例外…

 java.io.IOException: CreateProcess: C:\example\example.exe argument1 argument2 error=5 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 example_code_above 

我们已经确认了在例外“C:\ example \ example.exe argument1 argument2”中注明的命令可以通过cmd.exe手动成功运行,所以我们确信命令本身没有被破坏。

error=5表示以下之一:

1)文件不可执行
2)文件不可访问

编辑 :不会抛出异常
3)命令(example.exe)以退出代码5退出

Alexandr是正确的,这是Windows安全,不允许该进程运行,但该PowerShell命令不适用于我。 这是我做的:

  • 打开Windows资源管理器,导航到example.exe
  • 右键单击它并选择“属性”
  • 转到“安全”选项卡,然后单击“编辑”按钮
  • 在顶部框中选择您的用户名,在底部选择“完全控制”或至少“读取和执行”
  • 单击确定以摆脱这些框

现在你的用户可以执行该程序。 好极了!

有时候会发生这种情况,因为你放在代码中的路径是不正确的。 对于Windows将"\\"作为路径分隔符而不是"\"例如将路径更改为"C:\\example\\example.exe"

由于Windows UAC,我有同样的例外。

即使您的帐户具有管理员权限,也会发生这种情况

为了能够运行这样的命令,我必须使用powershell来提升权限。

 powershell start-process 'start.bat' -Verb RunAs