cro*_*don 9 delphi delphi-2007
我正在尝试启动具有提升状态的外部应用程序,并等到它退出后再继续:
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;
Run Code Online (Sandbox Code Playgroud)
这启动了,但它只是在等待.调用程序永远不会继续调用WaitForSingleObject,即使在被调用的程序退出之后也是如此.
我尝试过WAIT_OBJECT_0而不是WAIT_TIMEOUT,但我遇到了同样的问题.我在这做错了什么?
klu*_*udg 12
什么代码
while WaitForSingleObject(ExecInfo.hProcess, INFINITE) <> WAIT_TIMEOUT do
Application.ProcessMessages;
Run Code Online (Sandbox Code Playgroud)
应该怎么做?这是一个无限循环.
使用公正
WaitForSingleObject(ExecInfo.hProcess, INFINITE);
Run Code Online (Sandbox Code Playgroud)
代替.是的,你需要
fMask:= SEE_MASK_NOCLOSEPROCESS;
Run Code Online (Sandbox Code Playgroud)
获取进程句柄.