完整服务示例

本节中的主题构成了完整的服务示例:

生成服务

以下过程介绍如何生成服务并注册事件消息 DLL。

生成服务并注册事件消息 DLL

  1. 使用以下步骤从 Sample.mc 生成消息 DLL:

    1. mc -U sample.mc
    2. rc -r sample.rc
    3. link -dll -noentry -out:sample.dll sample.res
  2. 分别从 Svc.cpp、SvcConfig.cpp 和 SvcControl.cpp 生成Svc.exe、SvcConfig.exe和SvcControl.exe。

  3. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName创建注册表项,并将以下注册表值添加到此注册表项。

    类型 说明
    EventMessageFile = dll_path REG_SZ 仅限资源的 DLL 的路径,其中包含服务可以写入事件日志的字符串。
    TypesSupported = 0x00000007 REG_DWORD 一个位掩码,指定支持的事件类型。 值0x000000007表示支持所有类型。

     

正在测试服务

以下过程介绍如何测试服务。

测试服务

  1. 在“控制面板”中,启动“服务”应用程序。 (在以下步骤中,在执行修改 Services 应用程序中信息的命令后,使用 F5 键刷新显示)

  2. 运行以下命令以安装服务:

    svc 安装

    如果操作成功或出现错误消息,服务会将“已成功安装服务”写入控制台。

    如果服务安装成功,服务将显示在 服务 应用程序中。 请注意, “名称 ”设置为“SvcName”, “说明 ”和 “状态” 为空, “启动类型 ”设置为“手动”。

  3. 运行以下命令以启动服务:

    svccontrol start SvcName

    如果操作成功,服务控制程序会写入“服务启动挂起...”。然后“服务已成功启动”到控制台。 否则,程序会将错误消息写入控制台。

    如果服务成功启动, 则状态 设置为“已启动”。 ServiceMain 函数中的代码由 SCM 执行。 如果发生错误,服务会将错误消息写入事件日志。 此消息包括失败的函数的名称和失败时返回的错误代码。

  4. 运行以下命令以更新服务说明:

    svcconfig 描述 SvcName

    如果操作成功或出现错误消息,服务配置程序会将“服务说明已成功更新”写入控制台。

    如果更新成功, 说明 将设置为“这是测试说明”。

  5. 运行以下命令以查询服务配置:

    svcconfig 查询 SvcName

    如果操作成功或出现错误消息,服务配置程序会将服务配置信息写入控制台。

  6. 运行以下命令以更改服务 DACL:

    svccontrol dacl SvcName

    如果操作成功或出现错误消息,服务配置程序会将“服务 DACL 已成功更新”写入控制台。

  7. 运行以下命令以禁用该服务:

    svcconfig 禁用 SvcName

    如果操作成功或出现错误消息,服务配置程序会将“已成功禁用服务”写入控制台。

    如果服务已成功禁用, 则启动类型 设置为“已禁用”。

  8. 运行以下命令以启用该服务:

    svcconfig 启用 SvcName

    如果操作成功或出现错误消息,服务配置程序会将“已成功启用服务”写入控制台。

    如果服务成功启用, 则启动类型 设置为“手动”。

  9. 运行以下命令以停止服务:

    svccontrol stop SvcName

    如果操作成功,服务控制程序将写入“服务停止挂起...”。然后“服务已成功停止”到控制台。 否则,程序会将错误消息写入控制台。

    如果服务成功停止, 则“状态” 为空。

    如果服务无法停止,服务控制程序会将错误消息写入事件日志,其中包括失败的函数的名称和失败时返回的错误代码。

  10. 运行以下命令以删除服务:

    svcconfig 删除 SvcName

    如果操作成功或出现错误消息,服务配置程序会将“已成功删除服务”写入控制台。

    如果服务已成功删除,则服务将不再显示在 服务 应用程序中。 (请注意,如果尝试删除未停止的服务,操作会成功,但 启动类型 设置为“已禁用”,并且服务条目将在系统重启或使用任务管理器终止服务时删除。)

使用服务