加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 如何正确使用WaitForSingleObject方法等待外部程序终

发布时间:2020-12-15 03:55:50 所属栏目:大数据 来源:网络整理
导读:我正在尝试启动具有提升状态的外部应用程序,并等到它退出后再继续: var FProcess: THandle; ExecInfo: TShellExecuteInfo;begin FillChar(ExecInfo,SizeOf(ExecInfo),0); with ExecInfo do begin cbSize := SizeOf(ExecInfo); fMask := 0; Wnd := AWindow;
我正在尝试启动具有提升状态的外部应用程序,并等到它退出后再继续:
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,但我遇到了同样的问题.我在这做错了什么?

解决方法

什么代码
while WaitForSingleObject(ExecInfo.hProcess,INFINITE) <> WAIT_TIMEOUT do
  Application.ProcessMessages;

该怎么办?这是一个无限循环.

使用公正

WaitForSingleObject(ExecInfo.hProcess,INFINITE);

代替.是的,你需要

fMask:= SEE_MASK_NOCLOSEPROCESS;

获取进程句柄.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读