一个关于进程内进程被关闭后自动重启的问题[同名进程处理问题](50)

  • 主题发起人 主题发起人 tungh
  • 开始时间 开始时间
T

tungh

Unregistered / Unconfirmed
GUEST, unregistred user!
D:/111与D:/222里都有一个A.EXE程序 进程名也都为A.EXE 同时我的监测进程关闭的程序B也都在里面。 问题是 我的B程序想要实时监测进程 A.EXE关闭后自动重启。A程序一启动我就获取PID。这样第2目录下的监测程序启动第2个A.EXE的时候我的程序获取的PID却是第一个A.EXE的 有什么其他办法能够保证正确根据被关的进程而启动正确的EXE吗?也就是说同名的2个进程,如何能够知道关闭的是哪一个并且把关闭的重新启动。
 
你可以记录进程所在文件夹路径,这样就不会重复了。列举系统里的进程并且记录进程的路径。
 
有例子吗?
 
获得进程清单,含路径:uses TLHelp32;procedure TForm1.Button1Click(Sender: TObject);var pe:PROCESSENTRY32; me:MODULEENTRY32; hp,hm:Thandle; b,b1:boolean; old:cardinal;begin old:=0; hp:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0); pe.dwSize:=SizeOf(pe); b:=Process32First(hp,pe); while b do begin hm:=CreateToolHelp32SnapShot(TH32CS_SNAPModule,pe.th32ProcessID); me.dwSize:=sizeof(ModuleEntry32); if Module32First(hm,me) then begin b1:=Module32First(hm,me); while b1 do begin if old<>pe.th32ProcessID then memo1.Lines.Add(me.szExePath); b1:=Module32Next(hm,me); old:=pe.th32ProcessID; end; end; b:=Process32Next(hp,pe); end;end;
 
给你一个提示,用createFileMapping来创建共享内存步骤如下:1.每运行一个进程时尝试打开这一内存openfilemapping2.如果返回为nil,则表明没有相同的进程在运行,那么createFilemapping,写入这一内存信息,如(当前进程ID,实例句柄,application.handle等)如果返回不为nil,则表明有一相同的进程在运行,那么读出这一内存里所包含的信息(如当前进程ID,实例句柄,application.handle等)
 
注册类啊,或者建立隐藏窗口,找到对应的就是某个正常的A.exe
 
未解决,继续关注。。。[:D]
 
后退
顶部