2010-11-17 50 views
15

tengo un estudio 2010 Proyecto de despliegue visual con los siguientes ajustes:Visual Studio 2010 - RemovePreviousVersions

DetectNewerInstalledVersion = True 
InstallAllUsers = True 
RemovePreviousVersions = True 

El proyecto que estoy construyendo tiene varios archivos DLL que debido a la forma legado que serialización se implementó las versiones de archivo para este proyecto no puede ser incrementado (lo cual estamos en proceso de cambio).

¿Cómo puedo obtener el proyecto de instalación para eliminar por completo los archivos existentes (o al menos sobrescribir con todos los archivos nuevos)?

Tal vez tengo que escritura de una desinstalación en el instalador (alguien me puede vincular a ello, no puedo encontrar)

He mirado alrededor y para cualquier duda existentes y todos ellos dicen "incrementar su archivo versiones ", sin embargo, para mí esto no es actualmente una opción.

Respuesta

20

El proyecto de instalación creado con Visual Studio (2008 y 2010) solo reemplazará los archivos si se ha incrementado el número de versión. La solución obvia sería simplemente incrementar todos los números de versión; pero como dijiste, esto no es factible para ti.

El comportamiento del archivo .msi está básicamente determinado por el momento en que se ejecuta la acción RemoveExistingProducts. Los instaladores creados con VS 2008 programan esta acción después de el nuevo producto ha sido instalado. Los ensambles modificados cuya versión no se ha incrementado por lo tanto no se reemplazan. se describen algunos detalles más sobre el comportamiento de actualización en este tema:

RemovePreviousVersions=True but previous version is not removed from the target machine

Para cambiar el comportamiento, puede parchear el archivo .msi creado hasta que se ejecuta la acción RemoveExistingProductsantes de la Se instala un producto nuevo (este ha sido el comportamiento si creó la configuración con Visual Studio 2005). Los parches pueden, p. hacer uso de una pequeña VBScript que se ejecuta como un paso de postas:

Dim objInstaller 
Dim objDatabase 
Dim objView 
Dim objResult 

Dim strPathMsi 

If WScript.Arguments.Count <> 1 Then 
    WScript.Echo "Usage: cscript fixRemovePreviousVersions.vbs <path to MSI>" 
    WScript.Quit -1 
End If 

strPathMsi = WScript.Arguments(0) 

Set objInstaller = CreateObject("WindowsInstaller.Installer") 
Set objDatabase = objInstaller.OpenDatabase(strPathMsi, 1) 
Set objView = objDatabase.OpenView("UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'") 

WScript.Echo "Patching install sequence: UPDATE InstallExecuteSequence SET Sequence=1450 WHERE Action='RemoveExistingProducts'" 
objView.Execute 
objDatabase.Commit 

WScript.Quit 0 
+3

Eso es increíble gracias. Para otras referencias, mi PostBuildEvent es (guarde el archivo vbs en el directorio del proyecto de configuración): cscript $ (ProjectDir) fixRemovePreviousVersions.vbs $ (BuiltOuputPath) – Seph

+0

@Seph ¿cómo se agregó un PostBuildEvent para un proyecto de MSI? – wal

+0

Ok Lo he encontrado, escondido en la ventana Propiedades del proyecto. :) – wal

1

Had mismo problema con dos configuraciones de forma migrado 2005 t0 2010. Editado instalación (.msi) con ORCA y cambió la secuencia de ejecución . RemoveExistingProducts antes de InstallInitialize Esto ha resuelto el problema de instalación.

0

La forma más fácil de realizar una desinstalación completa antes de una nueva instalación es

  1. ir a su "proyecto de inicio", haga clic derecho y seleccione "Opciones".
  2. Haga clic en el botón "información de montaje". A continuación, incremente los valores de "versión de ensamblaje" y "versión de archivo", haga clic en "Aceptar".
  3. Luego vaya a su proyecto de instalación. Asegúrese de que "DetectNewInstalledVersion" esté configurado en verdadero, "RemovePreviousVersion" es verdadero, luego incremente "versión", por ejemplo, de 1.0.0 a 1.0.1, y luego aparecerá un cuadro de diálogo pidiéndole que actualice su "Código de producto", simplemente seleccione " sí". Asegúrese de "reconstruir" su proyecto de inicio y luego reconstruir su proyecto de instalación.

Esto hará el truco. Disfrutar.Luego haz "clic derecho" en tu carpeta de configuración y elige "abrir carpeta en el explorador de Windows" y busca debajo de la carpeta "liberar".

+0

No se puede incrementar la versión como se menciona en el OP: 'debido a la forma heredada en que se implementó la serialización, las versiones de archivo para este proyecto no pueden incrementarse' – Seph