Podría solucionar el problema. Empaque 2 instaladores en el tercer proyecto de implementación. Cree una acción personalizada que verifique la versión del sistema operativo en ejecución, luego haga que el instalador llame al instalador correcto.
Algo como esto:
[RunInstaller(true)]
public partial class MyInstaller: Installer
{
String installerPath;
public MyInstaller()
{
InitializeComponent();
if (Is64Bit())//running as 64-bit
{
installerPath= @"installfolder\my64bitsetup.exe";
}
else
{
installerPath= @"installfolder\my32bitsetup.exe";
}
}
[SecurityPermission(SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
}
[SecurityPermission(SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
MyInstall();
}
[SecurityPermission(SecurityAction.Demand)]
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
[SecurityPermission(SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
base.Commit(savedState);
}
private void MyInstall()
{
ProcessStartInfo procStartInfo = new ProcessStartInfo("cmd.exe", "/c " + installerPath);
RunProcess(procStartInfo);
}
private void RunProcess(ProcessStartInfo procStartInfo)
{
Process proc = new Process();
proc.StartInfo = procStartInfo;
proc.Start();
proc.WaitForExit();
}
[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsWow64Process([In] IntPtr hProcess, [Out] out bool lpSystemInfo);
private bool Is64Bit()
{
return (IntPtr.Size == 8 || (IntPtr.Size == 4 && Is32BitProcessOn64BitProcessor()));
}
private bool Is32BitProcessOn64BitProcessor()
{
bool retVal;
IsWow64Process(Process.GetCurrentProcess().Handle, out retVal);
return retVal;
}
Ok, eso fue largo ...
De todos modos, en la confirmación puede estar seguro de que los instaladores son ya descomprimido, sólo asegúrese de que tiene el derecho camino. (Puede cambiar el comando cmd de/c a/k para las pruebas, que mantendrá activa la ventana del símbolo del sistema para que pueda ver los mensajes)
Puede leer más acerca de las acciones personalizadas, se puede pasar la ruta de instalación por argumentos.
Relacionado: [¿Cómo instalo condicionalmente un archivo con WiX basado en la máquina de destino (32 bits o 64 bits)?] (Http://stackoverflow.com/questions/730534/) –