msi instalar force desde .net command-line installation windows-installer msiexec

.net - force - Desinstalar un archivo MSI de la línea de comando sin usar msiexec



msiexec force uninstall (7)

msiexec es un software de símbolo del sistema que instala un programa MSI . Pero descubrí que puede instalar un archivo MSI desde la línea de comandos simplemente escribiendo el nombre del archivo MSI en la línea de comando.

Pero para desinstalar el archivo MSI, parece que tiene que llamar al programa msiexec y darle una /x /uninstall .

¿Cómo puedo desinstalar una MSI desde la línea de comandos sin usar la rutina msiexec ?


Intentaría la siguiente sintaxis: me funciona.

msiexec /x filename.msi /q


La extensión del archivo msi está asignada a msiexec (de la misma manera al escribir un nombre de archivo .txt en un símbolo del sistema, se inicia el Bloc de notas / controlador de archivo .txt predeterminado para mostrar el archivo).

Por lo tanto, escribir un nombre de archivo con una extensión .msi realmente ejecuta msiexec con el archivo MSI como argumento y toma la acción predeterminada, instalar. Por esa razón, la desinstalación requiere que invoque msiexec con el interruptor de desinstalación para desinstalarlo.


Recuerde también que una desinstalación puede iniciarse utilizando el comando WMIC:

wmic product get name -> Esto listará los nombres de todas las aplicaciones instaladas

wmic product where name=''myappsname'' call uninstall -> esto desinstalará la aplicación.


Respuesta corta: no puedes. Use MSIEXEC / x

Respuesta larga: cuando ejecuta el archivo MSI directamente en la línea de comandos, todo lo que sucede es que ejecuta MSIEXEC por usted. Esta asociación se almacena en el registro. Puede ver una lista de asociaciones por (en el Explorador de Windows) yendo a Herramientas / Opciones de carpeta / Tipos de archivo.

Por ejemplo, puede ejecutar un archivo .DOC desde la línea de comandos, y WordPad o WinWord lo abrirán por usted.

Si busca en el registro bajo HKEY_CLASSES_ROOT/.msi , verá que los archivos .MSI están asociados con el ProgID "Msi.Package". Si busca en HKEY_CLASSES_ROOT/Msi.Package/shell/Open/command , verá la línea de comando que Windows realmente usa cuando "ejecuta" un archivo .MSI.


Supongo que cuando escribe int file.msi en la línea de comando, Windows llama automáticamente a msiexec file.msi por usted. Estoy asumiendo esto porque cuando escribes picture.png aparece el visor de imágenes predeterminado.


Hay muchas formas de desinstalar un paquete MSI. Esto es una "referencia".

En resumen , puede desinstalar a través de: msiexec.exe , ARP , WMI , PowerShell , sistemas de implementación como SCCM , VBScript / COM Automation, DTF , o mediante la carpeta oculta de caché de Windows , y algunas otras opciones que se presentan a continuación.

Los primeros párrafos proporcionan datos importantes de MSI, luego hay 14 secciones con diferentes formas de desinstalar un archivo MSI. Puh.

Las secciones 1 , 2 y 3 son los enfoques de desinstalación normales (y, por lo tanto, se recomiendan). Personalmente utilizo la opción 3 o 5 de la sección 3 (ambas opciones con el registro, pero la opción 5 también se ejecuta silenciosamente). Si está muy ocupado , omita todo el balbuceo y elija uno de estos: hará el trabajo.

Si tiene problemas para desinstalar por completo y está buscando una alternativa a la obsoleta MsiZap.exe y / o la herramienta de limpieza de Windows Installer ( MSICUU2.exe ), puede probar la nueva herramienta FixIt de Microsoft ( o la página internacional ). Al parecer, también puede funcionar para otros problemas de instalación.

Si crees que MSI y Windows Installer son más problemáticos de lo que valen, tal vez quieras leer sobre los beneficios corporativos de usar archivos MSI .

Las configuraciones de MSI de Installscript generalmente vienen envueltas en un archivo setup.exe . Para obtener más información sobre los parámetros que se deben utilizar para desinstalar tales configuraciones, consulte estos enlaces: hoja de referencia de pdf de setup.exe , parámetros de línea de comandos Setup.exe y Update.exe .

Algunos archivos MSI se instalan como parte de paquetes a través de un mecanismo como Burn (WiX Toolkit) o ​​proyectos de InstallShield Suite . Esto puede hacer que la desinstalación sea ligeramente diferente de lo que se ve a continuación. Aquí hay un ejemplo para los proyectos de InstallShield Suite .

