gpt4 book ai didi

delphi - 启动长时间运行的后台进程并检查状态

转载 作者:行者123 更新时间:2023-12-03 15:55:14 24 4
gpt4 key购买 nike

我想从 Delphi 启动一个可能长时间运行的后台进程。我想让进程独立运行,但首先我想检查进程是否正常启动。

如果启动时出现任何问题,我想捕获写入 standardErr 的任何输出并记录它。如果后台进程启动正常,我的程序需要能够退出并让生成的进程保持运行。

伪代码将是这样的:

process:=RunProgramInBackground('someCommand.exe');
sleep(1000); // Wait a bit to see if the program started OK
if process.Finished and process.ExitCode=FAIL then
Raise Exception.Create(process.ErrorStream);
process.Dispose; // Close any connection we may still have to the running process
Program.Exit; // Background process keeps running

我已经研究了一些东西(WinExec、CreateProcess、ShellExecute、JclMiscel),但找不到我想要做的任何示例。最好的方法是什么?

我使用的是 Delphi 2010

后台进程是一个第三方程序,我没有源代码。

最佳答案

看看这个 article 。我引用:“这是代码的更新和改进版本,允许您在代码中选择调用应用程序是等到其他程序关闭后再继续,还是继续将新启动的程序留给自己的设备”。

procedure ExecNewProcess(ProgramName : String; Wait: Boolean);
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;

begin
{ fill with known state }
FillChar(StartInfo,SizeOf(TStartupInfo),#0);
FillChar(ProcInfo,SizeOf(TProcessInformation),#0);
StartInfo.cb := SizeOf(TStartupInfo);
CreateOK := CreateProcess(nil, PChar(ProgramName), nil, nil,False,
CREATE_NEW_PROCESS_GROUP+NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);
{ check to see if successful }
if CreateOK then
begin
//may or may not be needed. Usually wait for child processes
if Wait then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end
else
begin
ShowMessage('Unable to run '+ProgramName);
end;

CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;

已编辑:阅读您的评论后,我建议您查看之前的question

关于delphi - 启动长时间运行的后台进程并检查状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7102514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com