如题
我试过设置 “服务”里的“恢复”,失败后重新启动服务,但是象只在事件里记了一下,没有再启动。

解决方案 »

  1.   

    是不是你服务程序崩溃的时候资源没有完全释放干净,恢复的时候启动不了。可以尝试象楼上所说的,建立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外部调用前台服务程序就行了
      

  2.   

    Windows可以完成这工作的,关注