procedure RestartProcess(var Process: TProcessStatus);
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
try
// 关闭旧的进程句柄
if Process.ProcessHandle <> 0 then begin
CloseHandle(Process.ProcessHandle);
Process.ProcessHandle := 0;
end;
// 初始化启动信息
FillChar(StartupInfo, SizeOf(TStartupInfo), 0);
StartupInfo.cb := SizeOf(TStartupInfo);
// 创建新进程
if CreateProcess(nil,
PChar(Process.ExecutablePath),
nil, nil, False,
NORMAL_PRIORITY_CLASS,
nil, nil,
StartupInfo,
ProcessInfo) then begin
// 保存新的进程句柄
Process.ProcessHandle := ProcessInfo.hProcess;
Process.LastCheckTime := GetTickCount;
LogMessage('进程重启成功');
end else begin
LogMessage(Format('进程重启失败,错误码:%d',
[GetLastError]));
end;
except
on E: Exception do begin
LogMessage('重启进程时发生异常:' + E.Message);
end;
end;
end;