TerminateProcess () не закрывает приложение - PullRequest
2 голосов
/ 20 мая 2011

Я пытаюсь использовать 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 открывается, но никогда не закрывается.Я что-то не так делаю?

Ответы [ 2 ]

5 голосов
/ 20 мая 2011

В соответствии с 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(0,ASSOCSTR_EXECUTABLE,"http","open", szExe, &cchExe);

0 голосов
/ 20 мая 2011

Вы можете получить больше информации, проверив возвращенный hProcess (например, в отладчике). Также убедитесь, что у вас установлен флаг SEE_MASK_NOCLOSEPROCESS.

Но мои экстрасенсорные способности говорят: открытие документа IE не обязательно создает новый процесс. И, если это произойдет, это может быть не то, что вы думаете: процесс, который вы, возможно, создали, возможно, породил еще один процесс для фактического размещения документа. Раймонд Чен упоминает, что примерно на полпути вниз в этом блоге .

...