El elemento Actualizar dentro del elemento Producto, combinado con la programación adecuada de la acción, realizará la desinstalación que está buscando. Asegúrese de enumerar los códigos de actualización de todos los productos que desea eliminar.
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="00000000-0000-0000-0000-000000000000">
<UpgradeVersion Minimum="1.0.0.0" Maximum="1.0.5.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
Tenga en cuenta que, si tiene cuidado con sus compilaciones, puede evitar que las personas instalen accidentalmente una versión anterior de su producto sobre una nueva. Para eso está el campo Máximo. Cuando creamos instaladores, establecemos UpgradeVersion Maximum en la versión que se está construyendo, pero IncludeMaximum = "no" para evitar este escenario.
Tiene opciones con respecto a la programación de RemoveExistingProducts. Prefiero programarlo después de InstallFinalize (en lugar de después de InstallInitialize como otros lo han recomendado):
<InstallExecuteSequence>
<RemoveExistingProducts After="InstallFinalize"></RemoveExistingProducts>
</InstallExecuteSequence>
Esto deja instalada la versión anterior del producto hasta después de que se copian los nuevos archivos y claves de registro. Esto me permite migrar datos de la versión anterior a la nueva (por ejemplo, ha cambiado el almacenamiento de las preferencias del usuario del registro a un archivo XML, pero desea ser cortés y migrar su configuración). Esta migración se realiza en una acción personalizada diferida justo antes de InstallFinalize.
Otro beneficio es la eficiencia: si hay archivos sin cambios, Windows Installer no se molesta en copiarlos nuevamente cuando programa después de InstallFinalize. Si programa después de InstallInitialize, primero se elimina completamente la versión anterior y luego se instala la nueva versión. Esto da como resultado la eliminación innecesaria y la copia de archivos.
Para otras opciones de programación, vea el tema de ayuda RemoveExistingProducts en MSDN. Esta semana, el enlace es: http://msdn.microsoft.com/en-us/library/aa371197.aspx