Tengo un Windows Installer para mi aplicación. El paquete de la aplicación también contiene una clase de instalador donde algunas de las acciones se realizan y otras se realizan en acciones personalizadas.Problemas relacionados con la instalación de una aplicación mediante Windows Installer
El instalador instala otra aplicación desde Acciones personalizadas durante la instalación. Deseo saber si esta aplicación ya existe de la misma versión que no quiero instalar o si debo proporcionar un Messagebox para volver a instalar Y/N.
Si mi aplicación ya está instalada y vuelvo a hacer clic en el mismo instalador, obtengo las opciones "Reparar" y "Eliminar". Pero si el instalador es de nueva construcción, aparece un cuadro de diálogo que dice "Otra versión ya está instalada ... elimine usando Agregar Eliminar programas ...". Por lo tanto, no puedo actualizar la versión existente sin desinstalarla. ¿Cómo puedo actualizar la versión existente?
Cualquier ayuda u orientación para estas 2 consultas son muy apreciadas. Miré en la red para estos pero no pude obtener las respuestas adecuadas. Si puedes ayudarme, eso sería realmente genial.
CÓDIGO
prouct.xml
<?xml version="1.0" encoding="utf-8" ?>
<Product xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="My.Bootstrapper.ABC">
<!-- Create Package, Product Manifest http://msdn.microsoft.com/en-us/library/ee335702.aspx
Schema Reference : http://msdn.microsoft.com/en-us/library/ms229223.aspx
-->
<PackageFiles>
<PackageFile Name="XYZ.exe"/>
</PackageFiles>
<InstallChecks>
<!-- If its installed, it will be in Uninstall. DisplayName will be XYZ2.1_rc22
Can still get values of DisplayVersion (2.1_rc22) & UninstallString from this key
-->
<RegistryCheck
Property="IS_XYZ_INSTALLED"
Key="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\XYZ"
Value="DisplayName"/>
</InstallChecks>
<Commands>
<Command PackageFile="XYZ.exe" Arguments="/Install">
<InstallConditions>
<BypassIf Property="IS_XYZ_INSTALLED"
Compare="ValueEqualTo" Value="XYZ2.1_rc22"/> // tHIS IS THE DISPLAYNAME, THAT I SEE IN REGISTY
<FailIf Property="AdminUser"
Compare="ValueNotEqualTo" Value="True"
String="NotAnAdmin"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="1641" Result="SuccessReboot"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" String="GeneralFailure"/>
</ExitCodes>
</Command>
</Commands>
</Product>
package.xml
<?xml version="1.0" encoding="utf-8" ?>
<Package xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
Name="DisplayName" Culture="Culture">
<!--Check for XYZversion 2.1_rc22 -->
<Strings>
<String Name="DisplayName">Install My XYZ</String>
<String Name="Culture">en</String>
<String Name="NotAnAdmin">Administrator permissions are required to install XYZ.Contact your
administrator.</String>
<String Name="GeneralFailure">A general error has occurred while installing this
package.</String>
</Strings>
</Package>
ACTUALIZACIÓN: Quiero instalar XYZ si no está instalado en alerady ORDENADOR PERSONAL. Con el código anterior no se instala como Requisito previo. En Prerrequisito, selecciono mi aplicación (junto con Windows Installer 3.1 & .NET3.5) y seleccioné "Descargar prereq desde la misma ubicación que mi aplicación". En Build of setup project, obtengo 3 carpetas en mi Rel (para winIns, Net & mi aplicación o se instalará como preq, es decir, XYZ). Actualmente, XYZ no está instalado en mi compilación, por lo que no se encontrará la clave. Cuando instalo el instalador, instala la aplicación pero no la aplicación prereq i.e XYZ.exe. ¿Dónde estoy equivocado?
Gracias.
¿Cómo se instala la otra aplicación en la acción personalizada, es otra MSI? – Jodrell
@Jodrell, la otra aplicación es un archivo de instalación de Windows. En Acción personalizada, agregué ese campo en Instalar. Por lo tanto, se ejecuta durante el proceso de instalación y el archivo exe instala la otra aplicación – Tvd