¿Cómo puedo encontrar el GUID del producto de una configuración MSI instalada?


Necesito encontrar el GUID del producto para un archivo MSI instalado con el fin de realizar el mantenimiento, como parches, desinstalación y también con fines de auditoría.

Author: Stein Åsmul, 2015-04-29

1 answers

Versión corta

La siguiente información ha crecido considerablemente con el tiempo y puede haberse vuelto un poco demasiado elaborada. ¿Cómo obtener códigos de productos rápidamente? (cuatro enfoques):

1. Utilice el "one-liner"de Powershell

Desplácese hacia abajo para ver la captura de pantalla y paso a paso . Descargo de responsabilidad también a continuación: riesgos menores o moderados dependiendo de a quién le pregunte. Funciona bien para mí. Cualquier auto-reparación desencadenada por esta opción debe ser generalmente posible cancelar. El chequeo de integridad del paquete activado añade algo de "ruido" en el registro de eventos. Nota! IdentifyingNumber es la ProductCode (peculiaridad de WMI).

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

Inicio rápido de Powershell : mantenga presionada la tecla de Windows , toque R , escriba "powershell" y presione Enter

2. Use VBScript

Descrito más adelante en " Herramientas alternativas" (sección 3). Esta opción puede ser más segura que Powershell por razones se explica en detalle a continuación. En esencia, es (mucho) más rápidoy no es capaz de activar la auto-reparación de MSI ya que no pasa por WMI (accede a la MSI COM API directamente - a una velocidad vertiginosa). Sin embargo, está más involucrada que la opción de Powershell (varias líneas de código).

3. Búsqueda en el Registro

Algunos juran buscando cosas en el registro. No es mi enfoque recomendado - Me gusta ir a través de APIs adecuadas (o en otras palabras: OS llamadas a funciones). Siempre hay raras excepciones explicadas solo por los aspectos internos de la implementación de API:

  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  • HKCU\Software\Microsoft\Windows\CurrentVersion\Uninstall

4. Archivo MSI original / WiX Source

Usted puede encontrar el Product Code en el Property table de cualquier archivo MSI (y cualquier otra propiedad). Sin embargo, el GUID podría posiblemente (rara vez) ser anulado por una transformación aplicada en el momento de la instalación y, por lo tanto, no coincide con el GUID del producto registrado bajo (enfoque 1 y 2 anterior informará el código de producto real-que está registrado con Windows - en tales escenarios raros).

Necesita una herramienta para ver archivos MSI . Vea hacia la parte inferior de la siguiente respuesta para una lista de herramientas gratuitas que puede descargar (o vea la opción rápida a continuación): ¿Cómo puedo comparar el contenido de dos (o más) archivos MSI?

ACTUALIZACIÓN: Por conveniencia y necesidad de velocidad: -), descargar SuperOrca sin demora y sin problemas desde este hotlink de descarga directa - la herramienta es lo suficientemente buena para hacer el trabajo - instale, abra MSI y vaya directamente a la tabla de propiedades y encuentre la fila ProductCode ( por favor, compruebe siempre el virus de un hotlink de descarga directa-obviamente - puede usar virustotal.com para hacerlo - análisis en línea utilizando docenas de suites antivirus y malware para escanear lo que carga).


Y, a continuación encontrará la respuesta original que "creció orgánicamente" en un montón de detalles.

Tal vez vea la sección " Desinstalar paquetes MSI" a continuación si esta es la tarea que necesita realizar.


Recuperar Códigos de Producto

ACTUALIZAR: Si también necesita el código de actualización , compruebe esta respuesta: ¿Cómo puedo encontrar el código de actualización para un archivo MSI instalado? (recupera códigos de productos asociados, códigos de actualización y nombres de productos en un salida de la tabla-similar a la de abajo).

  • ¿No puedes usar PowerShell? Consulte la sección "Herramientas alternativas" a continuación.
  • ¿Quieres desinstalar? Consulte la sección "Desinstalar paquetes MSI" a continuación.

Encienda Powershell (mantenga presionada la tecla Windows, toque R, suelte la tecla Windows, escriba "powershell" y presione OK ) y ejecute el comando a continuación para obtener una lista de los códigos de producto del paquete MSI instalado con la ruta del paquete de caché local y el nombre del producto (maximice la ventana de PowerShell para evitar nombres truncados).

