【发布时间】:2014-01-02 03:14:34
【问题描述】:
我想在没有 gui 窗口的情况下执行一个带参数的应用程序,然后在 2 分钟内优雅地自动结束进程。
这是我使用代码的方式:
procedure ExecNoWait(Filename: string);
var
bchExec: array[0..1024] of char;
pchEXEC: Pchar;
si: TStartupInfo;
pi: TProcessInformation;
begin
pchExec := @bchExec;
StrPCopy(pchExec,Filename);
FillChar(si,sizeof(si),0);
FillChar(pi,sizeof(pi),0);
si.dwFlags:=STARTF_USESHOWWINDOW;
si.wShowWindow:=SW_HIDE;
si.cb := sizeof(si);
CreateProcess(Nil,pchExec,Nil,Nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, Nil,Nil,si,pi);
end;
ExecNoWait(TheExeFilePath + '\ThisExe.exe -runnow'); //NON-GUI App
但我想在 2 分钟内优雅地自动结束或自动关闭 ThisExe.exe。
我们如何解决这个问题?
谢谢
【问题讨论】:
-
没有进程的优雅终止。终止进程总是粗鲁的,而且带有极大的偏见。
-
您最好的选择可能是将
WM_CLOSE或WM_QUIT发布到该进程并希望它正确处理这些消息。检查这个:stackoverflow.com/questions/2055753/… -
@MarkoPaunovic:但是,正在运行的应用程序没有 GUI,因此没有可以向其发布消息的窗口。
-
@RemyLebeau 取决于。 CMD.EXE 报告关闭窗口,每个控制台应用程序都应响应 Windows 关机/重启警报。因此,归结为受控应用程序是错误还是正确的问题
-
@XenKid 优雅终止涉及合作。其他进程为优雅终止提供什么机制?
标签: delphi winapi createprocess