关闭进程的问题。 (200分)

  • 主题发起人 主题发起人 gxlzx
  • 开始时间 开始时间
G

gxlzx

Unregistered / Unconfirmed
GUEST, unregistred user!
&nbsp; &nbsp;我打开一个拨号网络出现"连接到"窗口时,按Ctrl+Alt+Del到关闭程序窗口,选择Rnaapp点击"结束任务”后,<br>拨号程序退出。再重新打开拨号程序一切正常。<br>&nbsp; &nbsp; 而我打开拨号程序出现“连接到”窗口后,用TerminateProcess结束Rnaapp进程成功,但是拨号程序没有退出,<br>只能单击“取消”按钮退出拨号程序,当我重新启动拨号程序时就出错了再也进不去拨号了,只能重启系统。<br>我不知道为什么会这样,如何解决这个问题?
 
大概有死循环
 
可能有看不见的进程没有结束.
 
你们都试过吗?如何解决?
 
这可能就是TerminateProcess的副作用吧<br>只是结束了Rnaapp的进程本身,它调用的DLL还是在内存中<br>也就是说没有释放对端口的占用。
 
你可以用PostMessage(rnaappHandle, WM_CLOSE, 0, 0)<br>而不要用TerminateProcess。
 
可以用 RAS 的函数管理 拨号,为什么要杀进程哪?<br>function RasHangup(RasConn: THRASCONN): DWORD; stdcall;<br>function RasHangUp; external 'RASAPI32.DLL' name 'RasHangUpA';<br>
 
杀RNAAPP进程是为了在程序中启动拨号网络服务器,必须要先清掉内存中的RNAAPP,然后再<br>在注册表写入相应的值,最后再运行RNAAPP,这样才能启动拨号网络服务器。
 
ExitProcess怎么用?
 
我用ExitProcess怎么是退出程序自身而不是退出我所要的进程?
 
还是用ExitProcess强制退出进程!<br>ExitProcess(程序实例);<br><br>另试试!<br>uses ShellAPI;<br>PostMessage(rnaappHandle, WM_QUIT, 0, 0);<br>如果不行,你先用FreeLibrary释放端口占用的内存及CloseHandle关闭占用的端口句柄,再运行上面的代码。<br>如果还不行,你干脆做一个ProcessList然后KILL,避免还有进程没有结束。<br>
 
你用了几个进程?都是干什么的?[:)]
 
只要退出Rnaapp一个进程。打开拨号网络的一个连接,然后再关掉,Rnaapp就留在内存没有<br>退出来,用下面这段程序可以去掉Rnaapp,但重新打开拨号网络的连接就出错。不知下面这<br>段程序是否正确?我是从本站抄来的,请各位高手指点:<br><br>type<br>&nbsp; TProcessInfo=Record<br>&nbsp; &nbsp; ExeFile:String;<br>&nbsp; &nbsp; ProcessID:Dword;<br>end;<br>pProcessInfo=^TProcessInfo;<br><br>implementation<br><br>{$R *.DFM}<br><br>procedure TForm1.Button1Click(Sender: TObject);<br>var<br>&nbsp; p:pProcessInfo;<br>&nbsp; ContinueLoop:Bool;<br>&nbsp; FSnapshotHandle,hProcess:THandle;<br>&nbsp; FProcessEntry32:TProcessEntry32;<br>&nbsp; n:integer;<br>begin<br>&nbsp; ListBox1.Items.Clear;<br>&nbsp; n:=1;<br>&nbsp; New(p);<br>&nbsp; FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);<br>&nbsp; FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);<br>&nbsp; ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);<br>&nbsp; while integer(ContinueLoop)&lt;&gt;0 do<br>&nbsp; begin<br>&nbsp; &nbsp; p.ExeFile:=FProcessEntry32.sZExeFile;<br>&nbsp; &nbsp; ListBox1.Items.Add(inttostr(n)+':'+inttostr(FProcessEntry32.th32ProcessID)+'*'+p.ExeFile);<br>&nbsp; &nbsp; inc(n);<br>&nbsp; &nbsp; if p.ExeFile='C:/WINDOWS/SYSTEM/RNAAPP.EXE' then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; p.ProcessID:=FProcessEntry32.th32ProcessID;<br>&nbsp; &nbsp; &nbsp; hprocess:=openprocess(process_all_access,True,p.ProcessID);<br>&nbsp; &nbsp; &nbsp; TerminateProcess(hprocess,0);<br>&nbsp; &nbsp; end;<br>&nbsp; &nbsp; Continueloop:=process32next(fsnapshothandle,fprocessentry32);<br>&nbsp; end;<br>end;
 
下面是我在一个程序中杀进程的过程:<br>可下载文件 http://oopsware.home.chinaren.com/download/TaskMgr08.zip<br>是一个Win9x下的任务管理器<br>procedure TfrmView.Button1Click(Sender: TObject);<br>var<br>&nbsp; i, a: DWORD;<br>&nbsp; s: string;<br>&nbsp; h: THandle;<br>begin { stop process }<br>&nbsp; if Assigned(ListView2.Selected) then begin<br>&nbsp; &nbsp; s:=ListView2.Selected.SubItems[0];<br>&nbsp; &nbsp; if MessageBox(Handle, PChar('确定要结束进程“'+ListView2.Selected.Caption+'”吗?'), '警告', MB_ICONQUESTION+MB_YESNO)&lt;&gt;ID_YES then Exit;<br>&nbsp; &nbsp; i := StrToInt('$'+ListView2.Selected.SubItems[0]);<br>&nbsp; &nbsp; h := OpenProcess(Process_All_Access, True, i);<br>&nbsp; &nbsp; GetExitCodeProcess(h, a);<br>&nbsp; &nbsp; TerminateProcess(h, a);<br>&nbsp; end;<br>end;<br>
 
还是解决不了。怎么办?
 
xiaojun的方法是对的,你为什么不去试试?
 
我看过资料说ExitProcess可以关闭进程包括其调用所有的DLL,但是我试过了没有用,结果<br>是退出程序本身,而没有终止进程,是不是我的用法不对?ExitProcess(uExitCode)中的<br>uExitCode是从哪里得来的?小弟刚刚接触到这类问题,请大家帮帮忙。
 
ExitProcess是退出自身啊<br>有说退出别的进程吗?连进程ID都没传入,怎么结束别的进程?<br><br>JeffreyRichter都来了?我的偶象啊!呵呵
 
你们都试过成功了?我真的解决不了,能把例子给我吗?<br>我想把这个问题再加100分不知怎么加。
 
我用的是winme,使用上面的操作后,要么蓝屏死机,要么重启,其死我了
 
后退
顶部