完整服务示例

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

生成服务

以下过程介绍如何生成服务并注册事件消息 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

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

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

使用服务