我試圖啓動與地位提升外部應用程序,並等待它繼續之前退出:如何正確使用WaitForSingleObject方法等待外部程序終止?
var
FProcess: THandle;
ExecInfo: TShellExecuteInfo;
begin
FillChar(ExecInfo, SizeOf(ExecInfo), 0);
with ExecInfo do
begin
cbSize := SizeOf(ExecInfo);
fMask := 0;
Wnd := AWindow;
lpVerb := 'runas';
lpFile := PChar(APath);
lpParameters := PChar(AParams);
lpDirectory := PChar(AWorkDir);
nShow := SW_NORMAL;
end;
Result := ShellExecuteEx(@ExecInfo);
if Wait then
begin
while WaitForSingleObject(ExecInfo.hProcess, INFINITE) <> WAIT_TIMEOUT do
Application.ProcessMessages;
end;
這將啓動,但它只是一直等待。即使被調用的程序退出,調用程序也不會繼續調用WaitForSingleObject。
我試過WAIT_OBJECT_0而不是WAIT_TIMEOUT,但我有同樣的問題。我在這裏做錯了什麼?
什麼樣的過程,你試圖執行?你確定它成功了嗎?如果是這樣,你確定你有一個有效的句柄?在你遇到你所問的部分之前,有很多東西可能會在代碼中出錯。確保你問的是正確的事情。如果WaitForSingleObject調用返回,它顯然不會返回Wait_Timeout;所以*返回的是什麼? – 2011-03-10 15:30:32