gpt4 book ai didi

delphi - Windows 服务应用程序中的 Application.ProcessMessages、Application.Handle 和 Application.Termulated 等价于什么?

转载 作者:行者123 更新时间:2023-12-03 15:44:05 30 4
gpt4 key购买 nike

我是编写 Windows 服务应用程序的新手,并且遇到了问题。

我用 Delphi 编写了一个普通的 Windows 应用程序来检查和调试代码的主要部分,现在必须将其转换为 NT 服务。

我的代码必须启动一个 Windows 应用程序,我使用以下代码执行此操作。

function Run_Program : boolean;
var SEInfo : TShellExecuteInfo;
ExitCode : DWORD;
begin
Result := false;
FillChar(SEInfo, SizeOf(SEInfo),0);
SEInfo.cbSize :=SizeOf(TShellExecuteInfo);
With SEInfo do
begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := **Application.Handle**;
lpFile := PChar(Exe_Prog);
lpParameters := PChar(Exe_Param);
nShow := SW_SHOWNORMAL;
end;
If ShellExecuteEx(@SEInfo) then
begin
repeat
Application.ProcessMessages;
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) OR Application.Terminated OR NOT q1.fieldbyName('Delay').AsBoolean;
If ExitCode <> STILL_ACTIVE then Record_Event(Exe_Prog + ' completed ') else
Record_Event(Exe_Prog + ' activated ');
Result := true;
end
else Record_Event('Error Starting '+ Exe_Prog+ ' ');
end;

当将其放入服务应用程序时,编译器会失败并出现 3 个错误:未声明的标识符..1) handle 2) 处理消息和3) 终止。

我的问题是..是否有可以在服务应用程序中使用的等效过程,或者我应该在服务应用程序中以不同的方式处理该问题?

如有任何帮助,我们将不胜感激

最佳答案

不要使用 ShellExecute() 启动 .exe 文件。这对于服务来说尤其重要,因为服务本来就不在 Shell 内运行。为此,请使用 CreateProcess()(在 Vista 及更高版本上,请改用 CreateProcesAsUser())。

使用ServiceThread.ProcessRequests()和ServiceThread.Termminate而不是Application.ProcessMessages()和Application.Termminate。

关于delphi - Windows 服务应用程序中的 Application.ProcessMessages、Application.Handle 和 Application.Termulated 等价于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2508321/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com