¿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.
Property
tabla. ¿Tuviste un flujo de trabajo específico o un caso de uso fuera solo en el MSI?Respuestas:
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.csv
redirección simple )fuente
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.
fuente
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:
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:
El comando anterior es equivalente a:
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:
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
/qr
opció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
|/passive
o/qn
|/quiet
), es<msi_property_logfile>
posible que le falten algunas propiedades.fuente
La forma en que lo estoy haciendo ahora es mediante el uso del módulo Carbon Powershell. Para instalar el tipo de módulo:
Entonces simplemente
Ejemplo:
fuente
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
fuente