Saltar al contenido

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

Investigamos por el mundo online y así traerte la solución a tu inquietud, si continúas con inquietudes puedes dejarnos tu comentario y contestamos con gusto, porque estamos para servirte.

Para código de actualización recuperación:
¿Cómo puedo encontrar el código de actualización para un archivo MSI instalado?


Version corta

La siguiente información ha crecido considerablemente con el tiempo y es posible que se haya vuelto un poco demasiado elaborada. ¿Cómo obtener códigos de producto rápidamente? (cuatro enfoques):

1 – Use the Powershell "one-liner"

Desplácese hacia abajo para obtener una captura de pantalla y paso a paso. Descargo de responsabilidad también a continuación: riesgos menores o moderados según a quién le pregunte. Funciona bien para mí. Alguna autorreparación desencadenado por esta opción generalmente debería ser posible cancelar. los comprobaciones de integridad del paquete Sin embargo, la activación agrega algo de “ruido” en el registro de eventos. Nota! IdentifyingNumberes los ProductCode (Peculiaridad de WMI).

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

Inicio rápido de Powershell: sostener Ventanas key, grifo R, escribe “powershell” y presiona Ingresar

2 – Use VBScript (guión en github.com)

Descrito a continuación en “Herramientas alternativas “(sección 3). Esta opción puede ser mas seguro que Powershell por las razones que se explican en detalle a continuación. En esencia es (mucho) más rápido y no es capaz de activar la autorreparación de MSI ya que no pasa por WMI (accede directamente a la API COM de MSI, a una velocidad vertiginosa). Sin embargo, es más complicado que la opción Powershell (varias líneas de código).

3 – Registry Lookup

Algunos juran buscar cosas en el registro. No es mi enfoque recomendado: me gusta pasar por las API adecuadas (o en otras palabras: llamadas a funciones del sistema operativo). Siempre hay extrañas excepciones contabilizadas solo por los aspectos internos de la implementación de la API:

  • HKLMSOFTWAREMicrosoftWindowsCurrentVersionUninstall
  • HKLMSOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionUninstall
  • HKCUSoftwareMicrosoftWindowsCurrentVersionUninstall

4 – Original MSI File / WiX Source

Puedes encontrar el Product Code en el Property table de cualquier archivo MSI (y también de 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 coincidir con el GUID en el que está registrado el producto (los enfoques 1 y 2 anteriores informarán el código de producto real, que está registrado con Windows, en tal escenarios raros).

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

ACTUALIZAR: Por conveniencia y necesidad de la velocidad :-), descargue SuperOrca sin demora y sin problemas desde este enlace directo 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 busque el ProductCode hilera (por favor, siempre verifique los virus en un enlace directo de descarga directa, obviamente – puede usar virustotal.com para hacerlo – escaneo en línea utilizando docenas de conjuntos de antivirus y malware para escanear lo que carga).

Orca es la herramienta propia de Microsoft, se instala con Estudio visual y el SDK de Windows. Intenta buscar Orca-x86_en-us.msi – debajo
Program Files (x86) e instale el MSI si lo encuentra.

  • Trayectoria de corriente: C:Program Files (x86)Windows Kits10bin10.0.17763.0x86
  • Cambie los números de versión según corresponda

Y a continuación encontrará la respuesta original que “creció orgánicamente” con muchos detalles.

Quizás ver “Desinstalar paquetes MSI“sección siguiente si esta es la tarea que necesita realizar.


Recuperar códigos de producto

ACTUALIZAR: Si también necesita el código de actualización, revisa 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 una salida de tabla, similar a la que se muestra a continuación).

  • ¿No puede usar PowerShell? Consulte la sección “Herramientas alternativas” a continuación.
  • ¿Desea desinstalarlo? Consulte la sección “Desinstalar paquetes MSI” a continuación.

Quémalo Potencia Shell (mantenga presionadas las ventanas key, toque R, suelte Windows key, escribe “powershell” y presiona OK) y ejecute el siguiente comando para obtener una lista del paquete MSI instalado códigos de producto junto con 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 comando, lea el descargo de responsabilidad a continuación (nada peligroso, solo algunas molestias potenciales). La sección 3 en “Herramientas alternativas” muestra una forma alternativa que no es WMI para obtener la misma información usando VBScript. Si está intentando desinstalar un paquete, hay una sección a continuación con algunas líneas de comando msiexec.exe de muestra:

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

los producción debería ser similar a esto:

ingrese la descripción de la imagen aquí

¡Nota! Por alguna extraña razón el “Código de producto” es referido como “Número de identificación” en WMI. En otras palabras, en la imagen de arriba, IdentifyingNumber es el ProductCode.

Si lo necesitas ejecute esta consulta de forma remota en una gran cantidad de computadoras remotas, ver “Recuperar códigos de producto de una computadora remota“sección siguiente.

