【问题标题】:Unable to start a C++ Windows Service无法启动 C++ Windows 服务
【发布时间】:2015-10-10 20:21:03
【问题描述】:

我尝试使用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

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

【问题讨论】:

  • 将调试器附加到服务并找出产生异常的操作是什么?
  • @MartinJames:我手动给了 Start 选项。如何附加调试器?
  • 在visual studio下,工具->附加到进程。或 ctrl+alt+p。如果服务未出现在列表中,请单击显示所有用户的进程
  • @Pumkko:它没有显示我的服务...看来该服务应该正在运行..我无法启动该服务..
  • @Jackz 也许这可以帮助你? stackoverflow.com/a/574430/5076707

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


【解决方案1】:

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

最简单的解决方法是更改​​ Debug 文件夹的权限,以授予 SERVICE 读取和执行权限,并启用继承。从命令行:

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

(由于Windows在默认配置中不做遍历检查,所以不需要更改父文件夹的权限。)

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

编辑: 正如您所建议的,另一个选项是将帐户更改为本地系统,以便服务以管理权限运行。最佳做法是以必要的最低权限运行服务,但在这个阶段这并不重要。

【讨论】:

  • 是的.. 问题出在 LocalService 帐户上.. 将帐户更改为本地系统对我有帮助.. 感谢您提供此信息..
【解决方案2】:

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

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

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

谢谢@Pumkko 和@Harry Johnston。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多