求教一个进程的问题 ( 积分: 10 )

  • 主题发起人 主题发起人 5411
  • 开始时间 开始时间
5

5411

Unregistered / Unconfirmed
GUEST, unregistred user!
下面这段的意思是查找一个进程,并杀死
FoundAProc := Process32First(SsHandle, lppe);
while FoundAProcdo
//查找进程,并杀死
begin
ss2:= lppe.szExeFile;
ss2:= extractfilename(ss2);
if ss= ss2 then
begin
Found:=OpenProcess(PROCESS_TERMINATE,False,lppe.th32ProcessID);
TerminateProcess(Found,$FFFFFFFF);
Found := OpenProcess(PROCESS_QUERY_INFORMATION,False,lppe.th32ProcessID);
GetExitCodeProcess(Found,FAppState);
end;
FoundAProc := Process32Next(SsHandle ,lppe);
end;
之后是拷贝上面杀死的那个文件
copyfile(pchar(M_finename+ 'tmp/'+ ss),pchar(M_finename+ ss),false)

但是运行总不成功,原因是拷贝的时候,上面进程还未完全杀死,如果在拷贝前能暂停一下,那是没有问题的。这个问题怎么解决。
 
下面这段的意思是查找一个进程,并杀死
FoundAProc := Process32First(SsHandle, lppe);
while FoundAProcdo
//查找进程,并杀死
begin
ss2:= lppe.szExeFile;
ss2:= extractfilename(ss2);
if ss= ss2 then
begin
Found:=OpenProcess(PROCESS_TERMINATE,False,lppe.th32ProcessID);
TerminateProcess(Found,$FFFFFFFF);
Found := OpenProcess(PROCESS_QUERY_INFORMATION,False,lppe.th32ProcessID);
GetExitCodeProcess(Found,FAppState);
end;
FoundAProc := Process32Next(SsHandle ,lppe);
end;
之后是拷贝上面杀死的那个文件
copyfile(pchar(M_finename+ 'tmp/'+ ss),pchar(M_finename+ ss),false)

但是运行总不成功,原因是拷贝的时候,上面进程还未完全杀死,如果在拷贝前能暂停一下,那是没有问题的。这个问题怎么解决。
 
//根据进程名杀死进程
//没有测试,你看看行不行
//调用:if KillProc('test.exe') then
copyfile(pchar(M_finename+ 'tmp/'+ ss),pchar(M_finename+ ss),false)
function KillProc(ProcName: string) :Boolean;
var
Pn: TProcesseNtry32;
sHandle: THandle;
H: Hwnd;
Found: Boolean;
ex: string;
begin
Result := false;
sHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
Found := Process32First(sHandle, Pn);
//ShowMessage(pn.szExeFile);
While Founddo
begin
ex := Pn.szExeFile;
//ShowMessage(Ex);
if AnsiLowerCase(ex) = AnsiLowerCase(ProcName) then
begin
H := OpenProcess(PROCESS_ALL_ACCESS, True, Pn.th32ProcessID);
TerminateProcess(H, 0);
Result := true;
Break;
end;
Found := Process32Next(sHandle, Pn);
end;
end;
 
跟我上面的效里一样样啊。道理也是一样啊。
 
后退
顶部