为什么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);
答案 0 :(得分:0)
所以问题是SHELLEXECUTEINFO.lpFile
等于指向可执行文件的符号链接的路径。这导致使用动态数据交换。
MSDN说
在某些情况下,例如通过DDE对话满足执行时,将不会返回句柄。
因此,如果您需要处理该过程,则必须将lpFile
设置为可执行文件的实际路径,或者解析符号链接的路径。
使用lpVerb = "runas"
进行提升时效果非常好。