Antes de ejecutar esta línea de comandos, por favor lea el aviso legal a continuación (nada peligroso, solo algunas molestias potenciales). La sección 3 en "Herramientas alternativas" muestra una forma alternativa no-WMI de obtener la misma información usando VBScript. Si está tratando de desinstalar un paquete, hay una sección a continuación con algunos ejemplos de msiexec.orden exe líneas:

get-wmiobject Win32_Product | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

La salida debería ser similar a esta:

introduzca la descripción de la imagen aquí

Nota! Por alguna extraña razón el "ProductCode" se conoce como "IdentifyingNumber" en WMI. En otras palabras, en la imagen de arriba, el número de identificación es el código del producto.

Si necesita ejecutar esta consulta de forma remota en muchos equipos remotos , consulte " Recuperar códigos de producto Desde un equipo Remoto Computer " sección a continuación.

DESCARGO DE RESPONSABILIDAD (importante, por favor lea antes de ejecutar el comando!): Debido al extraño diseño de Microsoft, cualquier llamada WMI a Win32_Product (como el comando PowerShell a continuación) activará una validación del package estate . Además de ser bastante lento , esto puede en casos raros activa una auto-reparación de MSI. Esto puede ser un paquete pequeño o algo enorme-como Visual Studio. En la mayoría de los casos esto no sucede , pero alli es un riesgo. No ejecute este comando justo antes de reunión-no es siempre peligroso (es de solo lectura), pero podría llevar a una reparación larga en casos muy raros (Creo que puede cancelar el auto-reparación también-a menos que se lo impida activamente el paquete en cuestión, pero se reiniciará si llama a Win32_Product de nuevo y esto persistirá hasta que deje que la auto-reparación termine-a veces podría continuar incluso si lo deja terminar: ¿Cómo puedo determinar qué causas repetidos de Windows Installer auto-reparación?).

Y solo para el registro: algunas personas informan que sus registros de eventos se llenan con entradas MsiInstaller EventID 1035 (consulte la respuesta del jefe de código), aparentemente causadas por consultas WMI a la clase Win32_Product (personalmente, nunca he visto esto). Esto está no directamente relacionado con el comando Powershell sugerido anteriormente, está en el contexto del uso general de la clase WIM Win32_Product.

Usted puede también obtenga la salida en forma de lista (en lugar de tabla):

get-wmiobject -class Win32_Product

En este caso la salida es similar a esta:

introduzca la descripción de la imagen aquí


Recuperar Códigos De Producto Desde Un Ordenador Remoto

En teoría solo debería ser capaz de especificar un nombre de equipo remoto como parte del propio comando. Aquí está el mismo comando que el anterior configurado para ejecutarse en la máquina "RemoteMachine" (-ComputerName RemoteMachine sección añadida):

get-wmiobject Win32_Product -ComputerName RemoteMachine | Format-Table IdentifyingNumber, Name, LocalPackage -AutoSize

Esto podría funcionar si se está ejecutando con el administrador de dominio derechos sobre un dominio propio. En un entorno de grupo de trabajo (pequeña oficina / red doméstica), probablemente tenga que agregar credenciales de usuario directamente a las llamadas WMI para que funcione.

Además, las conexiones remotas en WMI se ven afectadas por (al menos) el Firewall de Windows , DCOM settings , y User Account Control (UAC) (más cualquier factor adicional que no sea de Microsoft, por ejemplo firewalls reales, cortafuegos de software de terceros, seguridad software of various kinds, etc...). Si funcionará o no depende de su configuración exacta.

ACTUALIZAR: Se puede encontrar una sección extensa sobre la ejecución remota de WMI en esta respuesta: ¿Cómo puedo encontrar el código de actualización para un archivo MSI instalado?. Aparece una regla de firewall y la supresión de la solicitud de UAC a través de un registro tweak puede hacer que las cosas funcionen en un entorno de red de grupos de trabajo. No se recomienda cambios en cuanto a seguridad, pero funcionó para mí.


Herramientas alternativas

PowerShell requiere la .NET framework para ser instalado (actualmente en la versión 3.5.1 parece? Octubre de 2017). La propia aplicación de PowerShell también puede faltar de la máquina incluso si.NET está instalado. Finalmente creo que PowerShell puede ser deshabilitado o bloqueado por varias políticas y privilegios del sistema.

