我需要启动一个进程,并有机会获得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";
上述的和许多变化。
另外,我试过很简单的东西喜欢从这里: 从ShellExecute的获取PID
无济于事。
然而这样的:
ShellExecute(NULL, "open", "C:\\testbat.bat", NULL, NULL, SW_SHOWNORMAL);
工作没有错误。 不幸的是,我需要的PID,所以我不能使用的ShellExecute。
任何建议将不胜感激。 我觉得我已经用尽了所有的我的选择。
环境:VS 2008米的Windows 7
编辑 :固定的代码“C:\ batchtest.bat”; 的建议。 (静止相同的结果)