Pregunta

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

Pero para desinstalar el archivo MSI, parece que tienes que llamar al msiexec programa y dale un /x o /uninstall.

¿Cómo puedo desinstalar un MSI desde la línea de comando sin usar el msiexec ¿rutina?

¿Fue útil?

Solución

Respuesta corta: no puedes. Use MSIEXEC / x

Respuesta larga: cuando ejecuta el archivo MSI directamente en la línea de comando, todo lo que sucede es que ejecuta MSIEXEC por usted. Esta asociación se almacena en el registro. Puede ver una lista de asociaciones (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 en HKEY_CLASSES_ROOT\.msi, verá que los archivos .MSI están asociados con el ProgID " Msi.Package " ;. Si mira en HKEY_CLASSES_ROOT\Msi.Package\shell\Open\command, verá la línea de comando que Windows realmente usa cuando & Quot; ejecuta & Quot; un archivo .MSI.

Otros consejos

  

Hay muchas formas de desinstalar un paquete MSI. Esto está pensado como un "reference".

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 carpeta oculta de caché de Windows , y algunas otras opciones que se presentan a continuación.

Los primeros párrafos proporcionan información importante sobre MSI, luego hay 14 secciones con diferentes formas de desinstalar un archivo MSI. Puh.

  

" Balbuceo, balbuceo - Over " ;: Secciones 1 , 2 y 3 son los enfoques de desinstalación normales (y, por lo tanto, se recomiendan). Personally I use option 3 or 5 from section 3 (ambas opciones con registro, pero la opción 5 se ejecuta en silencio   también). Si está muy ocupado , omita todos los balbuceos y busque 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 Utilidad de limpieza de Windows Installer ( MSICUU2.exe ), puedes probar el nuevo Herramienta FixIt de Microsoft ( o la página internacional ). Al parecer, también puede funcionar para otros problemas de instalación.


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


Las configuraciones

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


Algunos archivos MSI se instalan como parte de paquetes a través de mecanismos como Grabar (Kit de herramientas WiX) o Proyectos 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 en silencio o de forma interactiva puede causar resultados diferentes (!) . Para obtener una descripción bastante extensa de por qué este es el caso, lea esta publicación: Desinstalar del Panel de control es diferente de Eliminar de .msi


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


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


Si la desinstalación falla por completo (no es posible ejecutarla), consulte las secciones 12 & amp; 13 a continuación para una forma potencial de & Quot; deshacer & Quot; la instalación utilizando restauración del sistema y / o herramientas de limpieza.


1. Using the original MSI

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

2. Using the old ARP Applet OR new Windows 8/10 Settings Interface

  • Solo tengo que mencionar los enfoques normales, aunque es obvio

    • ARP = Add / Remove Programs Applet ( appwiz.cpl )
    • Windows 10 Settings Interface = > Nuevo shell para la misma operación
  • ARP :

    • Ir iniciar & # 8594; ejecutar & # 8594; appwiz .cpl & # 8594; ENTER para abrir el applet de agregar / quitar programas (o haga clic en agregar / quitar programas en el panel de control)
    • Haga clic en " Eliminar " para el producto que desea desinstalar
  • Interfaz de configuración (Windows 8/10):

    • Use la nueva GUI de configuración en Windows 8/10
    • Tecla de Windows + Toque I = > Apps & Features . Seleccione la entrada y desinstale.
    • Algunos informes de errores al invocar la desinstalación de esta manera. Por favor, agregue comentarios a continuación si se ve.

3. Using msiexec.exe command line (directly or via a batch file)

  • Puede desinstalar a través del símbolo del sistema ( cmd.exe ), archivo por lotes o incluso desde un archivo ejecutable como operación de shell .
  • Para ello, pase el GUID del producto (consulte a continuación cómo encontrar esto 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 a hacer que la desinstalación se ejecute en modo silencioso . Así es como se ejecuta una desinstalación cuando se activa desde el applet de agregar / quitar.

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

       msiexec.exe /x "c:\filename.msi"
      
    • Opción 2: desinstalación interactiva básica a través del GUID del producto (sin acceso al archivo MSI original - aquí se explica cómo encontrar el GUID del producto - mismo enlace que a continuación):

       msiexec.exe /x {11111111-1111-1111-1111-11111111111X}
      
    • Opción 3: desinstalación interactiva con un 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 archivo de registro detallado y enjuagado ( opción detallada, enjuagar para registrar - escribir el 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 descarga para iniciar sesiónla opción 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 exclamación para desactivar la opción de descarga para iniciar sesión y la desinstalación será mucho más rápida. Todavía obtiene un registro detallado, pero como se indicó, se podría perder algo de búfer de registro.

    • Opción 5 (recomendada): desinstalación silenciosa con archivo de registro detallado - suprima los reinicios (sin descarga para iniciar sesión; vea la opción anterior para saber qué significa esto):

       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 la guía del producto: ¿Cómo puedo encontrar el producto? GUID de una configuración de MSI instalada? (para desinstalar si no tiene el MSI original para especificar en el comando de desinstalación).

  • Sugerencias : si crea un archivo de registro para su desinstalación, puede localizar los problemas en el registro buscando & Quot; valor 3 & Quot; . Esto es particularmente útil para archivos detallados, porque son muy, bien, detallados :-).

  • ¿Cómo encontrar el GUID del producto para un MSI instalado?

  • Más información sobre el registro desde installsite.org : ¿Cómo creo un archivo de registro de mi instalación ? : excelente descripción de las 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. Using the cached MSI database in the super hidden cache folder

  • MSI elimina todas las cabinas (versiones anteriores de Windows) y almacena en caché cada MSI instalado en una carpeta del sistema súper oculta en % SystemRoot% \ Installer (debe mostrar los archivos ocultos para verlo).
  • NB : esta carpeta oculta para la cena ahora se trata de manera diferente en Windows & nbsp; 7 en adelante. Los archivos MSI ahora se almacenan en caché a tamaño completo . Lea el hilo vinculado para obtener más detalles: lectura recomendada para cualquiera que encuentre esta respuesta y juegue con las configuraciones peligrosas 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 estará visible en la parte inferior de la ventana del Explorador de Windows. O como señala Christopher Galpin, encienda el & Quot; Comentarios & Quot; columna en el Explorador de Windows y seleccione el archivo MSI ( vea 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 almacenado en caché local junto con el nombre del producto. Esta es la opción más fácil en mi opinión.
  • Para activar PowerShell : mantenga presionada la tecla de Windows, toque R, suelte la tecla de Windows, escriba " powershell " y presione OK . Luego, maximice la ventana de PowerShell y ejecute el siguiente comando:
    get-wmiobject Win32_Product | Format-Table Name, LocalPackage -AutoSize

Ingrese la descripción de la imagen aquí


5. Using PowerShell


6. Using the .NET DTF Class Library (parte de el kit de herramientas WiX )

    using Microsoft.Deployment.WindowsInstaller;

    public static void Uninstall( string productCode)
    {
      Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=\"R\"");
    }

7. Using the Windows Installer Automation API


8. Using a Windows Installer major upgrade

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

9. Using Deployment Systems / Remote Administration Systems

  • 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 uninstalls.
  • En mi experiencia, estas herramientas presentan una gran cantidad de " personalidad " y necesita adaptarse a sus diferentes formas de hacer las cosas.

10. Using WMI - Windows Management Instrumentation


11. Using a third-party tool such as ccleaner or similar

  • Varias aplicaciones de Windows cuentan con su propia interfaz para desinstalar no solo los paquetes de MSI, sino también los instaladores heredados.
  • No quiero hacer ninguna recomendación específica de herramientas aquí (especialmente las comerciales), pero la conocida CCleaner presenta una interfaz de desinstalación de este tipo (y tiene una versión gratuita). También debo agregar que esta herramienta sufrió un ataque de malware recientemente .
  • Creo que todos deberíamos 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 la seguridad regular software (el que esté disponible).
    • Una sorprendente cantidad de & "; área gris &"; El software generalmente se encuentra con este enfoque (barras de herramientas, emoticonos, adware, etc.), junto con varios falsos positivos (también pueden causar problemas ya que el software de seguridad bloquea su acceso o los pone en cuarentena haciendo mucha confusión). Y ciertamente también malware real.
    • Puede encontrar algunos consejos de uso para Process Explorer aquí - una serie de tweets - esto La herramienta Process Explorer se conecta a VirusTotal.com para verificar todos los procesos en ejecución de forma interactiva; todo lo que necesita son unos pocos pasos de configuración .
    • Debo tener en cuenta que Process Explorer produce una verificación de firma de archivo, pero no heurística, por lo que yo entiendo (sin verificación de operaciones sospechosas, solo una verificación con más de 60 suites de seguridad para archivos marcados). Necesita una herramienta de seguridad regular para la protección heurística interactiva en línea.ection.
    • Por lo que vale, creo que algunos programas de seguridad rayan en causar más problemas falsos positivos que el malware daña. Últimas palabras famosas en la era del rescate ...
    • Esa es una digresión lo suficientemente grande: simplemente no quiero ver a la gente descargar malware. Realice su virustotal.com al menos.
  • Desinstalar así debería funcionar bien. Creo que estas herramientas se meten con demasiadas cosas cuando pruebas sus & Quot; características de limpieza & Quot; aunque. Usar con precaución. Si solo usa la función de desinstalación, debería estar bien.

12. Using a cleanup tool such as msizap system restore

  • Para completar, msizap.exe debe mencionarse aunque esté en desuso , no compatible y desactualizado . No debe usarse en ninguna versión más reciente de Windows
  • Esta herramienta de línea de comando ( msizap.exe ) también tenía una GUI disponible ( MSICUU2.exe ). Ambas herramientas son obsoletas.
  • El uso previsto de estas herramientas era limpiar las desinstalaciones fallidas :
  • Generalmente para el caso poco frecuente cuando el MSI en caché con el nombre aleatorio falta por error y la desinstalación falla por este motivo al solicitar el MSI original. Este es un problema raro, pero lo he visto yo mismo. Solo algunas posibles causas: Se movió a esta respuesta .
    • Palabras clave: interferencia de restauración del sistema, malas aplicaciones de limpieza, bloqueo de msiexec.exe, corte de energía, interferencia de software de seguridad, errores de depuración de desarrollo de MSI (códigos de paquete idénticos, etc.), retoques y pirateo del usuario (lo que está aquí) ? ahorrar espacio?), etc ...
    • También podría usarse para eliminar cualquier instalación de MSI, aunque eso obviamente no es aconsejable.
    • Más información: ¿Por qué MSI requiere el archivo .msi original para continuar con la desinstalación?
  • Esta nueva herramienta de soporte (esta herramienta ahora también está en desuso) puede probarse en versiones recientes de Windows si ha desactivado los paquetes de MSI 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 realmente se usó para instalar el producto, puede usarlo para ejecutar la desinstalación. Debe ser el MSI exacto que se utilizó, y no solo uno similar.

13. ("installation undo" - last resort IMHO) Windows Installer Functions (C++) Orca, 10.1.17134.12

  • Esto estrictamente hablando no es una forma de " desinstalar " pero para " deshacer " la última instalación, o varias instalaciones para el caso.
  • La restauración a través de un punto de restauración devuelve el sistema a un estado de instalación anterior (puede encontrar demostraciones en video de esto en YouTube o en un sitio similar).
  • Tenga en cuenta que la función se puede deshabilitar total o parcialmente; es posible deshabilitarla permanentemente para toda la máquina o ad hoc por instalación.
  • He visto problemas de instalación nuevos e irresolubles como resultado de una restauración del sistema, pero normalmente funciona bien . Obviamente no use la función por diversión. Es un último recurso y se utiliza mejor para la reversión de nuevos controladores o configuraciones que se acaban de instalar y que causan problemas inmediatos ( pantalla azul , reinicios, inestabilidad, etc ...).
  • Cuanto más retrocedas, más retrabajos crearás para ti 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 solo un mes o dos, creo.
  • Tenga en cuenta que la restauración del sistema podría afectar las Actualizaciones de Windows que luego deben volver a aplicarse, así como muchas otras configuraciones del sistema. Más allá de las molestias puras, esto también puede hacer que resurjan los problemas de seguridad y es posible que desee ejecutar una verificación de seguridad específica en los cuadros de destino utilizando Microsoft Baseline Security Analyzer o herramientas similares.
  • Dado que mencioné la restauración del sistema, supongo que debería mencionar la última función de configuración válida conocida . Esta característica no tiene nada que ver con la desinstalación o restauración del sistema, pero es la última configuración de arranque que funcionó o resultó en un sistema en ejecución. Se puede usar para que su sistema vuelva a funcionar si se bloquea o se detiene durante el arranque. Esto sucede a menudo después de la instalación del controlador.

14. prodcode

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

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

A continuación encontrará un fragmento de C ++ que muestra cómo desinstalar <=> por código de producto mediante una llamada a Función MsiConfigureProductEx . Para desinstalar otro producto, reemplace el GUID especificado para <=> con el de su producto. Para encontrar el código del producto, vea esta respuesta: ¿Cómo puedo encontrar el GUID del producto de una configuración MSI instalada?

La desinstalación ocurrirá en modo GUI completo. Para ejecutar en modo silencioso o algún otro modo GUI (reducido, básico, etc.), consulte: Función MsiSetInternalUI .

#include "pch.h"

#define WIN32_LEAN_AND_MEAN //Minimize includes from Windows.h
#include <windows.h>
#include <msi.h> // Windows Installer
#include <tchar.h> 

#pragma comment(lib, "msi.lib") // To make code link

int main()
{
    const TCHAR noreboot[] = _T("REBOOT=ReallySuppress");
    const TCHAR prodcode[39] = _T("{D7B80ABC-1950-37B8-F851-C3783EED9C93}"); // Orca, 10.1.17134.12

    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 se realizó y probó con la última versión de Visual Studio 2017 a partir de septiembre de 2018:

  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, compilar y ejecutar.

    • Cuidado con los cambios en las plantillas predeterminadas en VS2017, y los errores extraños que pueden resultar: Hay demasiados errores para que el motor IntelliSense funcione correctamente .
    • ACTUALIZACIÓN septiembre de 2018 : las plantillas han cambiado nuevamente. Ya no veo el problema anterior.
    • La EMEl enlace DN en el código enumera los posibles mensajes de error devueltos por msiexec.exe.

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

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

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

La extensión del archivo msi está asignada a msiexec (de la misma manera, al escribir un nombre de archivo .txt en el 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 realiza la acción predeterminada, instalar. Por esa razón, la desinstalación requiere que invoques msiexec con el interruptor de desinstalación para desinstalarlo.

wmic product get name

Simplemente bloquea el cmd ... 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 del software que está intentando instalar (no el nombre con ProductCode), el UninstallString apunta al desinstalador propio de la aplicación C:\Program Files\Zune\ZuneSetup.exe /x

Intentaría la siguiente sintaxis: funciona para mí.

msiexec /x filename.msi /q 

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top