Si este es el caso, puede probar otras formas de recuperar códigos de producto. Mi alternativa preferida es VBScript - es rápido y flexible (pero también se puede bloquear en ciertas máquinas, y el scripting siempre está un poco más involucrado que el uso de herramientas).

  1. Comencemos con una herramienta WMI integrada de Windows : wbemtest.exe.

    • Lanzamiento wbemtest.exe (Mantenga pulsada la tecla Windows, toque R, suelte el Tecla de Windows, escriba " wbemtest.exe " y pulse OK ).
    • Haga clic en connecty luego en OK (el espacio de nombres por defecto es root\cimv2), y haga clic de nuevo en " connect".
    • Haga clic en " Consulta" y escriba este comando WQL (tipo SQL): SELECT IdentifyingNumber,Name,Version FROM Win32_Product y haga clic en "Usar" (o equivalente: la herramienta se localizará).
    • Captura de pantalla de salida de muestra (truncada). No es el formato más bonito, pero puede obtener los datos que necesita. IdentifyingNumber es el Código del producto MSI :

wbemtest.exe

  1. A continuación, puede probar una herramienta WMI personalizada y más completa, como WMIExplorer.exe

    • Esto no está incluido en Windows. Sin embargo, es una herramienta muy buena. Recomendar.
    • Compruébelo en: https://github.com/vinaypamnani/wmie2/releases
    • Inicie la herramienta, haga clic en Conectar, haga doble clic en ROOT\CIMV2
    • Desde la pestaña " Consulta", escriba siguiendo la consulta SELECT IdentifyingNumber,Name,Version FROM Win32_Product y pulse Execute.
    • Se ha omitido la captura de pantalla, la aplicación requiere demasiado espacio en la pantalla.
  2. Finalmente puede probar un VBScript para acceder a la información a través de la interfaz de automatización MSI (característica principal de Windows - es no relacionada con WMI).

    • Copie el siguiente script y péguelo en un *.archivo vbs en su escritorio, e intente ejecutarlo haciendo doble clic. Su escritorio debe poder escribir para usted, o puede usar cualquier otra ubicación en la que se pueda escribir.
    • Este no es un gran VBScript. Terseness se ha preferido sobre el manejo de errores y la integridad, pero debe hacer el trabajo con una complejidad mínima.
    • El archivo de salida se crea en la carpeta desde la que se ejecuta el script (La carpeta debe tener escritura). El archivo de salida se llama msiinfo.csv.
    • Haga doble clic en el archivo para abrirlo en una aplicación de hoja de cálculo, seleccione coma como delimitador al importar O simplemente abra el archivo en el bloc de notas o cualquier visor de texto.
    • La apertura en una hoja de cálculo permitirá funciones avanzadas de ordenación.
    • Este script se puede adaptar fácilmente para mostrar una cantidad significativa de detalles adicionales sobre la instalación de MSI. Una demostración de esto se puede encontrar aquí: cómo averiguar qué productos están instalados - los productos más nuevos ya están instalados MSI windows.
' Retrieve all ProductCodes (with ProductName and ProductVersion)
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

For Each product In installer.ProductsEx("", "", 7)
   productcode = product.ProductCode
   name = product.InstallProperty("ProductName")
   version=product.InstallProperty("VersionString")
   output.writeline (productcode & ", " & name & ", " & version)
Next

output.Close

No puedo pensar en ningún otro propósito general opciones para recuperar códigos de producto en este momento, agregue si conoce alguno. Simplemente edite inline en lugar de agregar demasiados comentarios, por favor.

Ciertamente puede acceder a esta información desde su aplicación llamando a la interfaz de automatización MSI (basada en COM) O el C++ MSI installer functions (API Win32). O incluso use consultas WMI desde su aplicación como lo hace en las muestras anteriores usando PowerShell, wbemtest.exe o WMIExplorer.exe.


Desinstalar paquetes MSI

Si lo que desea hacer es desinstalar el paquete MSI para el que encontró el código del producto, puede hacerlo de la siguiente manera usando un símbolo del sistema con privilegios elevados (busque cmd.exe , haga clic con el botón derecho y ejecute como administrador):

Opción 1: Desinstalación básica e interactiva sin registro (rápido y fácil):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C}

Parámetro Rápido Explicación:

