无法启动C ++ Windows服务

时间:2015-07-21 11:40:15

标签: c++ windows visual-studio service msdn

我尝试使用this code sample on MSDN在C ++中创建Windows服务。我在Visual Studio 2013中以管理员身份打开了解决方案文件。构建成功。然后,我根据代码示例提供的说明,以管理员身份打开的命令提示符安装了该服务。该服务现在显示在我系统的“服务”工具中。但是,当我尝试启动该服务时,我得到error 5: Access is denied

sc qc CppWindowsService的输出如下:

    [SC] QueryServiceConfig SUCCESS

    SERVICE_NAME: CppWindowsService
    TYPE               : 10  WIN32_OWN_PROCESS
    START_TYPE         : 3   DEMAND_START
    ERROR_CONTROL      : 1   NORMAL
    BINARY_PATH_NAME   : C:\Users\Aaa\Documents\CppWindowsService\C++\Debug\CppWindowsService.exe
    LOAD_ORDER_GROUP   :
    TAG                : 0
    DISPLAY_NAME       : CppWindowsService Sample Service
    DEPENDENCIES       :
    SERVICE_START_NAME : NT AUTHORITY\LocalService

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 0 :(得分:1)

由于可执行文件位于您的个人文档文件夹中,因此本地服务帐户无权访问它。

最简单的解决方案是更改Debug文件夹的权限,以便在启用继承的情况下提供SERVICE读取和执行访问权限。从命令行:

icacls Debug /grant SERVICE:(OI)(CI)(RX)

(由于Windows不在默认配置中进行遍历检查,因此您无需更改父文件夹的权限。)

另一种选择是将可执行文件复制到公共位置(例如Program Files内部)并在那里安装,但是每次重新编译时都必须记住手动更新副本。

编辑:根据您的建议,另一个选项是将帐户更改为本地系统,以便该服务以管理权限运行。最佳实践是以最少的权限运行服务,但在这个阶段它并不重要。

答案 1 :(得分:0)

@Pumkko提供的评论有助于解决问题......服务帐户被指定为LocalService(#define SERVICE_ACCOUNT L"NTAUTHORITY\\LocalService")。来自here

  

本地服务帐户没有输出.exe的权限   文件,这就是错误发生的原因。

我将帐户类型更改为LocalSystem(#define SERVICE_ACCOUNT L"LocalSystem"),现在可以启动我的服务了。

Thankyou @Pumkko和@Harry Johnston。