为什么ShellExecuteEx没有设置SHELLEXECUTEINFO.hProcess的值?

时间:2016-09-14 16:35:01

标签: c windows winapi

为什么SHELLEXECUTEINFO.hProcess在使用ShellExecuteEx成功启动可执行文件后仍为NULL,而如果我启动CreateProcess PROCESS_INFORMATION.hProcess的可执行文件,则设置为更正可执行文件句柄?< / p>

我必须使用ShellExecuteEx启动该可执行文件,因为它必须被提升。我正在启动的可执行文件是由我创建的winMain应用程序。

SHELLEXECUTEINFOW shellExecuteInfo;
memset(&shellExecuteInfo, 0, sizeof(SHELLEXECUTEINFOW));
shellExecuteInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
shellExecuteInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
shellExecuteInfo.hwnd = NULL;
shellExecuteInfo.lpFile = pathToExe;
shellExecuteInfo.lpDirectory = NULL;
shellExecuteInfo.nShow = SW_HIDE;
shellExecuteInfo.lpVerb = L"runas";
shellExecuteInfo.hInstApp = NULL;
shellExecuteInfo.lpParameters = NULL;
ShellExecuteExW(&shellExecuteInfo);

1 个答案:

答案 0 :(得分:0)

所以问题是SHELLEXECUTEINFO.lpFile等于指向可执行文件的符号链接的路径。这导致使用动态数据交换。 MSDN说

  

在某些情况下,例如通过DDE对话满足执行时,将不会返回句柄。

因此,如果您需要处理该过程,则必须将lpFile设置为可执行文件的实际路径,或者解析符号链接的路径。

使用lpVerb = "runas"进行提升时效果非常好。