你可以解決這個問題。在第三個部署項目下打包2個安裝程序。創建一個自定義操作來檢查正在運行的操作系統版本,然後使安裝程序調用正確的安裝程序。
事情是這樣的:
[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;
}
好吧,那是很久......
總之,在提交你可以肯定的是,安裝已經解包,只要確保你有正確的路徑。 (您可以將cmd命令從/ c更改爲/ k以進行測試,這將保持命令提示符窗口處於活動狀態,以便您看到消息)
您可以閱讀更多關於自定義操作的信息,可以傳遞安裝路徑通過論據。
相關:[我如何有條件地安裝基於目標機器(32位或64位)的WiX文件?](http://stackoverflow.com/questions/730534/) – 2012-10-05 20:04:05