Recuperando propiedades públicas de un archivo MSI


12

¿Existe alguna herramienta o mecanismo para recuperar las propiedades públicas disponibles de un archivo MSI de Windows?

Algunos proveedores que proporcionan archivos MSI no los documentan ellos mismos, por lo que tengo curiosidad por ver si hay una manera de exponerlos sin el código fuente.


8
El ORCA de Microsoft , el SuperORCA de Pantaray y la mayoría de las otras ediciones MSI le permitirán examinar / editar cualquier tabla, incluida la Propertytabla. ¿Tuviste un flujo de trabajo específico o un caso de uso fuera solo en el MSI?
jscott

2
Quería comprender las propiedades públicas disponibles para que pudieran pasarse con precisión durante la instalación, sin tener que consultar al proveedor o la documentación (ya que esto no siempre es posible). Con Puppet podemos pasar propiedades de MSI durante la instalación (envolvemos misexec.exe), por lo que es útil tener esta capacidad.
Ken Barber

1
Puede haber otras propiedades públicas que puede pasar para controlar la instalación, aunque no se enumeran en la tabla Propiedades. Las propiedades se pueden establecer dinámicamente según una condición, por ejemplo, la búsqueda en el registro. Por lo tanto, la documentación del proveedor es la mejor fuente de información.
Alexey Ivanov

También puede ejecutar la instalación con un registro detallado para ver cómo las propiedades cambian sus valores.
Alexey Ivanov

Perdón por la demora: he probado Orca y es fascinante, pero he confirmado el comportamiento que describe @AlexeyIvanov, es decir, algunas propiedades no aparecerán. Confirmé esto con splunk.msi y sus documentos. Supongo que los que aparecen en Orca tienen valores predeterminados, pero esta no es una lista canónica. ¿Puede explicar un poco más sobre la metodología de registro detallado?
Ken Barber

Respuestas:


8

Lessmsi proporciona una línea de comandos y una aplicación interactiva para recuperar cualquier atributo del .msi.

Interactivamente, abra el archivo .msi, vaya a la vista de tabla y seleccione o escriba "Propiedad". Sin embargo, si bien esto proporciona los nombres de propiedad, no proporciona los valores válidos para dicha propiedad (o no he descubierto el lugar correcto para buscar).

Línea de comando para enumerar la tabla de propiedades a la consola (frustrantemente, no se puede capturar con una > output.csvredirección simple )

lessmsi l -t Property ...\path\to\setup.msi

1

Dado que el archivo MSI almacena propiedades públicas en una base de datos interna, en realidad puede consultarlas usando VBScript y SQL.

Aquí hay un script de ejemplo que devolverá todas las propiedades almacenadas en el archivo MSI. Es una convención el uso de letras mayúsculas para definir propiedades públicas, de modo que así es como suelen identificarse.


1

lessmsi es una gran herramienta que ciertamente funciona aquí si está dispuesto a abrir su GUI y hacer una investigación manual. Sin embargo, diré que el siguiente comando no presenta todas las propiedades de manera confiable:

lessmsi l -t Property <msi_name>

Una forma de (mejor) garantizar que obtenga todas las propiedades posibles es realizar una instalación, reparar o desinstalar con el archivo MSI y registrar el proceso. El siguiente comando registra solo las propiedades y nada más:

<msi_name> /lp! <msi_property_logfile>

El comando anterior es equivalente a:

msiexec /lp! <msi_property_logfile> /i <msi_name>

Sin embargo, mi método preferido es no instalar / eliminar / reparar realmente (y simplemente extraer en su lugar). Las ventajas que tiene este método sobre lessmsi es que no requiere una utilidad de terceros (es decir, lessmsi ), y no requiere que te metas con ninguna instalación. Dado que tiene suficiente espacio en disco para instalar realmente el programa, puede hacer lo siguiente:

msiexec /a <msi_name> /lp! <msi_property_logfile> TARGETDIR=<absolute_path_to_extract_to>

Tenga en cuenta que <absolute_path_to_extract_to>puede apuntar a un directorio inexistente (el comando creará los directorios necesarios o fallarán).

Si odia la interfaz de usuario de instalación por cualquier motivo, puede agregar la /qropción, que 'reducirá' y posiblemente eliminará la interfaz de usuario sin afectar el proceso de registro de propiedades. Sin embargo, tenga cuidado: si va "más bajo" que la IU reducida (a saber, /qb| /passiveo /qn| /quiet), es <msi_property_logfile>posible que le falten algunas propiedades.


El problema de este método es: debes ejecutar el instalador. Incluso si lo instala en un targetdir no estándar, todavía estropeó los registros.
Wang

0

La forma en que lo estoy haciendo ahora es mediante el uso del módulo Carbon Powershell. Para instalar el tipo de módulo:

Install-Module -Name 'Carbon' -AllowClobber

Entonces simplemente

msi your_msi_path.msi

Ejemplo:

msi putty-64bit-0.70-installer.msi

ProductName                 ProductVersion Manufacturer ProductCode                         

-----------                 -------------- ------------ -----------                         

PuTTY release 0.70 (64-bit) 0.70.0.0       Simon Tatham 45b3032f-22cc-40cd-9e97-4da7095fa5a2

-1

Creo que ahora probablemente la mejor manera de hacerlo es usando powershell. Aquí hay un script que hace el trabajo realmente bien: https://gallery.technet.microsoft.com/scriptcenter/Get-MsiDatabaseProperties-09d9c87c


Esta respuesta es solo un enlace, que puede cambiar / desaparecer.
David Makogon

Hay otras respuestas que son simplemente un enlace. No me siento cómodo copiando y pegando el código de otras personas. Creo que mi respuesta ofrece una opción alternativa y realmente no entiendo el voto negativo.
gigi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.