大佬教程收集整理的这篇文章主要介绍了delphi – 如何创建一个Child进程,具体取决于它的父进程?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
但是当我关闭或杀死(通过Process-Explorer)main.exe时,子进程仍然处于活动状态.
如何优雅地处理,当main.exe终止child.exe终止时?
uses JobsApi; //... var jLimit: TJobObjectExtendedLimiTinformation; hJob := CreateJobObject(nil,PChar('JobName'); if hJob <> 0 then begin jLimit.basicLimiTinformation.LimitFlags := JOB_OBjeCT_LIMIT_KILL_ON_JOB_CLOSE; SeTinformationJobObject(hJob,JobObjectExtendedLimiTinformation,@jLimit,SizeOf(TJobObjectExtendedLimiTinformation)); end;
然后,您需要使用CreateProcess函数执行另一个进程,其中dwCreationFlags必须设置为CREATE_BREAKAWAY_FROM_JOB.如果此函数成功调用AssignProcessToJobObject.
function ExecuteProcess(const EXE : String; const AParams: String = ''; AJob: Boolean = TruE): THandle; var SI : TStartupInfo; PI : TProcessInformation; AFlag: Cardinal; begin Result := INVALID_HANDLE_VALUE; FillChar(SI,SizeOf(SI),0); SI.cb := SizeOf(SI); if AJob then AFlag := CREATE_BREAKAWAY_FROM_JOB else AFlag := 0; if CreateProcess( nil,PChar(EXE + ' ' + AParams),nil,false,AFlag,SI,PI ) then begin { close thread handle } CloseHandle(PI.hThread); Result := PI.hProcess; end; end; //... hApp := ExecuteProcess('PathToExecutable'); if hApp <> INVALID_HANDLE_VALUE then begin AssignProcessToJobObject(hJob,hApp); end;
完成所有这些操作后,即使主可执行文件已被终止,所有子进程也将自动终止.你可以得到JobsApi单元here.注意:我没有用Delphi 7测试它.
编辑:Here你可以下载工作演示项目.
以上是大佬教程为你收集整理的delphi – 如何创建一个Child进程,具体取决于它的父进程?全部内容,希望文章能够帮你解决delphi – 如何创建一个Child进程,具体取决于它的父进程?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。