2015-07-21 161 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