首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CreateProcessW失败(ACESS_DENIED)

CreateProcessW失败(ACESS_DENIED)
EN

Stack Overflow用户
提问于 2011-01-28 14:01:09
回答 3查看 2.4K关注 0票数 2

目前,我将应用程序转换为使用CreateProcessW()而不是Runtime.exec(),因为我需要它提供的信息。但是,对CreateProcessW()的任何调用都会失败,错误代码5(访问被拒绝)。我一直无法找出为什么会发生这种情况,因为Runtime.exec()在同一种情况下运行良好。

我的错误可能出现在以下代码段、方法调用和jna接口中。

代码语言:javascript
复制
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的定义

代码语言:javascript
复制
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:\节目\电影制作人\

也用不同的路径进行测试,所以不存在空白问题。

谢谢

更新:

事实证明,这个错误是由我的调用代码在我检查工作dir和exe路径后切换它们引起的。由于结果访问被拒绝,我实际上认为它至少找到了exe。我将添加一个IllegalArgumentException来解决这个问题。

因为我有一个额外的错误,即exe相对于工作dir,所以我将接受这个答案。感谢大家的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-28 18:24:39

CreateProcessW的第一个参数必须是完整路径或相对于当前目录的路径。它不能是相对于工作目录参数的路径,这似乎是您期望它所做的。

尝试将C:\Programme\Movie Maker\moviemk.exe作为名称参数传递

票数 1
EN

Stack Overflow用户

发布于 2011-01-28 15:26:20

通常,lpApplicationName函数的第一个参数NULL将用作NULL,而第二个参数lpCommandLine应该包含以您想要启动的程序名开头的命令行。

只需将第一个和第二个参数转换为CreateProcessW调用当前使用的参数即可。

票数 1
EN

Stack Overflow用户

发布于 2011-01-28 17:07:16

您要输入的完整路径是什么?Runtime.exec可能在内部引用该参数,您可能会遇到以下情况:

http://support.microsoft.com/kb/179147

可能存在路径的前缀,并导致它试图执行文件夹或其他文件?

试着在整个路径周围加上引号,看看这是否有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4829031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档