玩Service时遇到的难题,不要提示框则不能正常执行(50分)

  • 主题发起人 主题发起人 vinch_sh
  • 开始时间 开始时间
V

vinch_sh

Unregistered / Unconfirmed
GUEST, unregistred user!
今天一时兴起写了个小service程序自己玩,主要功能是找到当前机器里正在运行的某个进程,然后关闭它,结果编好执行时发现有个让人头疼的bug——程序一定要弹出个MessageBox后才能正常的继续执行,否则执行起来就没看不到任何反应了。

程序中的部分相关代码如下:
....................
TarrPro2 = array [0..2] of string;
arrPro2: TarrPro2;
arrPro2[0] := 'iexplore.exe';
arrPro2[1] := 'QQ.exe';
arrPro2[2] := 'PPPlayer.exe';
....................
procedure TAlartEveryday.ServiceExecute(Sender: TService);
begin
while (not Terminated) do
begin
ServiceThread.ProcessRequests(False);
sleep(10);
end;
end;

procedure TAlartEveryday.Timer1Timer(Sender: TObject);
begin
p_Check_Program;
end;

procedure TAlartEveryday.p_Check_Program;
var
dwProcessID: DWORD;
j: Integer;
begin
if TimeToStr(Now) > '23:00:00' then
begin
for j := 0 to 2 do
begin
//ShowMessage(arrPro2[j]); //note here,
//如果使用这个ShowMessage的话,程序就正常了。先弹出个提示框,我点一下,然后就关掉arrPro2[j]指定的某个进程。 如果不用这个ShowMessage的话,就没有提示框出来,指定的进程也没有被自动关掉。

//找到程序的ProcessID,比如找到"QQ.exe"的当前的进程ID
dwProcessID := Self.f_Search_ProcessID_By_ProcessName(arrPro2[j]);
if dwProcessID <> 0 then
begin
ShowMessage(arrPro2[j] + ' have been forced to shut(find)');
//根据某进程ID去关闭某个进程
Self.p_Terminate_Process_By_ProcessID(dwProcessID);
end
end
end;
end;

附注:以前曾经看过某位达人也出现过此类问题,记不清了,好象是说要通过弹出的窗口来获得什么什么东西来的,[:)],希望遇到过此类问题的朋友能指定一下,交流交流共同提高,谢谢了先。
 
看来没有高手来过~ 结帖算了
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3302479
来自:同甘共苦, 时间:2005-12-25 10:58:37, ID:3308003
=====>>杀进程也杀不掉呢!任务管理器也关不掉!怎么回事呢?---2005/12/22
进程怎么会杀不掉呢??
找到时程的PID号,假设为555 然后..
ntsd -c q -p 555
杀掉后再 卸载服务。。 代码若是不行,你就去注册表找,找到DEL 完事..呵呵
 
设置service属性,使之可与桌面交互
 
to bjaman: 自己写的小程序,没有写到注册表里~~
 
后退
顶部