/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall

También puede habilitar el registro (detallado) y ejecutar en modo silencioso si lo desea, lo que nos lleva a la opción 2:

Opción 2: Desinstalación silenciosa con registro detallado (mejor para los archivos por lotes):

msiexec.exe /x {00000000-0000-0000-0000-00000000000C} /QN /L*V "C:\My.log" REBOOT=ReallySuppress

Explicación rápida del parámetro:

/X = run uninstall sequence
{00000000-0000-0000-0000-00000000000C} = product code for product to uninstall
/QN = run completely silently
/L*V "C:\My.log"= verbose logging at specified path
REBOOT=ReallySuppress = avoid unexpected, sudden reboot

Hay una referencia completa para desinstalar MSI aquí (varias formas diferentes de desinstalar paquetes MSI): Desinstalar un archivo MSI del comando línea sin usar msiexec . Hay una gran cantidad de diferentes maneras de desinstalar.

Si está escribiendo un archivo por lotes, eche un vistazo a la sección 3 en la respuesta vinculada anterior para algunas variantes comunes y estándar de la línea de comandos de desinstalación.

Y un enlace rápido a msiexec.exe (opciones de línea de comandos) (descripción general de la línea de comandos para msiexec.exe de MSDN). Y la versión Technet también.


Recuperar otras Propiedades / Información MSI (f.ex Código de Actualización)

ACTUALIZACIÓN : por favor, encuentre una nueva respuesta sobre cómo encontrar el código de actualización para los paquetes instalados en lugar de buscar manualmente el código en los archivos MSI. Para paquetes instalados esto es mucho más confiable. Si el paquete no está instalado, todavía necesita buscar en el archivo MSI (o el archivo de origen utilizado para compilar el MSI) para encontrar el código de actualización. Dejar en la sección anterior a continuación:

Si desea obtener el UpgradeCode o otras propiedades MSI, puede abrir el MSI de instalación en caché para el producto desde la ubicación especificada por "LocalPackage" en la imagen de arriba (algo así como: C:\WINDOWS\Installer\50c080ae.msi - es un nombre de archivo hexadecimal, único en cada sistema). Luego nos fijamos en el "tabla de propiedades" para UpgradeCode (es posible que el UpgradeCode ser redefinido en una transformación - para asegurarse de que obtiene el valor correcto necesita recuperar el código programáticamente desde el sistema - proporcionaré un script para esto en breve. Sin embargo, el código de actualización que se encuentra en el MSI en caché es generalmente correcto).

Para abrir los archivos MSI almacenados en caché, utilice Orca u otra herramienta de embalaje. Aquí hay una discusión de diferentes herramientas (cualquiera de ellas servirá): ¿Qué producto de instalación usar? InstallShield, WiX, Wise, Instalador avanzado, etc. Si no tienes tal herramienta instalado, su apuesta más rápida podría ser probar Super Orca (es fácil de usar, pero no ampliamente probado por mí).

ACTUALIZACIÓN : aquí hay una nueva respuesta con información sobre varios productos gratuitos que puede usar para ver archivos MSI: ¿Cómo puedo comparar el contenido de dos (o más) archivos MSI?

Si tiene instalado Visual Studio , intente buscar Orca-x86_en-us.msi - bajo Program Files (x86) - e instálelo (este es el propio visor MSI oficial de Microsoft y Editor). Luego encuentra Orca en el menú inicio. Ir tiempo en ningún momento : -). Técnicamente, Orca se instala como parte del SDK de Windows (no Visual Studio), pero el SDK de Windows se incluye con la instalación de Visual Studio. Si no tiene instalado Visual Studio, ¿quizás conoce a alguien que sí lo tenga? Solo haz que busquen este MSI y te lo envíen (es un pequeño archivo de medio mb) - debería tomarles segundos. ACTUALIZAR : necesita varios archivos CAB, así como el MSI - estos se encuentran en la misma carpeta donde se encuentra el MSI. Si no, siempre puede descargar el SDK de Windows (es gratuito, pero es grande, y todo lo que instale ralentizará su PC). No estoy seguro de qué parte del SDK instala el MSI Orca. Si lo hace, simplemente edite y agregue detalles aquí.



Temas similares (para referencia y fácil acceso - debería limpiar esta lista):

 81
Author: Stein Åsmul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-16 16:22:59