gpt4 book ai didi

delphi - 将 Delphi 应用程序转换为作为服务运行 - 有必要吗?

转载 作者:行者123 更新时间:2023-12-03 14:39:13 24 4
gpt4 key购买 nike

我有一个delphi应用程序,它记录来自不同位置的数据并将数据写入文件。该应用程序有一个相当广泛的 GUI,可以显示数据、配置选项等。

一名用户请求将该应用更改为可以作为服务运行。他的理由是,该应用程序可以在启动时启动并在没有任何用户登录的情况下运行,并且无论谁登录都可以使用。

我的问题是:是否有任何其他解决方案可以让我安装现有的应用程序,以便在没有用户登录的情况下它仍然可以运行并且仍然可供所有用户使用?

我的直觉是,将应用程序转换为服务运行并非易事。我假设您需要 2 个应用程序 - “ headless ”服务应用程序,以及一个由用户按需运行、可以与服务交互的 GUI(也欢迎在这里发表评论)。

最佳答案

我通常创建应用程序,使其可以通过命令行开关 /GUI 作为服务或 GUI 启动。

当应用程序使用 GUI 运行时,我“手动”实例化并启动服务类。

优点:

  • 它将运行相同的代码,从而使调试服务变得非常容易。您只需放置断点并单步执行代码,而无需“附加”到正在运行的应用程序。

  • 由于有了 GUI,即使在没有调试器的远程服务器上,您也可以通过 ListView 和按钮查看您的服务将要执行的操作并与之交互。必须通过日志和配置与您的服务交互是蹩脚且缓慢的。

示例 dpr,来自一个如下工作的项目:

program xxxx;

uses
SysUtils,
SvcMgr,
.......;

{$R *.res}

begin
GlobalAppId := 1;
MapMatcherController := TMapMatcherController.Create(nil);
try
if FindCmdLineSwitch('GUI',['/','-'],True) then
begin
Forms.Application.Initialize;
Forms.Application.MainFormOnTaskbar := True;
Forms.Application.CreateForm(TfrmMain, frmMain);
Forms.Application.Run;
end
else
begin
SvcMgr.Application.Initialize;
SvcMgr.Application.CreateForm(TsrvMapMatcher2, srvMapMatcher2);
SvcMgr.Application.Run;
end;
finally
MapMatcherController.Free;
end;
end.

哦,另一件事要记住,服务通常以“系统”用户身份运行,这意味着您将拥有不同的权限和设置(例如驱动器号映射)。

关于delphi - 将 Delphi 应用程序转换为作为服务运行 - 有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4102632/

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