Delphi服务启动方法

kbr*_*ggs 2 delphi service

我有一个用 Delphi XE5 编写的 Windows 服务应用程序,StartType设置为stAuto. 有没有办法让服务检测它是在启动时自动启动还是手动启动?我有一个单独的管理器程序来执行安装、启动、停止和卸载。该服务需要知道启动是否来自管理器。我可以让经理在手动启动之前创建一个注册表项并将其用作我的测试,但想知道是否有更干净的解决方案。

Rem*_*eau 5

我有一个用 Delphi XE5 编写的 Windows 服务应用程序,StartType 设置为 stAuto。有没有办法让服务检测它是在启动时自动启动还是手动启动?

不完全是,不。开始就是开始,无论何时发出。然而...

我有一个单独的管理器程序来执行安装、启动、停止和卸载。该服务需要知道启动是否来自管理器。

管理器在调用时可以包含额外的参数StartService()。然后,该服务可以Param[]在启动时枚举其属性,查找该参数。

我可以让经理在手动启动之前创建一个注册表项并将其用作我的测试,但想知道是否有更干净的解决方案。

是的,有 - 使用lpServiceArgVectors以下参数StartService()

dwNumServiceArgs

数组中字符串的数量lpServiceArgVectors。如果lpServiceArgVectors为NULL,则该参数可以为零。

lpServiceArgVectors

以 null 结尾的字符串作为ServiceMain参数传递给服务的函数。如果没有参数,则该参数可以为 NULL。否则,第一个参数 ( lpServiceArgVectors[0]) 是服务的名称,后跟任何其他参数 (lpServiceArgVectors[1]lpServiceArgVectors[dwNumServiceArgs-1])。