完整服务示例
本节中的主题构成了完整的服务示例:
- Sample.mc (包含错误消息)
- Svc.cpp (包含服务代码)
- SvcConfig.cpp (包含服务配置代码)
- SvcControl.cpp (包含服务控制代码)
生成服务
以下过程介绍如何生成服务并注册事件消息 DLL。
生成服务并注册事件消息 DLL
使用以下步骤从 Sample.mc 生成消息 DLL:
- mc -U sample.mc
- rc -r sample.rc
- link -dll -noentry -out:sample.dll sample.res
分别从 Svc.cpp、SvcConfig.cpp 和 SvcControl.cpp 生成Svc.exe、SvcConfig.exe和SvcControl.exe。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName创建注册表项,并将以下注册表值添加到此注册表项。
值 类型 说明 EventMessageFile = dll_path REG_SZ 仅限资源的 DLL 的路径,其中包含服务可以写入事件日志的字符串。 TypesSupported = 0x00000007 REG_DWORD 一个位掩码,指定支持的事件类型。 值0x000000007表示支持所有类型。
正在测试服务
以下过程介绍如何测试服务。
测试服务
在“控制面板”中,启动“服务”应用程序。 (在以下步骤中,在执行修改 Services 应用程序中信息的命令后,使用 F5 键刷新显示)
运行以下命令以安装服务:
svc 安装
如果操作成功或出现错误消息,服务会将“已成功安装服务”写入控制台。
如果服务安装成功,服务将显示在 服务 应用程序中。 请注意, “名称 ”设置为“SvcName”, “说明 ”和 “状态” 为空, “启动类型 ”设置为“手动”。
运行以下命令以启动服务:
svccontrol start SvcName
如果操作成功,服务控制程序会写入“服务启动挂起...”。然后“服务已成功启动”到控制台。 否则,程序会将错误消息写入控制台。
如果服务成功启动, 则状态 设置为“已启动”。 ServiceMain 函数中的代码由 SCM 执行。 如果发生错误,服务会将错误消息写入事件日志。 此消息包括失败的函数的名称和失败时返回的错误代码。
运行以下命令以更新服务说明:
svcconfig 描述 SvcName
如果操作成功或出现错误消息,服务配置程序会将“服务说明已成功更新”写入控制台。
如果更新成功, 说明 将设置为“这是测试说明”。
运行以下命令以查询服务配置:
svcconfig 查询 SvcName
如果操作成功或出现错误消息,服务配置程序会将服务配置信息写入控制台。
运行以下命令以更改服务 DACL:
svccontrol dacl SvcName
如果操作成功或出现错误消息,服务配置程序会将“服务 DACL 已成功更新”写入控制台。
运行以下命令以禁用该服务:
svcconfig 禁用 SvcName
如果操作成功或出现错误消息,服务配置程序会将“已成功禁用服务”写入控制台。
如果服务已成功禁用, 则启动类型 设置为“已禁用”。
运行以下命令以启用该服务:
svcconfig 启用 SvcName
如果操作成功或出现错误消息,服务配置程序会将“已成功启用服务”写入控制台。
如果服务成功启用, 则启动类型 设置为“手动”。
运行以下命令以停止服务:
svccontrol stop SvcName
如果操作成功,服务控制程序将写入“服务停止挂起...”。然后“服务已成功停止”到控制台。 否则,程序会将错误消息写入控制台。
如果服务成功停止, 则“状态” 为空。
如果服务无法停止,服务控制程序会将错误消息写入事件日志,其中包括失败的函数的名称和失败时返回的错误代码。
运行以下命令以删除服务:
svcconfig 删除 SvcName
如果操作成功或出现错误消息,服务配置程序会将“已成功删除服务”写入控制台。
如果服务已成功删除,则服务将不再显示在 服务 应用程序中。 (请注意,如果尝试删除未停止的服务,操作会成功,但 启动类型 设置为“已禁用”,并且服务条目将在系统重启或使用任务管理器终止服务时删除。)
相关主题