如何防止"结束进程树"终止我已启动的程序?

jim*_*web 13 delphi delphi-xe2

我试图使用ShellExecute从Delphi XE2中的另一个应用程序'one.exe'执行EXE'two.exe'.

ShellExecute(0, 'open', 'two.exe', nil, nil, SW_NORMAL);
Run Code Online (Sandbox Code Playgroud)

它工作正常,但每当我从任务管理器的进程选项卡终止应用程序'one.exe'(父应用程序)时,使用"结束进程树"选项,应用程序'two.exe'也会被终止.

如何阻止我的ShellExecuted应用程序像这样终止?

Whi*_*ler 11

好的,不是很好的解决方案......但是测试成功; o)

ShellExecute(0, 'open', 'cmd', 
  PChar('/C  start "" "' + Application.ExeName + '"'), nil, SW_HIDE);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

第一个是手动启动...他的孩子定期进行shellexecute调用...最后一个,使用shellexecute + cmd技巧...

/ C解释

  • @Whiler我在代码中添加了一些内容,以便它可以处理名称中包含空格的程序.顺便说一下+1. (6认同)
  • 理解..*标题* (2认同)

Dav*_*nan 8

我认为你需要创建一个中间过程,反过来产生two.exe.然后,您需要立即终止中间过程,此时原始过程与之间的关系将two.exe被破坏.

  • 在没有结果的一些搜索之后,我同意,因为我认为不可能更新可能由Process Explorer使用的[th32ParentProcessID](http://stackoverflow.com/a/1857762/596852)... (2认同)