如何在一个service application里保护某个进程不被关闭

怎么在一个service application里保护某个进程不被关闭?
有一个后台程序需要一直运行在电脑里,但这个程序不知为什么经常莫名其妙悄悄的就退出了,我想做一个service application,在里面定期检测这个程序是否运行,如果没有就打开它。
但对delphi的service application研究不多,请大家帮忙,指点一下大体的过程,比如需要用到service application的哪个事件,最好能简单写点伪代码,帮助本人理清思路。
谢谢!

------解决方案--------------------
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;


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