¿Cómo puedo encontrar el GUID del producto de una configuración MSI instalada?
Necesito encontrar el GUID del producto de un archivo MSI instalado para poder realizar tareas de mantenimiento como parchear, desinstalar (cómo desinstalar) y también para finalidades de auditoría.
58
2
Inicio rápido de Powershell: mantener la tecla Windows, tocar R, escribir "powershell" y pulsar Enter 2.
Utilizar VBScript
.Descrito más adelante en "Herramientas alternativas" (sección 3). Esta opción puede ser más segura que Powershell por razones que se explican en detalle más adelante. En esencia es (mucho) más rápida* y no es capaz de activar la auto-reparación de MSI ya que no pasa por WMI (accede a la API COM de MSI directamente - a una velocidad de vértigo). Sin embargo, es más complicado que la opción Powershell* (varias líneas de código). 3.
Registry Lookup
(búsqueda en el registro)Algunos juran por buscar cosas en el registro. No es mi enfoque recomendado - me gusta ir a través de las APIs apropiadas (o en otras palabras: llamadas a funciones del SO). Siempre hay excepciones extrañas que sólo se explican por los internos de la implementación de la API:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
Archivo MSI original / Fuente WiX
Puede encontrar el
Código de producto
en laTabla de propiedades
de cualquier archivo MSI (y cualquier otra propiedad también). Sin embargo, el GUID podría (raramente) ser anulado por una transformación aplicada en el momento de la instalación y, por tanto, no coincidir con el GUID con el que está registrado el producto (los enfoques 1 y 2 anteriores informarán del código real del producto - que está registrado en Windows - en estos raros escenarios). Necesita una herramienta para ver los archivos MSI. Vea hacia el final de la siguiente respuesta una lista de herramientas gratuitas que puede descargar (o vea la opción rápida más abajo): https://stackoverflow.com/questions/48482545/how-can-i-compare-the-content-of-two-or-more-msi-files/48482546#48482546 ACTUALIZACIÓN: Para mayor comodidad y necesidad de velocidad :-), descargue SuperOrca sin demora y sin problemas desde este enlace directo de descarga - la herramienta es lo suficientemente buena para hacer el trabajo - instale, abra el MSI y vaya directamente a la tabla de propiedades y encuentre la filaProductCode
(por favor, compruebe siempre el virus de un enlace directo de descarga - obviamente - puede utilizar virustotal.com para hacerlo - escaneo en línea utilizando docenas de antivirus y suites de malware para escanear lo que subes).El resultado debería ser similar a este: {{32441319}}} La salida debería ser similar a esta: {{32441319}}} *Nota: Por alguna extraña razón el "ProductCode" se refiere como *"IdentifyingNumber" en WMI. Así que en otras palabras - en la imagen de arriba el IdentifyingNumber es el ProductCode. Si necesita ejecutar esta consulta de forma remota contra muchos ordenadores remotos*, vea la sección "Recuperar los códigos de producto de un ordenador remoto" más abajo. DISCLAIMER (importante, por favor lea antes de ejecutar el comando): Debido a un extraño diseño de Microsoft, cualquier llamada WMI a
Win32_Product
. (como el comando PowerShell de abajo) desencadenará una **validación delEn este caso, la salida es similar a esto: introduzca aquí la descripción de la imagen
Recuperar los códigos de producto de un ordenador remoto
En teoría, debería poder especificar el nombre del ordenador remoto como parte del propio comando. Aquí está el mismo comando de arriba configurado para ejecutarse en la máquina "RemoteMachine" (
Nombre de la computadora RemoteMachine
sección añadida):Esto puede funcionar si se ejecuta con derechos de administrador de dominio en un dominio adecuado. En un entorno de grupo de trabajo (pequeña oficina / red doméstica), probablemente tenga que añadir las 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, la configuración de DCOM, y el Control de cuentas de usuario (UAC) (además de cualquier factor adicional ajeno a Microsoft - por ejemplo, firewalls reales, firewalls de software de terceros, software de seguridad de varios tipos, etc...). Que funcione o no depende de su configuración exacta.
Conexión a WMI de forma remota con PowerShell]11 ACTUALIZACIÓN: Una sección extensa sobre la ejecución de WMI remoto se puede encontrar en esta respuesta: https://stackoverflow.com/questions/46637094/how-can-i-find-the-upgrade-code-for-an-installed-msi-file/46637095#46637095. Parece que una regla de cortafuegos y la supresión del aviso UAC a través de un ajuste del registro pueden hacer que las cosas funcionen en un entorno de red de grupo de trabajo. No son cambios recomendados en cuanto a la seguridad, pero a mí me funcionó.
Herramientas alternativas
PowerShell requiere que se instale el .NET framework (actualmente en la versión 3.5.1 parece... octubre, 2017). La propia aplicación PowerShell también puede faltar en la máquina aunque esté instalado .NET. Por último creo que PowerShell puede estar desactivado o bloqueado por diversas políticas y privilegios del sistema. Si este es el caso, puedes probar otras formas de recuperar los códigos de producto. Mi alternativa preferida es VBScript - es rápido y flexible (pero también puede estar bloqueado en ciertas máquinas, y el scripting es siempre un poco más complicado que el uso de herramientas).
wbemtest.exe
.wbemtest.exe
(Mantenga pulsada la tecla Windows, pulse R, suelte la tecla Windows, escriba "wbemtest.exe" y pulse OK).SELECT IdentifyingNumber,Name,Version FROM Win32_Product
y haga clic en "Use" (o su equivalente - la herramienta estará localizada).WMIExplorer.exe
.SELECT IdentifyingNumber,Name,Version FROM Win32_Product
y pulse Ejecutar.msiinfo.csv
.Explicación rápida de los parámetros:
También puede habilitar el registro (verboso) 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 verboso (mejor para archivos por lotes):
Explicación rápida de los parámetros:
Hay una completa referencia para la desinstalación de MSI aquí (varias formas diferentes de desinstalar paquetes MSI): https://stackoverflow.com/questions/450027/uninstalling-an-msi-file-from-the-command-line-without-using-msiexec/1055933#1055933. Hay una plétora de diferentes maneras de desinstalar. *Si está escribiendo un archivo por lotes, por favor, eche un vistazo a la sección 3 de la respuesta anterior, enlazada, para algunas variantes de línea de comandos de desinstalación comunes y estándar. Y un enlace rápido a msiexec.exe (opciones de línea de comandos) (resumen de la línea de comandos para msiexec.exe de MSDN). Y también la versión de Technet.
Recuperación de otras propiedades / información del MSI (por ejemplo, el código de actualización)
Aquí hay un artículo similar con algunas opciones más para recuperar la información del MSI usando el registro o el msi en caché: https://stackoverflow.com/questions/11251034/find-guid-from-msi-file?
Temas similares (para referencia y fácil acceso - debería limpiar esta lista):
Si usted tiene demasiados instaladores para encontrar lo que está buscando fácilmente, aquí es un poco de powershell para proporcionar un filtro y reducir un poco por el nombre de la pantalla.