2009-04-30 14 views
11

Tengo un proyecto de Winforms con un único archivo .exe como salida principal. Estoy usando un proyecto de implementación para distribuirlo, pero el archivo .exe no se actualiza cuando se instala la nueva versión, lo que significa que tengo que pedirles a los usuarios que desinstalen manualmente y luego instalen la nueva versión.El proyecto de implementación no está actualizando .exe

Esto es lo que estoy haciendo:

  • I Valor mínimo de la versión de montaje en el proyecto de salida (que es la salida principal del proyecto de implementación)
  • I Valor mínimo de la versión del proyecto de despliegue (y actualizar el código de producto cuando se le solicite)
  • el proyecto de despliegue debería eliminar las versiones anteriores
  • la propiedad 'Permanente' en el .exe se establece en False

Estoy seguro de que he hecho esto antes con éxito, pero parece que no puedo hacerlo ahora. ¿Qué estoy haciendo mal?

Editar: Tengo que trabajar cambiando la versión de archivo en las propiedades del proyecto, como en this answer

+0

+1 para una solución buena y funcional. Es útil. –

Respuesta

9

Es difícil decir qué puede estar causando esto. ¿Cómo está instalando el MSI que no elimina la versión anterior? Recomendaría ejecutar la instalación que no funciona con el registro detallado. Me ejecutarlo desde la línea de comando como este:

msiexec /i "project.msi" /l*v "c:\install.log" 

/l dice msiexec (que es el servicio de instalación) para crear un registro, * le indica que debe registrar todo, y v le dice que use el modo detallado.

Ejecute eso y eche un vistazo al archivo de registro y debería decirle qué está fallando y por qué. Puede publicar ese archivo de registro aquí también y apuesto a que podemos encontrar algo juntos.

PREGUNTAS ADICIONALES: El archivo de registro hace que parezca que el instalador piensa que no hay nada que hacer. Cuando declaras que actualizas la versión del archivo, ¿qué estás actualizando? ¿Cómo se incluyen los archivos para implementar? ¿Los tiene incluidos como "resultados primarios" en el proyecto de configuración, o está incluyendo los ensamblajes directamente? ¿Lo tiene determinando las dependencias y las incluye automáticamente, o incluyó un resultado del proyecto?

ACTUALIZACIÓN Consulte esta publicación para obtener una descripción de lo que debe cambiar para actualizar MSI automáticamente. Question 511789

+1

Encontré esto en el registro: Archivo: C: \ Archivos de programa (x86) \ Company \ Project \ Project.exe; \t No se sobrescribirá; \t No parcheará; \t \t El archivo existente es de una versión igual ¿Qué debo hacer para que vea que el archivo ha cambiado? – stuartd

+0

mirando el archivo ahora. edite la pregunta original y coloque el enlace de registro allí para que otros puedan encontrarla más fácilmente. –

+0

Gracias por su ayuda, creo que lo estoy trabajando ahora. Noté que la pregunta a la que se refiere indica: "El código de actualización nunca debe cambiar" – stuartd

1

¿Está tratando de actualizar mientras se ejecuta la aplicación? Si es así, no será posible. Debe pensar en una mejor manera, como usar una pequeña aplicación externa para matar el proceso en ejecución actual, instalar la actualización y reiniciar la nueva versión.

+0

No, la aplicación no se está ejecutando. – stuartd

1

Puede intentar reconstruir la solución. También puedes limpiarlo mientras estás en ello. Puedo ver cómo sucedería esto si todo lo que cambiaras fueran archivos de contenido. De lo contrario, desatienda.

5

Es posible que el archivo ejecutable de su aplicación no se esté actualizando porque no aumentó el recurso de información VERSIÓN en su proyecto MFC.

No es suficiente simplemente incrementar la versión del proyecto de configuración.Ver más abajo:

http://msdn.microsoft.com/en-us/library/6fkzft86.aspx

"Información de la versión también es utilizado por las API de configuración."

+0

Tengo un proyecto de MFC? Esto es C# – stuartd

5

Finalmente lo descubrí después de golpear mi cabeza contra la pared durante horas.

Mi problema fue idéntico a este y terminó siendo muy simple de resolver. Dos respuestas arriba me llevaron en la dirección correcta y me ayudaron a resolver mi problema, pero aquí está en pocas palabras.

Si tiene RemovePreviousVersion configurado en true, es probable que el problema se encuentre en la configuración de la aplicación debajo del botón de información de ensamblaje.

Me corrió el registro como mohlsen mostraron en la respuesta anterior, msiexec/i "project.msi"/l * v "c: \ install.log" y terminó con la misma respuesta, No se sobrescribirá; No parcheará; archivo existente es de una versión igual

inverso me señaló en la dirección correcta, pero también me confundió un poco con la referencia de MFC. Estoy escribiendo una aplicación de Windows y finalmente junte dos y dos y fui a las propiedades de la aplicación que estoy escribiendo debajo de la pestaña Aplicación. Hay un botón llamado Información de ensamblaje que conduce a la versión del ensamblado y la versión del archivo. Incrementé estas y ahora mis actualizaciones de archivos .exe.

Por lo tanto, debe hacer dos cosas, incrementar la versión de ensamblaje real en la aplicación que está escribiendo, así como la versión del paquete de instalación.

+0

Incrementando la versión de ensamblaje ayudado. –

5

Un consejo adicional: si abre el archivo de AssemblyInfo.cs para su proyecto, y cambian a AssemblyVersion

[assembly: AssemblyVersion ("1.0. *")]

entonces la información de la versión de montaje es se actualiza automáticamente cada vez que construyes el proyecto. A continuación, comente o elimine la entrada AssemblyFileVersion del mismo archivo, de modo que la versión predeterminada del archivo sea la misma que la versión del ensamblado. Esto significa que la versión del archivo se actualiza automáticamente cada vez que la compila, por lo que solo debe actualizar la versión del instalador para que los archivos se sobrescriban como espera.

Cuestiones relacionadas