代码之家  ›  专栏  ›  技术社区  ›  ar099968

Delphi:如何创建独立于主应用程序的分离进程?

  •  0
  • ar099968  · 技术社区  · 6 年前

    从我的应用程序中,我需要创建一个独立于主应用程序的分离进程。这意味着,如果用户关闭主应用程序,则新进程仍处于活动状态。我不需要等待新进程的输出,然后就可以创建一个新进程,而无需等待响应。

    enter image description here

    基本上,这段代码是有效的。

    uses ShellApi;
    
    begin
      ShellExecute(0, 'open', PChar('MyConsole.EXE'), PChar('MyParam'), '', SW_HIDE);
    end;
    

    但是,我有一个疑问,进程是从主应用程序加载的DLL生成的,并且 ShellExecute 需要一个 HWND ShellExecute公司 ?

    谢谢,对不起你的英语不好!

    1 回复  |  直到 6 年前
        1
  •  -1
  •   ar099968    6 年前

    我想和你分享解决方案 CreateProcess (多亏了@DavidHeffernan)。

    ShellExecute 不适合生成新进程,因为该进程是从从主应用程序加载的DLL生成的,并且 需要一个 HWND .

    function RunProcess(ACommand: string): boolean;
    var
      StartupInfo: TStartupInfo;
      ProcessInfo: TProcessInformation;
    begin
      UniqueString(ACommand); // CreateProcess requires writeable string for lpCommandLine arg
    
      FillChar(StartupInfo, SizeOf(StartupInfo), #0);
    
      StartupInfo.cb          := SizeOf(StartupInfo);
      StartupInfo.dwFlags     := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
      StartupInfo.wShowWindow := SW_HIDE;
    
      Result := CreateProcess(nil, PChar(ACommand), nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
      if Result then
      begin
        CloseHandle(ProcessInfo.hProcess);
        CloseHandle(ProcessInfo.hThread);
      end;
    end;
    
    // ...
    
    begin
      if not(RunProcess('MyConsoleApp.exe')) then
        raise Exception.Create('RunProcess failed');
    end.