我目前将应用程序转换为使用,CreateProcessW()
而不是Runtime.exec()
因为我需要它提供的信息。但是,对 CreateProcessW() 的任何调用都会失败,并显示错误代码 5 (ACCESS DENIED)。我一直无法找出为什么会发生这种情况,因为 Runtime.exec() 在相同的情况下运行良好。
我的错误可能出现在以下代码片段之一、方法调用和 jna 接口中。
public ProcessInfo createProcess(String dir, String name){
ProcessInfo pi = new ProcessInfo();
StartupInfo start = new StartupInfo();
mem.CreateProcessW(new WString(name),
null,
null,
null,
false,
0,
null,
new WString(dir),
start.getPointer(),
pi.getPointer());
return pi;
}
我对 CreateProcessW 的定义
boolean CreateProcessW(WString apname,
char[] comline,
Pointer p,
Pointer p2,
boolean inheritHandles,
int createFlags,
String environment,
WString directory,
Pointer startinf,
Pointer processInfo);
附加信息:
- Runtime.exec() 使用给定的字符串成功
- 设置 StartupInfo 的大小
- 使用的测试环境:WinXP SP3 和 Netbeans 6.9.1
使用的示例参数:
- 名称:moviemk.exe
- 目录:C:\Programme\Movie Maker\
还用不同的路径进行了测试,所以不是空格问题
谢谢
更新:
事实证明,错误是由于我在检查后调用代码在工作目录和 exe 路径周围切换引起的。由于导致访问被拒绝,我实际上认为它至少找到了 exe。我将添加一个 IllegalArgumentException 来解决这个问题。
由于我遇到了与工作目录相关的 exe 附加错误,因此我将接受该答案。感谢大家的帮助。