Cómo forzar a Windows Installer para reemplazar un acceso directo con un solo ha cambiado el nombre?

StackOverflow https://stackoverflow.com/questions/4622205

  •  30-09-2019
  •  | 
  •  

Pregunta

Recientemente, hemos añadido una característica a nuestro instalador que requiere un par de los accesos directos del escritorio para cambiar el nombre ligeramente (se añadió el número de versión al nombre). Estoy teniendo problemas para conseguir el instalador para reemplazar a los viejos métodos abreviados con los nuevos. Cuando el problema se informó inicialmente, se están instalando los nuevos accesos directos, pero los viejos no estaban siendo removidos. Después de trabajar en el problema, estoy teniendo un problema mixto: Uno de los antiguos accesos directos se está quitando (hasta ahora, tan bueno), pero el otro no lo es (no tan bueno), y en ambos casos, los nuevos accesos directos no se están instalando (aún peor). He intentado cambiar el GUID en cada uno de los componentes que se instalan estos accesos directos, y he incluso, en un momento dado, intentado cambiar la propiedad ProductCode en cada uno de los módulos de combinación responsables de los accesos directos, pero nada parece conseguir la deseada conducta (fuera lo viejo y lo nuevo cuando se actualiza).

Con sólo los componentes relevantes re-guiadas, aquí es lo que muestra el archivo de registro para los estados de instalación (para ayudar con la depuración, que haya cambiado el nombre de los componentes ligeramente de modo que puedo decir cuáles son de la vieja construcción y los cuales son de la nueva):

...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:70) [16:49:21:921]: Component: DesktopFolderX.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (E0:C0) [17:02:18:390]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Null
...

Como se puede ver en el registro, los nuevos accesos directos debería ir en en ambos casos, pero no son. Y estoy en una pérdida para explicar por qué el instalador está haciendo cosas diferentes con los dos atajos de edad.

Para su información:. Mi entorno de desarrollo es Wise Installation Studio 7.0

Editar Hemos restablecido todo a lo que era anteriormente, a excepción de la ProductVersion actual y CódigoProducto. Una vez hecho esto, las hojas de instalación de los antiguos accesos directos instalados pero no instala los nuevos. (Este comportamiento es diferente de lo que se informó inicialmente, y que yo era capaz de duplicar, es decir, se dejan puestas las viejas atajos, y también se instalaron los nuevos (renombrada) queridos.) Después de la re-guiando los dos componentes pertinentes, el instalador elimina los antiguos accesos directos, pero aún no instala los nuevos. (Esto es lo que está sucediendo en XP).

Las líneas relevantes en el registro después de volver a guiar los componentes son como sigue:

...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:EC) [10:48:31:091]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Absent;   Request: Local;   Action: Local
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.25696C3E_819B_4675_BEE2_C36D2B5CB521; Installed: Local;   Request: Absent;   Action: Absent
...
MSI (s) (80:0C) [11:04:22:882]: Component: DesktopFolder.04E48C43_FFCB_42AC_AC59_1D96BEC85C17; Installed: Local;   Request: Absent;   Action: Absent
...

Las dos primeras líneas parecen indicar que se están instalando los nuevos accesos directos, y sin embargo no lo son. Una reparación después instalará los nuevos accesos directos.

Cuando la copia del instalador en el que el problema original (existen los viejos y nuevos accesos directos después de una actualización) podría ser duplicado se ejecute, la acción informó acerca de las dos últimas líneas arriba es nulo en lugar del ausente.

Editar 2: El comportamiento actual es que los antiguos accesos directos se instalan mantenerse, y los nuevos no están instalados. Cuando me re-GUID sus componentes, los viejos atajos están siendo eliminados, y todavía no se están instalando los nuevos. He intentado soluciones de Christopher Painter, pero tampoco fui a ninguna parte. (Véase mi comentario sobre esa respuesta.) Tiene que haber una manera de conseguir los nuevos accesos directos con versiones instaladas en el lugar de los antiguos sin versión. ¿Hay alguien por ahí le puede proporcionar una solución que funciona?

Editar 3: Como resultado, el nuevo comportamiento en los que no se estaban instalados los nuevos accesos directos se debió a un error que había cometido en conseguir los archivos de origen, y los que iban en el instalador no eran tan actualizada como los que iban a ser reemplazados. Una vez más actualizados los archivos fueron compilados en el instalador, yo era capaz de conseguir los resultados deseados (antiguos accesos directos a cabo, los nuevos en). (Véase mi respuesta para más información.)

¿Fue útil?

Solución 2

A medida que re-versión de muebles para cada volumen de negocios (el número de compilación es siempre creciente), que es una mejora importante en lo que se refiere a WI, por lo que una vez me dieron el más actualizados los archivos en la instalación, reGUIDing los componentes que contendrá los accesos directos del escritorio que necesitaba ser reemplazado logrado los resultados que yo buscaba.

Otros consejos

Un acceso directo es simplemente un archivo .lnk en un directorio. No cambia el nombre de un acceso directo, eliminarla y crear una nueva. Si usted hace una importante actualización de la eliminación / reinstalación debe manejar esto, pero si usted está haciendo un menor actualizarlo va a dejar atrás el viejo porque el nuevo no sabe MSI al respecto.

Dos posibilidades:

1) Use la tabla RemoveFile para deshacerse del viejo acceso directo.

2) Mantener la vieja alrededor de componente con el archivo antiguo y utilizar el atributo transitivo con una condición no-op (google cómo eliminar un archivo en menor actualización también conocido como punción patrón de componentes) para hacer que el componente y del archivo / acceso directo a Ser eliminado. Crear un nuevo componente con otro nombre de archivo y el nuevo nombre de acceso directo a instalar para obtener el nuevo acceso directo.

creo que iba a tratar # 1 en primer lugar. : -)

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