【发布时间】:2014-07-15 15:00:22
【问题描述】:
我需要启动一个进程并有权访问 PID,因此我尝试使用 ShellExecuteEx。我正在尝试打开一个批处理文件。但是,无论我如何传递参数,无论文件位于何处以及我对文件有什么权限,该函数都会返回错误代码 5:访问被拒绝。
- 该文件与已成功读取的配置文件位于同一位置。
- 文件已设置为任何用户的完全访问权限。
- 它适用于任何文件类型。我试过只打开具有相同结果的文本文件(错误 5)
- 如果我改用 ShellExecute(),批处理文件运行成功。
这是我尝试过的一些代码:
SHELLEXECUTEINFO exInfo;
exInfo.cbSize = sizeof(SHELLEXECUTEINFO);
exInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
exInfo.lpVerb = "open";
exInfo.lpFile = "C:\\batchtest.bat";
exInfo.nShow = SW_NORMAL;
BOOL hReturnCode = ShellExecute(&exInfo);
DWORD LastError = GetLastError();
我也试过了:
SHELLEXECUTEINFO exInfo;
exInfo.cbSize = sizeof(SHELLEXECUTEINFO);
exInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
exInfo.lpVerb = "open";
exInfo.lpFile = "C:\\Windows\\system32\\cmd.exe";
exInfo.lpParameters = "batchtest.bat";
以及上述的许多变体。
另外,我尝试了一些非常简单的方法,例如: Get PID from ShellExecute
无济于事。
但是:
ShellExecute(NULL, "open", "C:\\testbat.bat", NULL, NULL, SW_SHOWNORMAL);
可以正常工作。不幸的是,我需要 PID,所以我不能使用 ShellExecute。
任何建议将不胜感激。我觉得我已经用尽了所有的选择。
环境: 对比 2008 视窗 7
编辑:将代码固定为“C:\batchtest.bat”;按照建议。 (还是一样的结果)
【问题讨论】:
-
这可能已经回答了......这里:stackoverflow.com/questions/7620322/get-pid-from-shellexecute
-
嗨,米格,我在我的问题中引用了这个答案。它对我不起作用。
标签: shellexecute shellexecuteex