delphi - Delphi:如何创建一个独立于主应用程序的分离进程?
问题描述
从我的应用程序中,我需要创建一个独立于主应用程序的分离进程。这意味着,如果用户关闭主应用程序,新进程仍然处于活动状态。我不需要等待新进程的输出,然后我可以创建一个新进程而无需等待响应。
目的是创建一个单独的管道来完成长时间操作,而无需等待结束,并且如果主应用程序终止,则无需终止。
基本上,这段代码看到的作品。
uses ShellApi;
begin
ShellExecute(0, 'open', PChar('MyConsole.EXE'), PChar('MyParam'), '', SW_HIDE);
end;
但是,我有疑问,该进程是从从主应用程序加载的 DLL 中生成的,并且ShellExecute
需要一个HWND
,从 DLL 中生成一个新进程是否合适ShellExecute
?
谢谢,抱歉英语不好!
解决方案
我想分享解决方案CreateProcess
(感谢@DavidHeffernan)。
ShellExecute
不适合生成新进程,因为该进程是从主应用程序加载的 DLL 生成的,并且ShellExecute
需要HWND
.
function RunProcess(ACommand: string): boolean;
var
StartupInfo: TStartupInfo;
ProcessInfo: TProcessInformation;
begin
UniqueString(ACommand); // CreateProcess requires writeable string for lpCommandLine arg
FillChar(StartupInfo, SizeOf(StartupInfo), #0);
StartupInfo.cb := SizeOf(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
StartupInfo.wShowWindow := SW_HIDE;
Result := CreateProcess(nil, PChar(ACommand), nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo);
if Result then
begin
CloseHandle(ProcessInfo.hProcess);
CloseHandle(ProcessInfo.hThread);
end;
end;
// ...
begin
if not(RunProcess('MyConsoleApp.exe')) then
raise Exception.Create('RunProcess failed');
end.
推荐阅读
- javascript - 使用脚本后无法获取背景图像以在网页上全屏显示
- python - 使用python将蛋白质序列转换为DNA
- node.js - NodeJS express, how te return a result of a function called with express post
- node.js - 微服务架构任务系统问题
- flutter - Flutter DataTable 选择行
- python - 将文本文件转换为字典python
- python - 将 int 反转为十六进制
- c++ - Io_obj*(istream&) 作为 Stroustrup 中函数的指针
- javascript - 在非 PWA Web 应用中弹出“添加到主屏幕”
- python-3.x - 如何从具有依赖项的python文件创建(.exe)文件以运行pygame?