Pregunta

He construir un instalador MSI mediante un proyecto de instalación de VS2010.

Ahora el proyecto no hace deinstall a causa de un "1001 Excepción: Formato no válido para el argumento machineName". (Ver más abajo) dentro de una acción personalizada

Soy unsucessful en la desinstalación de la aplicación mediante el quitar desde el control del sistema o msiexec /uninstall.

¿Hay una manera de forzar la desinstalación?

detalles:

En el marco de una acción personalizada registro un origen de evento costumbre que mis usos de aplicaciones para loging evento en el registro de Windows:

public override void Install(IDictionary stateSaver) {  
        base.Install(stateSaver);  
        EventLog.CreateEventSource("VeodinRecorder","Application");  
}  

interior de la "Desinstalar" Trato de eliminar esta Eventsource con

if (!EventLog.SourceExists("VeodinRecorder"))  
   EventLog.Delete("VeodinRecorder"); `

El EventLog.Delete también toma como segundo argumento Machinename Así que traté de sobrescribir el MSI utilizado para la desinstalación con msiexec /fv y cambió la acción de desinstalación:

   EventLog.Delete("VeodinRecorder","."); 
   EventLog.Delete("VeodinRecorder","Application"); 

Me incluso dejó todo el espacio en blanco "acción de desinstalación".

Pero nada parecía funcionar.

¿Alguna pista?

El registro completo:

Se ha producido un error 1001. Error 1001. Una excepción al desinstalar. Esta excepción se omitirá y la desinstalación continuará. Sin embargo, la aplicación no puede ser desinstalado por completo después de la desinstalación. -> Formato no válido para el argumento machineName. MSI (s) (60 68!) [22: 49: 00: 101]:
Error de depuración: 2769: Custom Acción _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall no cerraba 1 MSIHANDLEs
. El instalador ha encontrado un error inesperado instalar este paquete. Esto puede indicar un problema con este paquete. El código de error es 2769. Los argumentos son: _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall, 1, CustomAction _3C1D0358_8969_4B01_B8FA_B6B43F4E9E4C.uninstall devolvió el código de error real 1603 (tenga en cuenta que esto puede no ser fiable al 100% si la traducción ocurrió dentro de caja de arena)
La acción terminó 22:49:00: InstallExecute. Valor de retorno 3.
La acción terminó 22:49:00: INSTALAR. Return valor 3.

¿Fue útil?

Solución

Parece que el CustomAction.dll no se actualiza cuando actualice la instalación con msiexec /fv.

Ahora coloca manualmente la nueva construcción CustomAction.dll (con una anulación de desinstalación vacío) en la carpeta de instalación y fue capaz de desinstalar.

Actualización:. (Créditos a @pcans) el uso de ORCA para editar el msi actualmente instalado manualmente y desactivar la acción personalizada desinstalación

Otros consejos

Sólo referencia Quiero añadir que también puede parchear el producto instalado con un actualización menor para eliminar los actos fallidos en el secuencia de desinstalación antes de que se llama. Esto funciona porque una actualización menor es una reinstalación del mismo producto, y no una desinstalación y una reinstalación de una nueva versión (que es una importante actualización). Usted por lo tanto, reemplazar la secuencia de desinstalación con una correcta antes de la erronous se ejecute.

La creación del parche es bastante complicado, sin embargo, incluso con herramientas profesionales tales como Wise o Installshield, pero en ciertos casos esta es la única solución que funciona para obtener el paquete correctamente desinstalado. Un paquete "en la naturaleza" en una empresa debe fijarse de esta manera.

Por último, puede utilizar msizap.exe de Microsoft para anular el registro de un paquete defectuoso toda la base de datos de Windows Installer, pero esto no es bueno ya que los cambios en el sistema no se deshacen en absoluto y un montón de basura se deja en todas partes. La herramienta en sí también parece un poco inestable a veces, a veces la creación de nuevos errores que son muy difíciles de solucionar. Preferiblemente utilizarlo para depuración sólo .

Una nota más en esta ya larga respuesta: una caso especial es cuando se ejecuta una acción personalizada sólo durante la secuencia de desinstalación, y luego devuelve un código de retorno defectuoso - a veces incluso si se lleva a cabo su ok operaciones. Estas acciones pueden desencadenar una muy annonying " desinstalación única situación de reversión ". Con eficacia su desinstalación se deshace cuando golpea la acción personalizada que nunca se ejecuta durante la instalación. Esto deshacer la desinstalación y por lo tanto el trabajo como una instalación - el producto se deja en la máquina. Bastante extraño.

La línea de fondo . Saltarse los códigos de retorno para las acciones personalizadas que se ejecutan durante la desinstalación, utilizar otros mecanismos de verificación para garantizar la acción tuvo éxito

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