DESCARGO DE RESPONSABILIDAD (¡importante, lea antes de ejecutar el comando!): Debido al extraño diseño de Microsoft, cualquier llamada de WMI a Win32_Product
(como el comando de PowerShell a continuación) activará un validación de la propiedad del paquete. además de ser bastante lento, esto puede en casos raros desencadenar una autorreparación de MSI. Puede ser un paquete pequeño o algo enorme, como Visual Studio. En la mayoría de los casos, esto no sucede, pero existe un riesgo. No ejecute este comando justo antes de una reunión importante; nunca es peligroso (es de solo lectura), pero puede llevar a una reparación prolongada en casos muy raros. (Creo que también puede cancelar la autorreparación, a menos que el paquete en cuestión lo impida activamente, pero se reiniciará si vuelve a llamar a Win32_Product y esto persistirá hasta que deje que finalice la autorreparación; a veces, podría continuar incluso si deja que termine: ¿Cómo puedo determinar qué causa la autorreparación repetida de Windows Installer?).

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). Este es no directamente relacionado con el comando de Powershell sugerido anteriormente, está en el contexto del uso general de la clase WIM Win32_Product.

También puede obtener la salida en forma de lista (en lugar de tabla):

get-wmiobject -class Win32_Product

En este caso, la salida es similar a esta:

ingrese la descripción de la imagen aquí


Recuperar códigos de producto de una computadora remota

En teoría, debería poder especificar un nombre de computadora remota como parte del comando en sí. Aquí está el mismo comando que el anterior configurado para ejecutarse en la máquina “RemoteMachine” (-ComputerName RemoteMachine sección agregada):

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

Esto podría funcionar si está ejecutando con derechos de administrador de dominio en un dominio adecuado. En un entorno de grupo de trabajo (oficina pequeña / red doméstica), probablemente deba 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) firewall de Windows, Configuración de DCOM, y Control de cuentas de usuario (UAC) (más cualquier factor adicional que no sea de Microsoft, por ejemplo cortafuegos reales, firewalls de software de terceros, software de seguridad de varios tipos, etc …). Si funcionará o no depende de su configuración exacta.

  • Configuración de una conexión WMI remota
  • Conexión a WMI de forma remota con PowerShell

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? Parece que una regla de firewall y la supresión del indicador de UAC a través de un ajuste de registro puede hacer que las cosas funcionen en un entorno de red de grupo de trabajo. No se recomiendan cambios en cuanto a seguridad, pero funcionó para mí.


Herramientas alternativas

