2016-03-06 154 views
0

我的安裝程序中的延遲自動啓動類型服務,在創新安裝使用以下命令創建服務:如何安裝在Windows XP

Filename: {sys}\sc.exe; Check: (IsAdminLoggedOn or IsPowerUserLoggedOn); Parameters: "create Example start= delayed-auto binPath= ""{app}\Example.exe"""; Flags: runhidden 

這條線工作在所有的Windows之外的Windows XP,因爲delayed-auto啓動鍵入在Windows XP中不受支持。
我需要使用delayed-auto啓動類型有兩個原因。

  1. 我的服務需要始終在後臺運行,無需用戶干預,這意味着服務必須在啓動時自動啓動。
  2. 我的服務取決於其他基本的Windows服務,不能沒有它們運行,因此我使用delayed-auto只有在所有基本服務啓動後才啓動。

因此,我可以在Windows XP上創建一個類似於delayed-auto的啓動類型的服務,如果沒有,那麼有什麼選擇?

回答

3

delayed-auto啓動類型不是爲了解決服務之間的依賴關係。如果您所依賴的服務也有delayed-auto啓動類型會怎麼樣?啓動類型旨在通過延遲非基本服務來加速計算機的啓動。

What does 「delayed start」 do in startup type for a Windows service?


要設置服務之間的依賴關係,使用depend=選項。

sc.exe create Example start= delayed-auto binPath= "..." depend= service1/service2/service3 

如果你仍然想使用delayed-auto在Windows Vista和更高版本(推薦的),剛剛創建兩個[Run]條目,一個用於Windows XP和一個爲Windows Vista(Windows version 6.0)和更新。

; Delayed automatic start on Vista and newer 
Filename: {sys}\sc.exe; Check: (IsAdminLoggedOn or IsPowerUserLoggedOn); \ 
    Parameters: "create Example start= delayed-auto binPath= ""{app}\Example.exe"" depend= service1/service2/service3"; \ 
    Flags: runhidden; MinVersion: 6.0 

; Automatic start on XP 
Filename: {sys}\sc.exe; Check: (IsAdminLoggedOn or IsPowerUserLoggedOn); \ 
    Parameters: "create Example start= auto binPath= ""{app}\Example.exe"" depend= service1/service2/service3"; \ 
    Flags: runhidden; OnlyBelowVersion: 6.0 

另請參閱Execute different command in Inno Setup Run section based on Windows version


一個更好的,雖然更復雜一點的解決方案是使用scripted constant。它減少了代碼重複。

+0

但是如果我不知道我的依賴是什麼。不同的操作系統可以有不同的依賴關係嗎?我是否應該爲常規Web服務包含任何基本的依賴項。 – yuval

+0

我的可執行文件使用SNMP掃描網絡設備,並使用HTTP/HTTPS將它們發送到服務器。你可以在這裏下載http://maprinter.com/downloads/Maprinter.exe – yuval

+0

不斷更新設備列表 – yuval