WiX主要升级问题!

时间:2010-05-05 18:25:20

标签: wix components overwrite major-upgrade

问题:

我需要这些文件,PathwaysMDF和PathwaysLDF来替换(覆盖)主要升级中的旧副本。

好的,这个WiX让我发疯了。设置文件工作正常,但数据库文件仍无法正常工作!我尝试了几种方法......

以下是使用注册表项尝试此操作的代码:

<Component Id="Database" Guid="1D8756EF-FD6C-49BC-8400-299492E8C65D" >
<RegistryValue Root="HKLM" Key="Software\TDR\Pathways\Database" Name="installed" Type="integer" Value="1" KeyPath="yes" />
<File Id="pathwaysMdf" Name="Pathways.mdf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.mdf" />
<File Id="pathwaysLdf" Name="Pathways_log.ldf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.ldf"/>
</Component>

这导致旧的LDF文件保留,并且没有 MDF文件完成后,完成时,不是旧文件,也不是新文件。

以下是日志对此尝试的说法: (完成日志http://pastebin.com/a8a7uKfL

MSI (s) (C8:80) [09:01:51:845]: Executing op: SetTargetFolder(Folder=C:\Documents and Settings\All Users\Application Data\Pathways) MSI (s) (C8:80) [09:01:51:845]: Executing op: SetSourceFolder(Folder=1\ykpqggg9\Pathways\|CommonAppData\Pathways) MSI (s) (C8:80) [09:01:51:845]: Executing op: FileCopy(SourceName=x_gekdq7.ldf|Pathways_log.ldf,SourceCabKey=pathwaysLdf,DestName=Pathways_log.ldf,Attributes=512,FileSize=40239104,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=-403787921,HashPart2=771061375,HashPart3=-1732951415,HashPart4=-1390528611,,) MSI (s) (C8:80) [09:01:51:845]: File: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways_log.ldf; Won't Overwrite; Won't patch; Existing file is unversioned but modified MSI (s) (C8:80) [09:01:51:845]: Executing op: FileCopy(SourceName=Pathways.mdf,SourceCabKey=pathwaysMdf,DestName=Pathways.mdf,Attributes=512,FileSize=156368896,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=570808063,HashPart2=-1571218748,HashPart3=-867678845,HashPart4=601212343,,) MSI (s) (C8:80) [09:01:51:845]: File: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways.mdf; Won't Overwrite; Won't patch; Existing file is unversioned but modified

以下是使用随播文件(主程序可执行文件,版本化)尝试此操作的代码:

<Component Id="Database" Guid="1D8756EF-FD6C-49BC-8400-299492E8C65D" >
<File Id="pathwaysMdf" Name="Pathways.mdf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.mdf" CompanionFile="pathwaysExe" />
<File Id="pathwaysLdf" Name="Pathways_log.ldf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.ldf" CompanionFile="pathwaysExe" />
</Component>

这样做的结果是LDF文件表现完美,用旧的替换旧的,但是,MDF文件是GONE。旧的和新的一样,失踪。

以下是日志对此尝试的说法: (完整登录http://pastebin.com/gijLN5QY):

MSI (s) (C8:F8) [09:21:55:206]: Executing op: SetCompanionParent(ParentPath=C:\Program Files\Pathways\,ParentName=Pathways.exe,ParentVersion=1.1.5.0,ParentLanguage=0) MSI (s) (C8:F8) [09:21:55:206]: Executing op: FileCopy(SourceName=Pathways.mdf,SourceCabKey=pathwaysMdf,DestName=Pathways.mdf,Attributes=512,FileSize=156368896,PerTick=32768,,VerifyMedia=1,,,,,CheckCRC=0,Version=pathwaysExe,,InstallMode=58982400,,,,,,,) MSI (s) (C8:F8) [09:21:55:236]: File: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways.mdf; Overwrite; Won't patch; Existing file is of an equal version (Checked using version of companion: C:\Program Files\Pathways\Pathways.exe) MSI (s) (C8:F8) [09:21:55:236]: Source for file 'pathwaysMdf' is compressed InstallFiles: File: Pathways.mdf, Directory: C:\Documents and Settings\All Users\Application Data\Pathways\, Size: 156368896 MSI (s) (C8:F8) [09:21:55:246]: Re-applying security from existing file. MSI (s) (C8:F8) [09:21:55:246]: Verifying accessibility of file: Pathways.mdf MSI (s) (C8:F8) [09:21:55:266]: Note: 1: 2318 2: C:\Documents and Settings\All Users\Application Data\Pathways\Pathways.mdf MSI (s) (C8:F8) [09:21:55:266]: Note: 1: 2360 MSI (s) (C8:F8) [09:21:55:266]: Note: 1: 2360

我还尝试在没有CompanionFile标记的情况下将MDF文件设置为KeyPath =“yes”。这也行不通。请问有什么建议吗? 谢谢!

2 个答案:

答案 0 :(得分:1)

在我看来,升级设计与WiX存在严重缺陷。应该发生的是,默认情况下每个文件应“始终替换”任何内容。只有标记有适当属性的文件才应考虑进行版本控制和其他考虑。

WiX似乎只是为了安装.exe和.dll或其他明确知道有版本文件的设计。这是不幸的,因为它可以更有效,并阻止这么多人浪费时间,如果它实际上被设计成一个通用的安装机制。

答案 1 :(得分:0)

尝试删除数据库组件中的RemoveFile条目。他们告诉安装程序只在卸载时删除,升级时,进程是UPGRADINGPRODUCTCODE而不是UNINSTALL。除此之外,如果要删除安装程序未创建的文件,您只需要删除文件条目(或者如果您想控制发生的事情,只需要在升级时删除等)

无论如何尝试这个

  <Component Id="Database" Guid="1D8756EF-FD6C-49BC-8400-299492E8C65D">
       <File KeyPath="yes" Id="pathwaysMdf" Name="Pathways.mdf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.mdf" />
       <File Id="pathwaysLdf" Name="Pathways_log.ldf" DiskId="1" Source="\\fileserver\Shared\Databases\Pathways\SystemDBs\Pathways.ldf" />
   </Component>

编辑1

如果遇到这些问题,查看日志总是有用的,要生成日志,请运行以下命令

msiexec / i“\ PATHTOSETUP \ setup.msi”/ l * xv

x用于额外调试,可能会产生太多噪音,因此您可能会排除该开关,但是详细的v通常非常有用。

如果上述建议没有解决,可以将日志粘贴到http://pastebin.com/

之类的地方

编辑2

确定。 pathwaysmdf文件是无版本的。当谈到升级时,Windows Installer会比较当前文件和新文件,如果它们都是未版本控制且文件已更改,则假定用户已更改它并因此将其保留。这个比较是在keypath上完成的,在你的例子中是pathwaysmdf文件。要解决此问题,请创建一个虚拟文件或注册表项作为组件键路径。我会建议像注册表项

HKLM\Software\YOURCOMPANY\YOURPRODUCT\Database\Isinstalled = 1