2011-03-21 116 views
0

我有一個InstallScript安裝程序,需要根據當前值修改現有服務的啓動類型(即自動,手動或禁用)。例如,如果當前啓動類型爲「已禁用」,則可能會將其保留,否則可能會將其設置爲「自動」。如何從InstallShield獲取服務的啓動類型?

不幸的是我找不到獲取服務啓動類型的方法。有一些功能可以檢測服務是否存在(ServiceExistsService),並獲取其當前的啓動/停止狀態(ServiceGetServiceState),但沒有任何內容檢索服務的參數。我認爲可能調用其中一個函數會將SERVICE_IS_PARAMS結構填充爲副作用,但似乎並非如此。

如何獲取服務的啓動類型?

+0

也許這手工檢索的啓動類型將是最好的解決辦法自定義操作。 – 2011-03-22 07:38:39

回答

1

這不是完全推薦,但實際上應該很容易從HKLM\System\CurrentControlSet\Services\TheServiceName讀取這些信息;尤其是DWORD Start包含啓動類型。請注意,直接在註冊表中更改它不會影響事情,至少在重新啓動後纔會影響事情,所以使用API​​應用任何更改仍然很好。

或者,如果你想做的事情「正確」,你可以聲明結構和功能,以達到Advapi32.QueryServiceConfig。這將支持更改註冊表位置或底層存儲的Windows的任何版本(我不希望的東西,但它應該被認爲是可能的)。

0

另一種選擇,這是速度較慢,但​​應該是防差錯,是啓動WMIC.EXE與參數「服務服務名獲得STARTMODE」,並將輸出重定向到一個文件中。然後,閱讀文件和二號線應包含答案(自動/手動/禁用)