Tenga en cuenta que ejecutar la desinstalación silenciosa o interactivamente puede causar resultados diferentes (!) . Para una descripción bastante larga de por qué es este el caso, lea esta publicación: Desinstalar desde el Panel de control es diferente de Eliminar desde .msi

Si inesperadamente se le solicita el medio de instalación original al intentar la desinstalación, lea esta respuesta: ¿Por qué MSI requiere el archivo .msi original para proceder con la desinstalación? y quizás también la sección 12 a continuación para algunos detalles técnicos importantes.

Si tiene instaladas CCleaner o herramientas de limpieza similares, tal vez pase a la sección 11 .

Si la desinstalación falla completamente (no es posible ejecutarla), consulte las secciones 12 y 13 a continuación para conocer una posible forma de " deshacer " la instalación utilizando las herramientas de restauración y / o limpieza del sistema.

1. Usando el MSI original

  • Si tiene acceso al MSI original utilizado para la instalación, puede simplemente hacer clic con el botón derecho en Windows Explorer y seleccionar Desinstalar .
  • También puede desinstalarlo a través de la línea de comandos como se explica en la sección 3.

2. Usando el applet ARP (Agregar / Quitar Programas)

  • Solo tengo que mencionar el enfoque normal, aunque es obvio
  • Ir a inicio ejecutar appwiz.cpl INTRO para abrir el subprograma de agregar / eliminar programas (o hacer clic en agregar / quitar programas en el panel de control)
  • Haga clic en " Eliminar " para el producto que desea desinstalar.

3. Uso de la línea de comando de msiexec.exe (directamente oa través de un archivo por lotes)

  • Puede desinstalarlo mediante el símbolo del sistema ( cmd.exe ), el archivo por lotes e incluso desde un ejecutable como una operación de shell .
  • Para ello, pase el GUID del producto (consulte a continuación la forma de encontrar este GUID ) o la ruta al archivo MSI original, si está disponible, a msiexec.exe .
  • Para todas las líneas de comando a continuación, puede agregar /qn para que la desinstalación se ejecute en modo silencioso . Así es como se ejecuta una desinstalación cuando se activa desde el applet add / remove.

    • Opción 1: desinstalación interactiva básica (acceso al archivo MSI original):

      msiexec.exe /x "c:/filename.msi"

    • Opción 2: Desinstalación básica interactiva a través del GUID del producto (sin acceso al archivo MSI original; a continuación se explica cómo encontrar el GUID del producto , el mismo enlace que se muestra a continuación):

      msiexec.exe /x {11111111-1111-1111-1111-11111111111X}

    • Opción 3: desinstalación interactiva con archivo de registro detallado :

      msiexec.exe /x "c:/filename.msi" /L*V "C:/msilog.log" msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V "C:/msilog.log"

    • Opción 4: desinstalación interactiva con el archivo de registro detallado y enjuagado ( detallado, al ras para registrar la opción - escribir registro continuamente, puede ser muy lento):

      msiexec.exe /x "c:/filename.msi" /L*V! "C:/msilog.log" msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /L*V! "C:/msilog.log"

      • La opción flush to log hace que la desinstalación sea lenta porque el archivo de registro se escribe continuamente en lugar de en lotes. Esto garantiza que no se pierda el búfer de registro si la configuración falla.

      • En otras palabras, habilite esta opción si su configuración falla y no hay información útil en su archivo de registro detallado . Elimine el signo de admiración para desactivar la opción de ir al registro y la desinstalación será mucho más rápida. Aún obtienes un registro detallado, pero como se indicó, se podría perder algo del buffer de registro.

    • Opción 5 (recomendada): desinstalación silenciosa con archivo de registro detallado - suprimir los reinicios (no al rojo para iniciar sesión - ver la opción anterior para lo que esto significa):

      msiexec.exe /x "c:/filename.msi" /QN /L*V "C:/msilog.log" REBOOT=R msiexec.exe /x {11111111-1111-1111-1111-11111111111X} /QN /L*V "C:/msilog.log" REBOOT=R

      Explicación rápida de parámetros (ya que recomiendo esta opción):

      /X = run uninstall sequence /QN = run completely silently /L*V "C:/msilog.log"= verbose logging at path specified {11111111-1111-1111-1111-11111111111X} = product guid of app to uninstall REBOOT=R = prevent unexpected reboot of computer

      Nuevamente, cómo encontrar el guid del producto: ¿Cómo puedo encontrar el GUID del producto de una instalación de MSI instalada? (para la desinstalación, si no tiene el MSI original para especificar en el comando de desinstalación).

  • Sugerencia : si crea un archivo de registro para su desinstalación, puede encontrar problemas en el registro buscando "valor 3" . Esto es particularmente útil para los archivos detallados, porque son así, bueno, prolijo :-).

  • ¿Cómo encontrar el GUID de producto para una MSI instalada ?

  • Más información sobre cómo iniciar sesión desde installsite.org : ¿Cómo creo un archivo de registro de mi instalación ? - descripción general de diferentes opciones y también detalles del registro de InstallShield.

  • Msiexec (opciones de línea de comandos) : descripción general de la línea de comandos para msiexec.exe de MSDN . Aquí está la versión de Technet .

