2013-05-09 63 views
1

我試圖創建一個運行可執行文件的服務,.exe。問題是服務沒有啓動.exe,每次我重新啓動。它缺乏一致性。但是,當我手動將啓動類型設置爲自動(延遲啓動)時,它可以很好地工作。我怎樣才能通過C++設置這個啓動類型爲自動(延遲啓動)?C++中服務的自動延遲啓動

這是我使用自動啓動代碼:

我應該如何改變這種「SERVICE_AUTO_START」爲自動(延時啓動)?

SC_HANDLE schService = CreateService 
(
    schSCManager,     /* SCManager database  */ 
    pName,       /* Name of service   */ 
    pName,       /* Service name to display */ 
    SERVICE_ALL_ACCESS,    /* Desired access   */ 
    SERVICE_WIN32_OWN_PROCESS| 
     SERVICE_INTERACTIVE_PROCESS , /* Service type   */ 
    SERVICE_AUTO_START,    /* Start type    */ 
    SERVICE_ERROR_NORMAL,   /* Error control type  */ 
    pPath,       /* Service's binary  */ 
    NULL,       /* No load ordering group */ 
    NULL,       /* No tag identifier  */ 
    NULL,       /* No dependencies   */ 
    NULL,       /* LocalSystem account  */ 
    NULL 
); 

回答

0

您應該使用Windows Installer 5.0及更高版本中提供的MsiServiceConfig Table

這意味着該功能僅在Windows 7/8和Server 2008R2/2012中可用。這符合你的故事嗎?如果是這樣,請繼續閱讀。否則,替代方案可能是在MSI中創建註冊表值(DelayedAutoStart DWORD = 1)。

你沒有提到你用來製作你的MSI的創作工具。如果該工具沒有公開這個底層功能,那麼您應該將工具切換到一個工具。自定義操作是標準操作的一個很差的替代品。

+0

AM使用使用Visual Studio安裝和部署 – user1465461 2013-05-15 06:31:29

2

ChangeServiceConfig2函數可以做到這一點。

BOOL WINAPI ChangeServiceConfig2(
    __in   SC_HANDLE hService, 
    __in   DWORD dwInfoLevel, 
    __in   LPVOID lpInfo 
); 

設置dwInfoLevelSERVICE_CONFIG_DELAYED_AUTO_START_INFO修改啓動類型設置爲延遲自動啓動。

請注意,此值在Windows Server 2003和Windows XP上不受支持。 此外,這隻潛水的描述,而不是延遲服務啓動