programas para msi mac cómo convertir convertidor archivos abrir installer windows-installer msiexec dtf

installer - para - ¿Cómo leer programáticamente las propiedades dentro de un archivo MSI?



programas para abrir msi (6)

Solo quiero mencionar que las cosas se han vuelto aún más fáciles ahora. Existe un contenedor .NET completo para el modelo de objetos de Windows Installer, por lo que puede evitar cualquier clunkiness de interoperabilidad COM .

El contenedor se llama " Deployment Tools Foundation " (DTF) y aquí está la descripción básica: " Deployment Tools Foundation es un rico conjunto de bibliotecas de clases .NET y recursos relacionados que juntas llevan las tecnologías de plataforma de despliegue de Windows al mundo .NET. está diseñado para simplificar enormemente las tareas de desarrollo relacionadas con la implementación y al mismo tiempo exponer la funcionalidad completa de la tecnología subyacente ".

Aquí hay una muestra simplificada y práctica :

using (var db = new Database(FullPath, DatabaseOpenMode.ReadOnly)) { PackageCode = db.SummaryInfo.RevisionNumber; AppVendor = db.SummaryInfo.Author; AppName = db.SummaryInfo.Title; ProductName = db.SummaryInfo.Subject; ProductCode = (string)db.ExecuteScalar("SELECT `Value` FROM "+ "`Property` WHERE `Property` = ''ProductCode''"); AppVersion = (string)db.ExecuteScalar("SELECT `Value` FROM "+ "`Property` WHERE `Property` = ''ProductVersion''"); UpgradeCode = (string)db.ExecuteScalar("SELECT `Value` FROM "+ " `Property` WHERE `Property` = ''UpgradeCode''"); }

Archivos DTF principales (los dos últimos son los más utilizados):

  • Microsoft.Deployment.Compression.dll - Marco para el archivo de embalaje y desembalaje.
  • Microsoft.Deployment.Compression.Cab.dll : implementa el embalaje y desembalaje de archivos del gabinete.
  • Microsoft.Deployment.Resources.dll - Clases para leer y escribir datos de recursos en archivos ejecutables.
  • Microsoft.Deployment.WindowsInstaller.dll - Complete la biblioteca de clases basada en .NET para las API de Windows Installer.
  • Microsoft.Deployment.WindowsInstaller.Package.dll : clases ampliadas para trabajar con la instalación de Windows Installer y paquetes de parches.

Simplemente cree un proyecto de C #, haga referencia a estos archivos y codifique su propia aplicación de implementación con el control que desee y necesite. No tengo las herramientas para DTF por el momento, pero vea esta muestra para obtener una idea general de cómo funcionaría un programa C #.

  • DTF está incluido con WIX. Descargue WiX desde aquí .
  • Los dlls DTF están en la carpeta SDK en la carpeta principal de instalación de WiX (la ubicación predeterminada es:% ProgramFiles (x86)% / WiX Toolset v3.10 / SDK). El número de versión probablemente será diferente cuando lo vea. Solo busque la carpeta WiX en% ProgramFiles (x86)%.
  • Busque los archivos de ayuda de DTF en la carpeta "doc". DTF.chm y DTFAPI.chm . Documentación absolutamente excelente para el modelo de objetos y su uso.
  • Consulte esta publicación de serverfault.com para obtener más detalles de DTF
  • Algunas sugerencias de inicio para trabajar con WiX: MSI vs paquetes nuget: ¿cuál es mejor para la entrega continua?

¿Hay alguna forma de leer las propiedades dentro del archivo msi?

Por ejemplo, dado un nombre de archivo msi Testpackage.msi

necesito encontrar

productName PackageCode version

Esto voy a usarlo con la desinstalación WMI

string objPath = string.Format("Win32_Product.IdentifyingNumber=''{0}'',Name=''{1}'',Version=''{2}''", "{AC9C1263-2BA8-4863-BE18-01232375CE42}", "testproduct", "10.0.0.0");

Actualización: Usar Orca es una gran opción, si esto se puede lograr programáticamente, entonces puedo usar esto para generar notas de la versión automática. y en el programa de desinstalación también.


Puede usar Orca.exe de Microsoft . Orca le permitirá abrir el MSI y editar / ver todas las tablas en él. Deberá descargar todo el SDK de Windows para obtenerlo, pero afortunadamente es gratis.

Una alternativa (que puede ser más rápida debido al tamaño de descarga del SDK) es usar dark.exe del proyecto de WiX . Dark es un descompilador de MSI, que exportará todo en un archivo XML y una colección de recursos. El XML que genera tendrá la información que está buscando.


Si no necesita hacerlo en código, puede usar la herramienta Orca de Microsoft.


Encontré una solución liviana no programática en lessmsi . Aparentemente usa wix y simplemente explota todo el .msi en una carpeta especificada. (También tiene una interfaz de usuario pero no me funcionó en Win7).


Aquí hay un ejemplo similar en VBScript que utilizo como parte de mi proceso de compilación en la creación de ejecutables bootstrapper ...

Option Explicit Const MY_MSI = "product.msi" Dim installer, database, view, result, sumInfo, sPackageCode Set installer = CreateObject("WindowsInstaller.Installer") Set database = installer.OpenDatabase (MY_MSI, 0) Set sumInfo = installer.SummaryInformation(MY_MSI, 0) sPackageCode = sumInfo.Property(9) '' PID_REVNUMBER = 9, contains the package code. WScript.Echo "ProductVersion=" & getproperty("ProductVersion") WScript.Echo "ProductCode=" & getproperty("ProductCode") WScript.Echo "PackageCode=" & sPackageCode WScript.Echo "ProductName=" & getproperty("ProductName") 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


Puede usar la API basada en COM para trabajar con MSI y hacer algo como

Function GetVersion(ByVal msiName) Const msiOpenDatabaseModeReadOnly = 0 Dim msi, db, view Set msi = CreateObject("WindowsInstaller.Installer") Set db = msi.OpenDataBase(msiName, msiOpenDatabaseModeReadOnly) Set view = db.OpenView("SELECT `Value` FROM `Property` WHERE `Property` = ''ProductVersion''") Call view.Execute() GetVersion = view.Fetch().StringData(1) End Function