我通常以这样一种方式创建我的应用程序,它可以通过命令行开关作为服务或 GUI 启动/GUI
。
当应用程序使用 GUI 运行时,我会“手动”实例化并启动服务类。
好处:
示例 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.
哦,要记住的另一件事是服务通常以“系统”用户身份运行,这意味着您将拥有不同的权限和设置(例如驱动器号映射)。