2015-07-21 164 views
2

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

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 

为什么会发生这种情况,我怎么能解决这个问题?

+0

将一个调试器附加到服务并找出哪些操作正在生成异常? –

+0

@MartinJames:我手动给了开始选项..如何附加调试器? – Jackzz

+0

在visual studio下,工具 - >附加到进程。或ctrl + alt + p。如果该服务没有出现在列表中,点击显示所有用户的进程 – Pumkko

回答

0

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

本地服务帐户没有权限来输出的.exe文件 ,这就是为什么错误是存在的。

我将帐户类型更改为LocalSystem(​​),现在我的服务可以启动。

Thankyou @Pumkko和@Harry Johnston。

1

因为可执行文件在您的个人文档文件夹中,所以本地服务帐户无权访问它。

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

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

(因为Windows无法做横向的默认配置检查,您不需要更改权限的父文件夹)

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

编辑:如您所示,另一种选择是将帐户更改为本地系统,以便服务以管理权限运行。最佳做法是以最小权限运行服务,但在此阶段,这并不重要。

+0

是的..问题出在LocalService帐户上。将帐户更改为本地系统帮助了我..感谢您提供此信息.. – Jackzz