4. Uso de la base de datos MSI en caché en la carpeta de caché super oculta

  • MSI elimina todas las cabinas (versiones anteriores de Windows) y almacena en caché cada MSI instalado en una carpeta del sistema supercubierta en % SystemRoot% / Installer (debe mostrar los archivos ocultos para verla).
  • NB : Esta carpeta supper oculta ahora se trata de manera diferente en Windows 7 en adelante. Los archivos MSI ahora están en caché de tamaño completo . Lea el hilo enlazado para obtener más detalles: la lectura recomendada para cualquiera que encuentre esta respuesta y toque la peligrosa configuración de Windows.
  • Todos los archivos MSI aquí tendrán un nombre aleatorio (formato hexadecimal) asignado, pero puede obtener información sobre cada MSI mostrando la barra de estado del Explorador de Windows (Ver -> Barra de estado) y luego seleccionando un MSI. La secuencia de resumen del MSI será visible en la parte inferior de la ventana del Explorador de Windows. O, como señala Christopher Galpin, active la columna "Comentarios" en el Explorador de Windows y seleccione el archivo MSI ( consulte este artículo para saber cómo hacerlo ).
  • Una vez que encuentre el MSI correcto, simplemente haga clic derecho y vaya a Desinstalar.
  • También puede usar PowerShell para mostrar la ruta completa al paquete en caché local junto con el nombre del producto. Esta es la opción más fácil en mi opinión.
  • Para encender PowerShell : mantenga presionada la tecla de Windows, toque R, suelte la tecla de Windows, escriba "powershell" y presione OK . A continuación, maximice la ventana de PowerShell y ejecute el siguiente comando:

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

5. Usando PowerShell

6. Uso de .NET DTF Class Library (parte del kit de herramientas de WiX )

