2010-08-18 19 views
11

He desarrollado un instalador Wix para un proyecto interno, sin embargo, por accidente, he descubierto que no puedo desinstalar el instalador en mi máquina de desarrollo ya que recibo el siguiente mensaje de error:Wix/MSI: no se puede desinstalar

la función que está intentando usar está en un recurso de red que no está disponible

con un señalador de diálogo para la trayectoria de la .msi que he instalado a partir de la función. (El .msi está allí, sin embargo ha sido reconstruido y así ha cambiado desde que lo instalé)

Me preocupa este diálogo porque creía que Windows Installer realizaba un seguimiento de los archivos .MSI instalados, sin embargo, este diálogo parece sugerir que puedo romper mi desinstalador eliminando, moviendo o cambiando el instalador.

¿Es este el caso?

¿Qué debo hacer para asegurarme de no romper mi desinstalador de esta manera? (¿Necesitamos mantener copias de todas las versiones del instalador instaladas en una máquina?)

Respuesta

9

Una de las primeras lecciones dolorosas de escribir instalaciones es nunca ejecutar la instalación en su propia caja. Ciertamente, no hasta que alcanza un punto de madurez y ha pasado por varios ciclos de control de calidad. Para esto tenemos laboratorios de integración y máquinas virtuales. (Hay un dicho sobre cosas que no debes hacer en tu propio patio trasero)

Dicho esto, normalmente una desinstalación de MSI no requiere el MSI, pero hay situaciones en las que podría ser necesario. Por ejemplo, si uno llamara a la acción ResolveSource durante una desinstalación, MSI buscaría el .MSI.

Ahora bien, hay varias maneras de salir de esta salmuera:

  1. Tome un MSI que tienen y editarlo con ORCA para que coincida con el nombre del archivo, UpgradeCode, CódigoProducto y PackageCode del MSI que instaló. Debería poder obtener toda esta información al mirar el MSI en caché eliminado que existe en %WINDIR%\Installer. CD a ese directorio y haga un findstr -i -m SOMESTRING *.msi donde SOMESTRING es algo único como su propiedad ProductName. Una vez que conozca el nombre de la MSI en caché, ábralo en Orca para obtener los atributos necesarios. Luego, coloque estos atributos en una copia de la MSI que tiene disponible e intente realizar una desinstalación. No, no es la MSI exacta que instaló, pero por lo general está lo suficientemente cerca.

o

  1. Uso de las ventanas finales utilidad frente instalador de limpieza (si todavía lo tienes) y/o la utilidad backend MSIZAP para limpiar todo el conocimiento de la aplicación de MSI y Agregar/QuitarProgramas. Tenga en cuenta que esto no desinstala el programa, por lo que también tendrá que escribir un script o desinstalar de forma manual todos los rastros del programa.

o

  1. Reimage su estación de trabajo
+0

Mi pregunta es: ¿cómo puedo evitar que esto suceda en las máquinas de producción, sé cómo arreglar mi máquina! :-) – Justin

+1

"¿Necesitamos mantener copias de todas las versiones del instalador instaladas en una máquina?" Um, sí. ¿Ya no tienes una copia de todo lo que entra en producción? Sé que tenemos un Sistema de gestión de la configuración que se asegura de que lo hagamos y de donde sea que se haya entregado. Si su pregunta es POR QUÉ está pasando esto y no cómo salir de ella, registre la desinstalación para ver por qué está solicitando el MSI. –

10

La forma más fácil de salir de esta situación es hacer un almacenar en caché/reinstalar. Cree una nueva versión de su MSI que no esté "rota" (de cualquier forma que se rompa, en este caso, puede que no se rompa del todo, solo necesita una nueva fuente).A continuación, se utiliza una línea de comando como:

msiexec /fv path\to\your.msi /l*v i.txt 

que copiará your.msi sobre el MSI que se almacena en caché y hacer una reparación. Entonces estarás en un lugar mejor.

+0

Mi pregunta es: ¿cómo evito que esto suceda en las máquinas de producción (o cómo está "roto" mi MSI)? ¡Sé cómo arreglar mi máquina! :-) – Justin

+0

Mire el archivo de registro detallado para descubrir por qué se requiere la fuente original. Probablemente hayas encontrado un error en tu MSI en alguna parte que lo obliga a querer la fuente original durante la desinstalación. Hasta que arregles eso, necesitarás tener el MSI disponible ... lo cual es enormemente molesto. :) –

1

Si sabe exactamente lo que está mal (que a menudo es el caso durante el desarrollo), prefiero abrir el archivo MSI que Windows usará para la desinstalación y editarlo directamente con una herramienta como Orca para corregir o eliminar la parte que causa el fracaso

Por ejemplo:

  • Busque el archivo MSI en% windir% \ Installer. El MSI debería ser el último archivo MSI editado en esa carpeta justo después de que haya realizado la desinstalación fallida.
  • Abra el archivo msi con Orca.
  • Elimina la parte anómala, por ejemplo, la acción InstallExecuteSequence que falla, que es un escenario atípico.
  • Guarde el msi y cierre Orca para liberar el bloqueo en el archivo msi.
0

- ¿Ha experimentado con "funcionamiento de la fuente" durante la instalación?

Esta es una opción en el árbol de características que le permite ejecutar algunos archivos desde su fuente de instalación. Esto generalmente se combina con una imagen de administrador en la red. Ver la imagen a continuación. No lo he intentado, pero supongo que esto podría causar: "La función que está tratando de usar está en un recurso de red que no está disponible" si la red no funciona y está intentando desinstalar. Solo una teoría, hay otras formas en que esto podría suceder.

enter image description here

2 - ¿Está ejecutando acciones personalizadas guión? Si es así, ¿extraes a la carpeta tmp o ejecutas desde los archivos instalados o la tabla binaria? De ser así, ¿está la acción personalizada condicionada para ejecutarse solo en la instalación?

3 - ¿Está quizá ejecutando una acción personalizada EXE que apunta a un archivo instalado? Si es así, este archivo puede ser inalcanzable en la red.

4 - ¿Alguno de sus carpetas userprofile redirigidos a un recurso compartido de red?

5 - ¿Está instalando algo directamente en una carpeta en la red?

Hay muchas otras posibilidades.