问题:
我需要这些文件,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”。这也行不通。请问有什么建议吗? 谢谢!
答案 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