如何在一个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不熟,估计你也搞不定.
你再写一个后台程序监控这个后台进程就行了,不一定要服务
有一个后台程序需要一直运行在电脑里,但这个程序不知为什么经常莫名其妙悄悄的就退出了,我想做一个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不熟,估计你也搞不定.
你再写一个后台程序监控这个后台进程就行了,不一定要服务