【发布时间】:2011-03-10 14:35:48
【问题描述】:
我正在尝试以提升的状态启动一个外部应用程序,并等到它退出后再继续:
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;那么它返回的是什么?
标签: delphi delphi-2007