OnStart里,建立线程,
var  //全局变量
  hList : array [0..1] of THandle;
线程程序
var
  n : integer;
  PID : DWORD;
begin
  hList[0] := CreateEvent(NIL, False , False , NIL);
  //if hList[0]=0 then错误处理
  while Not Terminated do begin
    PID := GetProcessID('进程.Exe');//这个函数得自己实现
    if PID=0 then begin
       //启动程序
        Continue;
    end;
    hList[1] := OpenProcess(PROCESS_ALL_ACCESS,False,PID);
    if hList[1]=0 then begin  
       //错误处理
    end;
     n := WaitForMultipleObjects(2, @hList , False , DWORD(-1));
    CloseHandle(hList[1]);
    if n=AIT_OBJECT_0+1 then begin
      //重新启动程序
       Continue;
     end;
    if n=WAIT_OBJECT_0 then Break;
    //n=其他  错误处理
  end;
  CloseHandle(hList[0]);
  FreeOnTerminate := True;
end;OnStop时
begin
  ThreadObject.Terminate;
  SetEvent(hList[0]);
end;

解决方案 »

  1.   

    服务启动应用程序在当前登录用户会话里面还是挺麻烦的.既然楼主对Service不熟,估计你也搞不定.
    你再写一个后台程序监控这个后台进程就行了,不一定要服务
      

  2.   

    谢谢大家的指教,我这个不要求“服务启动应用程序在当前登录用户会话里面”,只要后台运行即可。
    现在唯一拿不准的是,如果用户不是以administrator登录的话,会不会影响这个服务打开程序?好像在win7里似乎有权限之类的东西。