Potencia Shell requiere el .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 desde la máquina incluso si .NET está instalado. Finalmente creo que PowerShell puede ser inhabilitado 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 la creación de scripts siempre es un poco más complicada que el uso de herramientas).

  1. Empecemos con un herramienta WMI de Windows incorporada: wbemtest.exe.
  • Lanzamiento wbemtest.exe (Mantenga presionadas las ventanas key, toque R, suelte Windows key, escriba “wbemtest.exe” y presione Aceptar).
  • Hacer clic conectar y luego OK (el espacio de nombres predeterminado es root cimv2) y haga clic en “conectar” de nuevo.
  • Haga clic en “Consulta“y escribe esto Comando WQL (Sabor 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 agradable, pero puede obtener los datos que necesita. IdentifyingNumber es el código de producto MSI:

wbemtest.exe

  1. A continuación, puede probar una herramienta WMI personalizada y con más funciones, como WMIExplorer.exe
  • Esto no está incluido en Windows. Sin embargo, es una muy buena herramienta. Recomendado.
  • Compruébalo en: https://github.com/vinaypamnani/wmie2/releases
  • Inicie la herramienta, haga clic en Conectar, haga doble clic en ROOT CIMV2
  • Desde el “Pestaña de consulta“, escribe la siguiente consulta SELECT IdentifyingNumber,Name,Version FROM Win32_Product y presione Ejecutar.
  • Captura de pantalla omitida, la aplicación requiere demasiado espacio en la pantalla.
  1. Finalmente puedes probar un VBScript acceder a la información a través de la interfaz de automatización MSI (característica principal de Windows – es no relacionado 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 tener permisos de escritura para usted, o puede usar cualquier otra ubicación de escritura.
  • Este no es un gran VBScript. Se ha preferido la terquedad sobre el manejo de errores y la integridad, pero debería hacer el trabajo con una complejidad mínima.
  • El archivo de salida se crea en la carpeta desde donde ejecuta el script (la carpeta debe ser grabable). 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 una coma como delimitador en la importación – O – simplemente abra el archivo en el Bloc de notas o en cualquier visor de texto.
  • Abrir en una hoja de cálculo permitirá funciones de clasificación avanzadas.
  • Este script se puede adaptar fácilmente para mostrar una cantidad significativa de detalles adicionales sobre la instalación de MSI. Puede encontrar una demostración de esto aquí: cómo averiguar qué productos están instalados: los productos más nuevos ya están instalados en Windows MSI.
' 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 ninguna otra opción de propósito general para recuperar códigos de producto en este momento, agregue si conoce alguna. Solo edita en línea 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 a las funciones del instalador MSI de C ++ (API Win32). O incluso use consultas WMI desde su aplicación como lo hace en los ejemplos anteriores usando PowerShell, wbemtest.exe o WMIExplorer.exe.


Desinstalar paquetes MSI

Si lo que quieres hacer es desinstalar el paquete MSI para el que encontró el código de producto, puede hacer esto de la siguiente manera usando un símbolo del sistema elevado (buscar cmd.exe, haga clic derecho y ejecutar como administrador):

Opción 1: Desinstalación básica e interactiva sin registro (Rapido y Facil):

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

Explicación rápida de parámetros:

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

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

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

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

Explicación rápida de parámetros:

/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 un referencia completa para la desinstalación de MSI aquí (varias formas diferentes de desinstalar paquetes MSI): Desinstalar un archivo MSI desde la línea de comandos sin usar msiexec. Hay una gran cantidad de formas diferentes de desinstalar.

Si está escribiendo un archivo por lotes, eche un vistazo a la sección 3 en la respuesta vinculada anterior para conocer 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 comando) (descripción general de la línea de comandos para msiexec.exe desde MSDN). Y la versión de Technet así como.


Recuperación de otras propiedades / información de MSI (código de actualización p. Ej.)

ACTUALIZAR: por favor encuentra 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 archivos MSI. Para los paquetes instalados, esto es mucho más confiable. Si el paquete no está instalado, aún debe buscar en el archivo MSI (o el archivo fuente utilizado para compilar el MSI) para encontrar el código de actualización. Dejando en la sección anterior a continuación:

Si quieres conseguir el UpgradeCode o otras propiedades de MSI, puede abrir el MSI de instalación en caché para el producto desde la ubicación especificada por “LocalPackage“en la imagen que se muestra arriba (algo como: C:WINDOWSInstaller50c080ae.msi – es un nombre de archivo hexadecimal, único en cada sistema). Entonces miras en el “Tabla de propiedades“para UpgradeCode (es posible que UpgradeCode sea redefinido en una transformación – para asegurarse de obtener el valor correcto que necesita para recuperar el código programáticamente del sistema – proporcionaré un script para esto en breve. Sin embargo, el UpgradeCode que se encuentra en el MSI en caché es generalmente correcto).

Para abrir los archivos MSI en caché, use 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, Advanced Installer, etc. Si no tiene instalada una herramienta de este tipo, su apuesta más rápida podría ser probar Super Orca (es fácil de usar, pero no lo he probado exhaustivamente).

ACTUALIZAR: 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 Visual Studio instalado, intenta buscar Orca-x86_en-us.msi – debajo Program Files (x86) – e instálelo (este es el visor y editor oficial de MSI de Microsoft). Luego busque Orca en el menú de inicio. Pasa el tiempo en poco tiempo :-). Técnicamente, Orca se instala como parte del SDK de Windows (no de Visual Studio), pero el SDK de Windows se incluye con la instalación de Visual Studio. Si no tiene instalado Visual Studio, tal vez conoces a alguien que lo haga? Solo pídales que busquen este MSI y que se lo envíen (es un archivo diminuto de medio mb); debería llevarles unos segundos. ACTUALIZAR: necesita varios archivos CAB además del MSI; estos se encuentran en la misma carpeta donde se encuentra el MSI. Si no es así, siempre puede descargar el SDK de Windows (es gratis, pero es grande, y todo lo que instale ralentizará su PC). No estoy seguro de qué parte del SDK instala Orca MSI. Si es así, edite y agregue detalles aquí.


  • Aquí hay un artículo más completo sobre el problema de la desinstalación de MSI: Desinstalación de un archivo MSI desde la línea de comandos sin usar msiexec
  • Aquí hay un artículo similar con algunas opciones más para recuperar información de MSI utilizando el registro o el msi en caché: Buscar GUID desde el archivo MSI

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

  • Cómo encontrar el UpgradeCode y ProductCode de una aplicación instalada en Windows 7
  • ¿Cómo puedo encontrar el código de actualización para una aplicación instalada en C #?
  • Wix: cómo desinstalar la aplicación instalada previamente que está instalada usando un instalador diferente
  • WiX: realizar una actualización importante en una instalación de varias instancias
  • cómo averiguar qué productos están instalados: los productos más nuevos ya están instalados en Windows MSI (usando VBScript)
  • Cómo desinstalar con msiexec usando el ID de producto guid sin el archivo .msi presente
  • Buscar GUID del paquete MSI

Si tiene demasiados instaladores para encontrar lo que está buscando fácilmente, aquí hay algunos PowerShell para proporcionar un filtro y reducirlo un poco por nombre para mostrar.

$filter = "*core*sdk*"; (Get-ChildItem HKLM:SOFTWAREMicrosoftWindowsCurrentVersionUninstall).Name | %  $path = "Registry::$_"; Get-ItemProperty $path  | Where-Object  $_.DisplayName -like $filter  | Select-Object -Property DisplayName, PsChildName

Calificaciones y reseñas

Tienes la opción de patrocinar nuestra labor mostrando un comentario o valorándolo te lo agradecemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *