您好,请教如何结束并重启进程,谢谢(100分)

  • 主题发起人 主题发起人 pcgod
  • 开始时间 开始时间
P

pcgod

Unregistered / Unconfirmed
GUEST, unregistred user!
您好, 如果有两个进程 A B ,某一时刻, A 向进程 B 发送一个特征字符串 ;
B 收到 这个字符串后立即 结束进程 A(完全杀死A进程) ,然后又重新启动进程 A

请问能实现吗 ? 怎么做 ? 谢谢
 
A必须向B发送包含下列信息的字符串:
1.A的进程ID - GetCurrentProcessID();
2.A的执行路径ParamStr(0)

B就可以在收到信息时做:
1.TerminateProcess(OpenProcess(PROCESS_TERMINATE,True,传递过来的ID),0);结束A进程。
2.Sleep(2001);{少等2秒}
3.WinExec(PChar(传递过来的执行路径),SW_NORMAL);
大功告成!
给分吧!
 
》A 向进程 B 发送一个特征字符串 ;
可以通过socket发送消息
》B 收到 这个字符串后立即 结束进程 A(完全杀死A进程) ,然后又重新启动进程 A
用 TerminateProcess,CreateProcess等函数,具体可以查看msdn
 
wql : 您好 , 能不能写个小例子 ?

谢谢
 
如果两个进程都是你的好办一些!

B程序:
Var
_immdone:boolean=false;//全局变量
Procedure TForm1.Button1Click;
Begin
WinExec(A程序+' '+IntToStr(Application.MainForm.Handle),SW_NORMAL);
End;

Procedure TForm1.Button2Click;{退出B程序的按钮}
Begin
_immdone:=true;
close;
End;

Procedure TForm1.FormClose;{关闭事件}
var
tmfl:file;
_id:dword;
begin
caFree:=True;
if (_immdone) then exit;
caFree:=False;

//否则是A发来的信息,读A的进程ID
assignfile(tmfl,'c:/a.id');
reset(tmfl,1);
blockread(tmfl,_id,sizeof(dword));
closefile(tmfl);

TerminateProcess(OpenProcess(PROCESS_TERMINATE,True,_id),0);//结束A进程。
Sleep(2001);{稍等2秒}
Button1Click(Nil);//再次执行A程序
end;

A程序:
Procedure TForm1.FormCreate;{事件}
var
tmfl:file;
_id:dword;
begin
//把A的进程ID保存待用
assignfile(tmfl,'c:/a.id');
rewrite(tmfl,1);
_id:=getcurrentprocessid();
blockwrite(tmfl,_id,sizeof(dword));
closefile(tmfl);
end;

Procedure TForm1.Button1Click;{给B程序发送请求关闭A程序的信息}
Begin
sendmessage(strtoint(paramstr(1)),wm_close,0,0);
End;
 
我试试,先谢谢您
 
后退
顶部