.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 ?
- Hay varias maneras, mi forma recomendada es usar Powershell: ¿cómo puedo encontrar el GUID del producto de una instalación de MSI instalada?
- Varias otras formas se describen aquí (registro, carpeta de caché local, etc.): Buscar GUID desde el archivo MSI
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
- También vea esta respuesta: ¿Cómo puedo encontrar el GUID del producto de una instalación de MSI instalada?
5. Usando PowerShell
- Existe una secuencia de comandos de PowerShell similar pero más completa disponible en MSDN . Permite la desinstalación para ejecutarse en varias máquinas.
Entrada añadida por Even Mien:
$app = Get-WmiObject -Class Win32_Product -Filter "Name = ''YOUR_APP''" $app.Uninstall()
Este enfoque funcionará, pero el acceso a la clase WMI Win32_Product activará una verificación de coherencia del software que es muy lenta y en circunstancias especiales puede provocar el inicio de una reparación automática de MSI. Ver este artículo: Powershell Uninstall Script - Tener un verdadero dolor de cabeza
- No lo he probado yo mismo, pero parece que $ app.Uninstall () puede ejecutar DesinstalarString registrado en la configuración del registro del applet ARP. Esto significa que puede ejecutar modificar en lugar de desinstalar en algunos casos.
- Consulte este tema para obtener más detalles y formas de desinstalar a través de Powershell: ¿cómo puedo desinstalar una aplicación usando PowerShell?
6. Uso de .NET DTF Class Library (parte del kit de herramientas de WiX )
- Esta opción se incluye para los desarrolladores que inician implementación y MSI ; no es realmente práctica como una "solución rápida". Requiere que descargue el kit de herramientas WiX , un marco de trabajo gratuito para crear archivos MSI compilados a partir de archivos fuente XML.
- Una rápida publicidad en WiX y su "historial": Windows Installer y la creación de WiX . Y aquí está el WiX en contraste con otras herramientas de implementación (comerciales) - (fortalezas y debilidades - con suerte lo más objetivo posible).
- DTF (Deployment Tools Foundation) se distribuye como parte de WiX como se explica aquí: ¿Está disponible el código fuente para Deployment Tools Foundation? .
- DTF es esencialmente un contenedor .NET para la API Win32 Windows Installer . Elimina toda necesidad de COM Interop cuando se trabaja con Windows Installer a través de la automatización y es nada menos que una joya .NET , quizás la biblioteca .NET más fácil de usar que he visto en mi vida. Muy recomendable: excelente incluso para entrenar estudiantes en C # .
- La siguiente source del experto de MSI, Christopher Painter, usa C # y DTF. Microsoft.Deployment.WindowsInstaller es uno de los ensamblados de DTF. Vea las otras asambleas explicadas aquí en serverfault.com :
using Microsoft.Deployment.WindowsInstaller;
public static void Uninstall( string productCode)
{
Installer.ConfigureProduct(productCode, 0, InstallState.Absent, "REBOOT=/"R/"");
}
- Otra alternativa de Tom Blodget: verificar si la desinstalación se realizó correctamente
- Más información sobre msiexec.exe versus automatización en: serverfault.com .
7. Uso de la API de automatización de Windows Installer
- Aquí hay una discusión de la comunidad de esta opción: Ejemplo de comunidad de la API de automatización de Windows Installer
- Se puede acceder a la API mediante la automatización de scripts y las llamadas a la API de C ++ (mi publicación en serverfault.com)
La siguiente fuente adaptada del experto de MSI Christopher Painter usando VBScript :
Set installer = CreateObject("WindowsInstaller.Installer") installer.InstallProduct "product.msi", "REMOVE=ALL REBOOT=ReallySuppress" Set installer = Nothing
Aquí hay otro VBScript para desinstalar por GUID de Symantec: http://www.symantec.com/connect/downloads/uninstall-application-using-guid-registry
Desinstalar a través del código de actualización y ConfigureProduct .
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
- Agregar solo para completar. No se recomienda utilizar este enfoque ya que es muy lento
- Se activa una verificación de coherencia del software cada vez que se llama a Win32_Product de cada instalación
- La verificación de consistencia es increíblemente lenta y también puede desencadenar una reparación de software . Ver este artículo: Powershell Uninstall Script - Tener un verdadero dolor de cabeza
- Peor aún, algunas personas informan que sus registros de eventos se llenan con entradas de MsiInstaller EventID 1035 , aparentemente causadas por consultas de WMI a la clase Win32_Product (personalmente nunca he visto esto).
- La herramienta de creación de código WMICodeCreator.exe se puede usar para experimentar
- Instalar puede invocarse a través de
Win32_Product.Install
- La desinstalación se puede invocar a través de
Win32_Product.Uninstall
- Instalar puede invocarse a través de
- Ejemplo de MSDN: método de desinstalación de la clase Win32_Product
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.exedebe 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.
- Este es un problema raro, pero lo he visto yo mismo. Algunas de las posibles causas:
- 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?
- 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
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 :
- Cree una nueva "Aplicación de consola de Windows" desde Visual C ++ => Escritorio de Windows.
- Copie y pegue el código anterior en su archivo CPP principal (reemplazando lo que esté allí).
Eso debería ser para poder ejecutar el código. Tal vez establecer un punto de interrupción, construir y ejecutar.
- Tenga cuidado con los cambios a las plantillas predeterminadas en VS2017 y los errores extraños que pueden ocurrir: hay demasiados errores para que el motor IntelliSense funcione correctamente .
- El enlace de MSDN en el código enumera los posibles mensajes de error devueltos por msiexec.exe.
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