Delphi写的服务程序(TService),崩溃后怎样可以自动重启? 如题我试过设置 “服务”里的“恢复”,失败后重新启动服务,但是象只在事件里记了一下,没有再启动。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是你服务程序崩溃的时候资源没有完全释放干净,恢复的时候启动不了。可以尝试象楼上所说的,建立2个进程,一个就后台监视,校验,发现异常kill掉前台的进程再让它重新启动。校验的话用自定义消息好了。关闭进程代码如下uses Tlhelp32; function KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess( OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; 关闭后再shexecute外部调用前台服务程序就行了 Windows可以完成这工作的,关注 怎么往cxgrid控件添加数据? 谁做过网页客服系统,问个问题 有什么的好的人气好的软件销售论坛介绍给小弟 我用data module层做的程序如何在没有DELPHI的机器上运行? 网络数据流传输问题 怎样用D编写控件? 画的图形在点中移动时的问题 如何在DELPHI中创建一个数据库(菜鸟) 为什么paintbox refresh 后,以前的图形没了 Socket问题,请高手进入 StringGrid如何取消单元格处于选中状态? 请教一下如何才能在fastreport中动态设置memoview显示的值
uses
Tlhelp32; function KillTask(ExeFileName: string): Integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(
OpenProcess(PROCESS_TERMINATE,
BOOL(0),
FProcessEntry32.th32ProcessID),
0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
end; 关闭后再shexecute外部调用前台服务程序就行了