我有一个可以构建为32位或64位安装程序的WiX安装程序,可以在ProgramFilesFolder
和ProgramFiles64Folder
之间进行一些预处理。
由于安装程序会将一些文件放在共享文档文件夹和Common AppData中,因此这两个版本不能并排共存,因此具有相同的升级代码和不同的产品代码。
RemoveExistingProducts
计划在InstallValidate
之后立即安排,我总是在版本之间执行重大升级。
但是,从早期的x64版本升级到更高版本的x86版本时,c:\Program Files
中的所有x64文件都会被遗忘。
阅读日志时,似乎在卸载旧的x64组件时,它正在查看c:\Program Files (x86)
:
MSI (s) (50:08) [11:53:16:589]: Executing op: FileRemove(,FileName=common.dll,,ComponentId={1680271B-6AAD-4B2A-8F6E-BDCBC964CC92})
RemoveFiles: File: common.dll, Directory: C:\Program Files (x86)\XJTAG 3.5\Bin\
最初,两个安装程序中的组件具有相同的GUID,即使它们被安装到两个安装程序中的不同位置,因为知道提前安排RemoveExistingProducts应该允许我逃脱它。但是,我使用不同的GUID构建了一个新的32位安装程序,问题仍然存在。
反过来不会发生这种情况。似乎因为新版本是32位安装程序,所以它使用的是c:\Program Files (x86)
而不是c:\Program Files
。
这种升级只是不可能的吗?