簡體   English   中英

檢索已安裝服務的MSI產品代碼

[英]Retrieve MSI product code for an installed Service

我已經找到了相當數量的答案,希望我的“ google-fu”不是問題...無論如何。

我想枚舉Windows(2003 R2、2008、2008 R2)計算機上的所有服務,然后確定它們的產品代碼是什么,以確定用來安裝Windows Service的MSI軟件包(在我們維護的存儲庫中)。

基本上,請使用類似於以下PS命令的列表:{Get-Service | 格式列表*},或C#行:System.ServiceProcess.ServiceController [] services = ServiceController.GetServices();,然后遍歷所有返回的服務名稱並確定每個MSI產品代碼的含義。

我更喜歡C#路線,但會考慮所有建議。

這可能嗎? 還是有一個更好的方法在我的示例中不涉及ServiceController類?

在此先感謝您的任何建議!

WiX DTF的Microsoft.Deployment.WindowsInstaller具有一個名為ComponentInstallation的類。 它具有一個名為AllComponents的靜態屬性,該屬性返回ComponentInstallation的IEnumerable。

我想您可以查詢HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlSet \\ Services以獲取圖像路徑,並嘗試將其與由MSI管理的組件相關聯。 建立連接后,ComponentInstallation類將具有一個名為ClientProducts的屬性,該屬性將返回IEnumerable of ProductInstallation。 請記住,一個組件可以在多個MSI之間共享。

獲得ProductInstallation引用后,就可以獲取它的ProductCode屬性。

即使它們使用的是InstallUtil,這也會捕獲MSI安裝的服務,因為您正在跟蹤誰放下了文件。

並非所有Windows服務都是使用MSI安裝的。 您可以使用installutil.exe安裝.NET服務。 Windows服務已在HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services 由於注冊表不包含MSI產品編號,因此我認為您需要獲取ImagePath屬性並交叉引用MSI軟件包安裝的項目。 MSI數據存儲在HKEY_CLASSES_ROOT\\Installer 如何將這兩者聯系起來超出了我的范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM