首页 > 解决方案 > Delphi服务启动方法

问题描述

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

标签: delphiservice

解决方案


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

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

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

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

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

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

dwNumServiceArgs

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

lpServiceArgVectors

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


推荐阅读