delphi - Delphi服务启动方法
问题描述
我有一个用 Delphi XE5 编写的 Windows 服务应用程序,StartType
设置为stAuto
. 该服务有没有办法检测它是在启动时自动启动还是手动启动?我有一个单独的管理器程序来执行安装、启动、停止和卸载。服务需要知道启动是否来自经理。我可以让经理在手动启动之前创建一个注册表条目并将其用作我的测试,但想知道是否有更清洁的解决方案。
解决方案
我有一个用 Delphi XE5 编写的 Windows 服务应用程序,StartType 设置为 stAuto。该服务有没有办法检测它是否在启动时自动启动而不是手动启动?
不是真的,不。开始就是开始,无论何时发出。然而...
我有一个单独的管理器程序来执行安装、启动、停止和卸载。服务需要知道启动是否来自经理。
管理器在调用时可以包含一个额外的参数StartService()
。然后,服务可以Param[]
在启动时枚举其属性,查找该参数。
我可以让经理在手动启动之前创建一个注册表项并将其用作我的测试,但想知道是否有更清洁的解决方案。
是的,有 - 使用lpServiceArgVectors
参数StartService()
:
dwNumServiceArgs
lpServiceArgVectors
数组中的字符串数。如果lpServiceArgVectors
为 NULL,则此参数可以为零。
lpServiceArgVectors
要作为参数传递给
ServiceMain
服务函数的以 null 结尾的字符串。如果没有参数,则此参数可以为 NULL。否则,第一个参数 (lpServiceArgVectors[0]
) 是服务的名称,后跟任何其他参数 (lpServiceArgVectors[1]
throughlpServiceArgVectors[dwNumServiceArgs-1]
)。
推荐阅读
- javascript - 使用 JavaScript 更改具有类名的 div 的 CSS
- objective-c - 选择相似的像素,围绕像素绘制贝塞尔路径并填充颜色 - iOS
- linux - 诊断导致系统崩溃的应用程序
- node.js - Vue CLI & Webpack:无法让 webpack-dev-server 运行
- python - 如何在不使用 min 和 max 函数的情况下找到 min 和 max
- android - Android 上的 Mifare Ultralight C 身份验证
- 3d - DirectX11 中是否可以自定义抗锯齿?
- c# - 使用带有倒 Y 轴的 ScaleTransform 进行缩放
- c++ - 在 Visual Studio 中为远程环境使用自定义构建命令
- haskell - Haskell错误加载模块与mysql