如何将dll作为服务运行?

bip*_*nea 3 c c++ dll service winapi

我知道如何编写 dll 以及如何编写服务以及如何使用 运行 dll rundll32,但现在我想编写一个在 Windows 中作为服务安装的 dll

我不知道这是否可能,或者应该导出 dll 中的哪个函数?

如何安装和运行 dll 作为服务?

Rem*_*eau 5

有几种不同的方法可以将 DLL 作为服务运行。您可以:

  1. 编写您自己的 .exe 服务并让它根据需要加载您的 DLL。这是推荐的方法。

  2. 使用 Microsoft 的 SVCHOST.EXE 来托管您的 DLL。让您的 DLL 导出一个ServiceMain()函数,ServiceDLL向您的服务的注册表项添加一个值以指向您的 DLL,将您的服务名称添加到 SVCHOST 的注册表项中的一个新组,然后设置svchost -k <GroupName>为您的服务的可执行文件。有关更多详细信息,请参阅这些文章:

    Svchost.exe 的描述

    SVCHOST.EXE 故障排除入门

    使用 SVCHOST.EXE 的技巧

    服务主机

    但是请注意,MSDN 的服务程序文档警告不要使用这种方法:

    使用 SERVICE_WIN32_SHARE_PROCESS 类型创建的服务程序包含多个服务的代码,使它们能够共享代码。执行此操作的服务程序的一个示例是通用服务宿主进程 Svchost.exe,它承载内部 Windows 服务。请注意,Svchost.exe 保留供操作系统使用,不应由非 Windows 服务使用。相反,开发人员应该实现他们自己的服务托管程序。

  3. 将您的服务编写为导出函数的内核模式驱动程序DriverEntry(),并ServiceDLL在服务的注册表项中添加一个指向 DLL 文件的值。有关更多详细信息,请参阅这篇文章:

    驱动程序开发第 1 部分:驱动程序简介

    我不会推荐这种方法,除非您正在设计自己的硬件。