【发布时间】:2012-05-15 16:28:25
【问题描述】:
我正在尝试使用 ShellExecute 从 Delphi XE2 中的另一个应用程序“one.exe”执行 EXE“two.exe”。
ShellExecute(0, 'open', 'two.exe', nil, nil, SW_NORMAL);
它运行良好,但每当我从任务管理器的进程选项卡中使用“结束进程树”选项终止应用程序“one.exe”(父应用程序)时,应用程序“two.exe”也会终止。
如何防止我的 ShellExecuted 应用程序像这样被终止?
【问题讨论】:
-
我无法重现您的解释...就像您解释的那样:
ShellExecute(Application.Handle, 'open', PWideChar(ExtractFileName(Application.ExeName)), nil, PWideChar(ExtractFilePath(Application.ExeName)), SW_SHOWNORMAL);不要杀死其他实例...ShellExecute(0, 'open', PWideChar(ExtractFileName(Application.ExeName)), nil, PWideChar(ExtractFilePath(Application.ExeName)), SW_SHOWNORMAL); -
您确定两个应用程序之间没有其他交互会导致第二个应用程序在第一个应用程序关闭时关闭吗?
-
我可以重现它。完全如问题中所述。在 Process Explorer 中有一个流程视图,可以清楚地显示组层次结构。
-
@DavidHeffernan:我同意 Process Explorer.. 但是对于常规的 TaskManager,当我结束进程树时,如果我的第一个参数是 0,它不会杀死我的子应用程序......跨度>
-
+1。就像一个注释:除非您确定文件扩展名的文件关联具有指定的特定动词,否则不要使用一个。 (例如,HKCR 中的 .exe 没有
open动词,它有run。你不应该使用open。)当你想要默认操作发生时,只需使用nil,并且让 Windows 弄清楚该怎么做;它会自动打开Word文档(.doc)文件,运行可执行文件等
标签: delphi delphi-xe2