我需要启动一个进程并可以访问 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。
任何建议将不胜感激。我觉得我已经用尽了所有的选择。
环境:VS 2008 Windows 7
编辑:将代码修复为“C:\batchtest.bat”;按照建议。(还是一样的结果)