И така, WindowsInstaller взема всякакви идентификатори за инсталирани пакети, например: 673538CFB3FFAAC4380E12843BBFC789 или BA342DECAB7C24D3699041FEA5F66C10 и т.н. Как мога да намеря този идентификатор по известен инсталационен пакет?
Идентификационни номера на инсталатора на Windows
comment
Този въпрос изглежда подобен на stackoverflow.com/questions/2467429/c -check-installed-programms
- person Ciprian   schedule 12.10.2011
Отговори (2)
Ето примерен VBScript, който изтегля различни полезни свойства от всеки даден MSI файл, без да е необходимо да го инсталирате. Можете ръчно да отворите даден пакет с помощта на инструмент като Орка
Като алтернатива, ако искате да идентифицирате текущо инсталираните пакети, можете да повторите инсталираните елементи, като използвате API на Windows Installer или от командния ред чрез msiinv.exe
Option Explicit
Dim argCount:argCount = Wscript.Arguments.Count
Dim sPackageCode, sProductCode, sProductVersion, sDownloadURL, sConfig, sProductName
If (argCount = 0) Then
WScript.Echo "Usage: msiinfo.vbs <filename>"
WScript.Quit 1
End If
Dim MSI_FILE : MSI_FILE = Wscript.Arguments(0)
Dim filesys : Set filesys=CreateObject("Scripting.FileSystemObject")
If Not filesys.FileExists(MSI_FILE) Then
WScript.Echo "Unable to find " & MSI_FILE & ", exiting"
WScript.Quit 1
End If
Dim installer, database, view, result
Set installer = CreateObject("WindowsInstaller.Installer")
Set database = installer.OpenDatabase (MSI_FILE, 0)
Dim sumInfo : Set sumInfo = installer.SummaryInformation(MSI_FILE, 0)
sPackageCode = sumInfo.Property(9) ' PID_REVNUMBER = 9, contains the package code.
Dim sDetails : sDetails = "ProductVersion: " & getproperty("ProductVersion") & vbCrLf _
& "ProductCode: " & getproperty("ProductCode") & vbCrLf _
& "PackageCode: " & sPackageCode & vbCrLf _
& "ProductName: " & getproperty("ProductName")
WScript.Echo sDetails
Function getproperty(property)
Set view = database.OpenView ("SELECT Value FROM Property WHERE Property='" & property & "'")
view.Execute
Set result = view.Fetch
getproperty = result.StringData(1)
End Function
person
saschabeaumont
schedule
12.10.2011
Ако искате да използвате powershell:
$winInstaller = New-Object -ComObject WindowsInstaller.Installer
$msiInstalledApps = @()
foreach($item in $winInstaller.GetType().InvokeMember("Products","GetProperty",$null, $winInstaller, $null)){
$msiInstalledApps += New-Object PSObject -Property ($hash = [ordered]@{
Language = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "Language"))
ProductName = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "ProductName"))
PackageCode = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "PackageCode"))
Transforms = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "Transforms"))
AssignmentType = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "AssignmentType"))
PackageName = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "PackageName"))
InstalledProductName = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "InstalledProductName"))
VersionString = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "VersionString"))
RegCompany = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "RegCompany"))
RegOwner = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "RegOwner"))
ProductID = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "ProductID"))
ProductIcon = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "ProductIcon"))
InstallLocation = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "InstallLocation"))
InstallSource = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "InstallSource"))
InstallDate = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "InstallDate"))
Publisher = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "Publisher"))
LocalPackage = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "LocalPackage"))
HelpLink = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "HelpLink"))
HelpTelephone = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "HelpTelephone"))
URLInfoAbout = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "URLInfoAbout"))
URLUpdateInfo = $winInstaller.GetType().InvokeMember("ProductInfo","GetProperty",$null, $winInstaller, @($item, "URLUpdateInfo"))
})
}
$msiInstalledApps
person
Jonathan H.
schedule
28.09.2016