[英]MSI get install arguments from registry
我們實際上是在編寫PowerShell cmdlet來創建已安裝(自定義)MSI的快照。 cmdlet遍歷服務器列表,檢查是否安裝了給定發布者的MSI。 如果是這樣,則將MSI從遠程計算機復制到執行PowerShell cmdlet的主機。 到現在為止還挺好。 在下一階段,我們計划使用預先獲取的MSI軟件包還原系統。
我們的實際問題:一些MSI需要命令行參數才能通過msiexec安裝。 如果參數存儲在某個地方,我們搜索了Windows注冊表,但找不到它們。 我們檢查了以下路徑:
HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\*\InstallProperties
HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*
HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\*
有人知道通過msiexec安裝MSI時,安裝參數是否在Windows上持久存在嗎?
通過以下方式安裝MSI軟件包:
msiexec /i somePackage.msi /qn /norestart Arg1=1 Arg2=someTest Arg3=true
謝謝
遺憾的是,Windows Installer屬性沒有保留。 每個MSI作者都要決定他要如何保存/檢索(很多人不知道他們需要)屬性,以便在后續事務中可用。
安裝字符串 :正如Chris所說,Windows Installer遺漏了安裝程序中的屬性-我也認為。 我已經實現了一些自定義功能,以使這種持久性能夠解決公司部署的局限性。
卸載字符串 :盡管注冊表中沒有安裝字符串/安裝命令行(據我所知), 但仍有寫入注冊表的卸載字符串,如此處所述 。
轉換 :我想補充一點,如果在安裝過程中應用了轉換,那么您可以通過MSI API獲得這些轉換的路徑。 應用的轉換可以對正在安裝的MSI進行重大更改,並且與僅設置PUBLIC PROPERTIES相比,它是定制部署的重量級方法。 此處提供更多信息: 如何更好地利用MSI文件 (“轉換”部分)。
要檢索包裝盒上應用於您的MSI軟件包的轉換列表(可能沒有-大多數公司都使用轉換進行部署),請嘗試使用訪問MSI COM API的VBScript獲取信息(而不是直接從MSI COM API讀取)注冊表-效果不佳,因為原始值可能會受到未在注冊表中以明文顯示的實現細節的影響。
要運行該腳本,請將其復制/粘貼到桌面上的*.vbs
文件中,然后雙擊運行。 輸出到msiinfo.csv
。 在Excel , 電子表格應用程序或記事本中打開:
Set fso = CreateObject("Scripting.FileSystemObject")
Set output = fso.CreateTextFile("msiinfo.csv", True, True)
Set installer = CreateObject("WindowsInstaller.Installer")
On Error Resume Next ' we ignore all errors
' Write headers
output.writeline ("ProductCode" & ", " & "ProductName" & ", " & "Version" & ", " & "Transforms")
For Each product In installer.ProductsEx("", "", 7)
productcode = product.ProductCode
name = product.InstallProperty("ProductName")
version=product.InstallProperty("VersionString")
transforms= product.InstallProperty("Transforms")
output.writeline (productcode & ", " & name & ", " & version & ", " & transforms)
Next
output.Close
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.