簡體   English   中英

TerminateProcess()不會關閉應用程序

[英]TerminateProcess() doesn't close the application

我正在嘗試使用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 ,必須將fMask設置為SEE_MASK_NOCLOSEPROCESS才能設置.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);

您應該添加錯誤檢查功能,並可以使用以下AssocQueryString查詢默認瀏覽器的路徑: AssocQueryString如下所示: AssocQueryString(0,ASSOCSTR_EXECUTABLE,"http","open", szExe, &cchExe);

您可以通過檢查返回的hProcess(例如,在調試器中)來獲取更多信息。 還要確保設置了SEE_MASK_NOCLOSEPROCESS標志。

但是我的心理力量說:打開IE文檔並不一定會創建一個新的過程。 而且,如果確實如此,則可能不是您認為的那樣:您可能創建的過程可能催生了另一個實際托管文檔的過程。 雷蒙德(Raymond Chen)提到了這篇博客文章的一半。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM