TerminateProcess()不会关闭应用程序

| 我正在尝试使用TerminateProcess终止由ShellExecuteEX启动的应用程序,如下所示:
SHELLEXECUTEINFO ExecuteInfo;
ExecuteInfo.fMask = SEE_MASK_FLAG_NO_UI; /* Odd but true */
ExecuteInfo.hwnd = NULL;
ExecuteInfo.cbSize = sizeof(ExecuteInfo);
ExecuteInfo.lpVerb = NULL;
ExecuteInfo.lpFile = \"http://www.microsoft.com\";
ExecuteInfo.lpParameters = \"\";
ExecuteInfo.lpDirectory = NULL;
ExecuteInfo.nShow =  SW_SHOW;;
ShellExecuteEx(&ExecuteInfo);
//WaitForSingleObject(ExecuteInfo.hProcess, 0);
Sleep(4000);
TerminateProcess(ExecuteInfo.hProcess, 0);
IE被打开,但它从未关闭。难道我做错了什么?     
已邀请:
根据MSDN,必须将ѭ1设置为ѭ2才能设置
.hProcess
。我将添加一个测试以查看它是否为NULL。作为附带说明,我总是很幸运地使用
CreateProcess
。 编辑: 这是使用CreateProcess的方法:
PROCESS_INFORMATION pi = {0};
STARTUPINFO si = {0};
si.cb = sizeof(si);
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_SHOW;


CreateProcess(  NULL,
                \"C:\\\\Program Files\\\\Internet Explorer\\\\iexplore.exe http://www.google.com/\",
                NULL,
                NULL,
                FALSE,
                NORMAL_PRIORITY_CLASS,
                NULL,
                NULL,
                &si,
                &pi );


Sleep(4000);
TerminateProcess(pi.hProcess, 0);
您应该添加错误检查功能,并可以使用以下命令查询默认浏览器的路径:“ 6”,如下所示:
AssocQueryString(0,ASSOCSTR_EXECUTABLE,\"http\",\"open\", szExe, &cchExe);
    
您可以通过检查返回的hProcess(例如在调试器中)来获取更多信息。还要确保设置了“ 2”标志。 但是我的心理力量是:打开IE文档并不一定会创建一个新的过程。而且,如果确实如此,则可能不是您认为的那样:您可能创建的流程可能催生了另一个实际托管文档的流程。雷蒙德·陈(Raymond Chen)提到了此博客文章的一半。     

要回复问题请先登录注册