using Microsoft.Deployment.WindowsInstaller; public static void Uninstall( string productCode) { Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=/"R/""); }

7. Uso de la API de automatización de Windows Installer

8. Uso de una actualización importante de Windows Installer

  • Una actualización importante de Windows Installer puede suceder como parte de la instalación de otro archivo MSI.
  • Se crea una actualización importante mediante la identificación de productos relacionados en la " tabla de actualización " de MSI. Estas configuraciones relacionadas se manejan como se especifica en la tabla. En general, eso significa que están desinstalados, pero la configuración principal también se puede cancelar (en general, se usa para detectar versiones superiores de su propia aplicación presente en la caja).

9. Uso de un sistema de implementación avanzado / Sistema de administración remota

  • SCCM , CA Unicenter , Tivoli de IBM , Altiris Client Management Suite, y varios otros
  • Estas herramientas cuentan con administración avanzada de PC cliente, y esto incluye la instalación y desinstalación de archivos MSI
  • Estas herramientas parecen usar una combinación de msiexec.exe, automatización, WMI , etc. ... e incluso su propia forma de invocar instalaciones y desinstalaciones.
  • En mi experiencia, estas herramientas tienen mucha "personalidad" y necesitas adaptarte a sus diferentes formas de hacer las cosas.

10. Uso de WMI - Instrumental de administración de Windows

11. Usar una herramienta de terceros como ccleaner o similar

  • Varias aplicaciones de Windows presentan su propia interfaz para desinstalar no solo los paquetes MSI, sino también los instaladores heredados.
  • No quiero hacer recomendaciones de herramientas específicas aquí (especialmente las comerciales), pero el conocido ccleaner presenta una interfaz de desinstalación (y tiene una versión gratuita). También debo agregar que esta herramienta sufrió un ataque de malware recientemente .
  • Creo que todos debemos recordar que incluso el software inofensivo puede ser inyectado con malware en sus ubicaciones de descarga (ataque FTP).
    • Utilizo virustotal.com para verificar mis descargas, y también Sysinternals Process Explorer para verificar los procesos en ejecución después de la instalación, junto con el software de seguridad habitual (lo que esté disponible).
    • Una cantidad sorprendente de software de "área gris" generalmente se encuentra con este enfoque (barras de herramientas, emoticonos, adware, etc.), junto con varios falsos positivos (también pueden causar problemas a medida que el software de seguridad bloquea su acceso o los pone en cuarentena creando un mucha fuzz). Y ciertamente también malware real.
    • Algunos consejos de uso para Process Explorer se pueden encontrar aquí : una serie de tweets: esta herramienta de Process Explorer se conecta a VirusTotal.com para verificar todos los procesos en ejecución de manera interactiva; todo lo que necesita son algunos pasos de configuración.
    • Debo señalar que Process Explorer produce una comprobación de firma de archivo, pero no heurística, por lo que yo entiendo (no hay verificación de operaciones sospechosas, solo un control con más de 60 suites de seguridad para archivos marcados). Necesita una herramienta de seguridad periódica para la protección heurística interactiva en línea.
    • Por lo que vale, creo que algunos softwares de seguridad limitan con causar más problemas falsos positivos que el malware. Famosas últimas palabras en la era del rescate-ware ...
    • Esa es una digresión lo suficientemente grande: simplemente no quiero que la gente descargue malware. Haga su comprobación de virustotal.com al menos.
  • Desinstalar así debería funcionar bien. Sin embargo, creo que estas herramientas se mezclan con demasiadas cosas cuando pruebas sus "características de limpieza". Usar con precaución. Si solo usa la función de desinstalación, debería estar bien.

12. Usando una herramienta de limpieza como msizap o similar

  • Por completitud msizap.exe debe mencionarse a pesar de que está en desuso , sin soporte y desactualizado . No debería usarse en ninguna versión de Windows más nueva
  • Esta herramienta de línea de comando ( msizap.exe ) también tenía una GUI disponible ( MSICUU2.exe ) Ambas herramientas son depreciadas.
  • El uso previsto de estas herramientas era eliminar las desinstalaciones fallidas :
    • En general, en el caso raro en el que falle erróneamente la MSI en caché con el nombre aleatorio y la desinstalación falla por este motivo al solicitar la MSI original
      • Este es un problema raro, pero lo he visto yo mismo. Algunas de las posibles causas:
        • ¿Interferencia con la restauración del sistema ? ¿La restauración de una imagen previa del sistema borra accidentalmente un archivo MSI en caché?
        • ¿Las aplicaciones de limpieza mal diseñadas borran lo que no deberían?
        • ¿Problemas de diseño de MSI o un bloqueo en msiexec.exe hacia el final de la instalación durante el registro del producto final? Me resulta poco probable ya que el almacenamiento en caché se realiza antes de iniciar la instalación, pero he visto problemas como este al desarrollar archivos MSI.
        • ¿Un apagón repentino ? También algo improbable debido a la protección incorporada en Windows Installer, pero la pérdida repentina de energía siempre puede causar resultados inesperados.
        • ¿Antivirus u otro software de seguridad eliminando o bloqueando el acceso al archivo MSI en caché?
        • Si está desarrollando un MSI y mantiene la prueba de reinstalación, puede desencadenar este problema reutilizando el mismo código de paquete entre compilaciones (MSI trata diferentes archivos MSI como el mismo archivo por definición si el código del paquete es el mismo, todo tipo de problemas extraños resultan) . Este es un caso muy especial que generalmente solo se ve en computadoras usadas para desarrollo o QA.
        • El usuario o administrador elimina manualmente los archivos MSI de la carpeta de caché para guardar o crear espacio en disco disponible o simplemente para modificar la configuración de Windows. La carpeta está "súper escondida" y es difícil de acceder, pero aún es posible encontrarla y eliminar archivos de ella.
        • Sin duda, hay otras causas posibles, pero la lista ya es demasiado larga y voluminosa.
    • También para otros tipos de desinstalaciones fallidas
    • También podría usarse para borrar cualquier instalación de MSI, aunque obviamente no es aconsejable.
    • Más información: ¿Por qué MSI requiere el archivo .msi original para proceder con una desinstalación?
  • Esta nueva herramienta de soporte (esta herramienta ahora también está en desuso) puede probarse en versiones recientes de Windows si tiene paquetes MSI desaparecidos que necesitan desinstalación.
  • Algunos han sugerido utilizar la herramienta vinculada aquí por saschabeaumont: Desinstalar sin un archivo MSI . Si lo prueba y funciona, asegúrese de informarnos.
  • Si tiene acceso al MSI original que en realidad se utilizó para instalar el producto, puede usarlo para ejecutar la desinstalación. Debe ser el MSI exacto que se usó, y no solo uno similar.

13. Usando la restauración del sistema ("instalación deshacer" - último recurso en mi humilde opinión)

  • Esto estrictamente hablando no es una forma de " desinstalar ", sino de " deshacer " la última instalación, o varias instalaciones para el caso.
  • La restauración a través de un punto de restauración devuelve al sistema a un estado de instalación anterior (puede encontrar demostraciones de video de esto en YouTube o en un sitio similar).
  • Tenga en cuenta que la función se puede desactivar total o parcialmente: es posible desactivarla de forma permanente para toda la máquina, o bien por instalación.
  • He visto nuevos problemas de instalación insolubles como resultado de una restauración del sistema, pero normalmente funciona bien . Obviamente no utilices la función por diversión. Es el último recurso y se utiliza mejor para deshacer los nuevos controladores o configuraciones que se acaban de instalar y que causan problemas inmediatos ( bluescreen , reinicios, inestabilidad, etc.).
  • Mientras más tiempo retroceda, más retrabajo lo creará usted mismo, y mayor será el riesgo. La mayoría de los sistemas cuentan con solo unos pocos puntos de restauración, y la mayoría de ellos se remontan a un mes o dos, creo.
  • Tenga en cuenta que la restauración del sistema puede afectar las Actualizaciones de Windows que luego deben volver a aplicarse, así como muchas otras configuraciones del sistema. Más allá de las simples molestias, esto también puede ocasionar que resurjan los problemas de seguridad y es posible que desee ejecutar una comprobación de seguridad específica en el / los cuadro (s) de destino utilizando Microsoft Baseline Security Analyzer o herramientas similares.
  • Como mencioné la restauración del sistema, supongo que debería mencionar la función Última configuración conocida . Esta característica no tiene nada que ver con la desinstalación o la restauración del sistema, pero es la última configuración de arranque que funcionó o dio como resultado un sistema en ejecución. Se puede usar para que el sistema vuelva a funcionar si se apaga o se detiene durante el arranque. Esto sucede a menudo después de la instalación del controlador.

14. Funciones del instalador de Windows (C ++)

Para completar, supongo que deberíamos mencionar el núcleo de todo: la manera más sencilla de usar el metal: las funciones de la API Win32 Windows Installer . Estas son probablemente las funciones utilizadas por la mayoría, si no todos los otros enfoques enumerados anteriormente "debajo del capó". Se utilizan principalmente por aplicaciones o soluciones que tratan directamente con MSI como una tecnología.

Hay una respuesta en serverfault.com que puede ser de interés como resumen de los diferentes enfoques programáticos para desinstalar (funciones de instalación de COM Automation, .NET, Win32).

A continuación encontrará un fragmento de C ++ que muestra cómo desinstalar Orca, 10.1.15063.468 por código de producto mediante una llamada a la función MsiConfigureProductEx . Para desinstalar otro producto, reemplace el GUID especificado para prodcode por el de su producto. Para encontrar el código del producto, vea esta respuesta: ¿Cómo puedo encontrar el GUID del producto de una instalación de MSI instalada?

La desinstalación se realizará en modo GUI completo. Para ejecutar en modo silencioso o en algún otro modo de GUI (reducido, básico, etc.), consulte la función : MsiSetInternalUI .

#include "stdafx.h" // The below should really be in stdafx.h (precompiled header) #define WIN32_LEAN_AND_MEAN // Exclude stuff from Windows.h #include <windows.h> #include <msi.h> // Windows Installer #pragma comment(lib, "msi.lib") // To make code link int main() { const TCHAR noreboot[] = _T("REBOOT=ReallySuppress"); const TCHAR prodcode[39] = _T("{EC910170-2D07-6B84-9865-1719173EE261}"); // Orca, 10.1.15063.468 UINT res = MsiConfigureProductEx(prodcode, INSTALLLEVEL_DEFAULT, INSTALLSTATE_ABSENT, noreboot); return res; // Error Codes: https://msdn.microsoft.com/en-us/library/windows/desktop/aa376931(v=vs.85).aspx }

El fragmento fue creado y probado con Visual Studio 2017 :

  1. Cree una nueva "Aplicación de consola de Windows" desde Visual C ++ => Escritorio de Windows.
  2. Copie y pegue el código anterior en su archivo CPP principal (reemplazando lo que esté allí).
  3. Eso debería ser para poder ejecutar el código. Tal vez establecer un punto de interrupción, construir y ejecutar.


wmic product get name

Simplemente pone el cmd atascado ... sigue parpadeando _ después de un par de minutos

en HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Uninstall , si puede encontrar la carpeta con el nombre de software que está intentando instalar (no el nombre con ProductCode), UninstallString apunta al propio desinstalador de la aplicación C:/Program Files/Zune/ZuneSetup.exe /x