使用 "Patch Creation Properties" 创建 Wix ToolSet 补丁
Wix ToolSet Patch Creation Using "Patch Creation Properties"
首先,我想重申一下,我是安装程序和补丁方面的完全菜鸟,并且一直靠 interwebz 上的文章生活。
快速背景:我们已经创建了一个安装程序,该安装程序 "installs" 一个 Web 应用程序 - 创建 IIS 服务、数据库等。对于后续版本,我们计划使用补丁进行较小的升级。我们为此应用程序使用 .NET C#。
我一直在尝试使用来自 wix 站点的 "Patch Creation Properties" 教程为项目创建补丁:http://wixtoolset.org/documentation/manual/v3/patching/patch_building.html
我设法创建了一个补丁,它确实有效,但我注意到它只更改了 html、js 和 css 文件以及网络配置。我对 .cs 文件所做的任何更改都没有反映出来。我假设 DLL 文件没有被补丁替换。
下面是我对 patch.wxs 的配置:
<PatchCreation
Id="{real guid heere}"
CleanWorkingFolder="yes"
OutputPath="C:\Outputpath\patch.pcp"
WholeFilesOnly="yes" >
<PatchInformation
Description="Project 3.0.10 Patch"
Manufacturer="project"/>
<PatchMetadata
AllowRemoval="yes"
Description=" Patch v3.0.10"
ManufacturerName="ManufacturerName"
TargetProductName="TargetProductName"
MoreInfoURL="www.google.com"
Classification="Update"
DisplayName="ManufacturerNamePatch"
MinorUpdateTargetRTM="1"/>
<Family DiskId="5000"
MediaSrcProp="Patch"
Name="patchtest">
<UpgradeImage SourceFile="C:\output\test\new\admin\Setup.msi"
Id="UpgradeImage">
<TargetImage SourceFile="C:\output\test\old\admin\Setup.msi"
Order="2"
Id="TargetImage"
IgnoreMissingFiles="no" />
</UpgradeImage>
</Family>
<PatchSequence PatchFamily="SCMPatchFamily"
Supersede="yes" />
</PatchCreation>
我用日志安装了补丁,注意到了这一点:
MSI (s) (18:F0) [17:37:18:316]: 文件: C:\Location\Website.Web.dll;不会覆盖;不会打补丁;现有文件的版本相同
我一直在网上寻找答案,但没有找到解决办法。
非常感谢。
线索就在留言里!服务包、补丁、修补程序都依赖于根据文件版本更新二进制文件。这不仅通过不安装不需要更改的文件来加快速度,还确保您不会用旧版本覆盖更高版本。创建日期(因为我的文件较新而应该替换文件的想法)不适用。文件版本对于识别客户端是否具有最新版本也很有用。因此,增加文件版本,如果它是托管代码,则不需要更改 AssemblyVersion,只需为实际已更改的文件添加一个 AssemblyFileVersion,增加到现有安装版本之上。
https://msdn.microsoft.com/en-us/library/aa367835(v=vs.85).aspx
首先,我想重申一下,我是安装程序和补丁方面的完全菜鸟,并且一直靠 interwebz 上的文章生活。
快速背景:我们已经创建了一个安装程序,该安装程序 "installs" 一个 Web 应用程序 - 创建 IIS 服务、数据库等。对于后续版本,我们计划使用补丁进行较小的升级。我们为此应用程序使用 .NET C#。
我一直在尝试使用来自 wix 站点的 "Patch Creation Properties" 教程为项目创建补丁:http://wixtoolset.org/documentation/manual/v3/patching/patch_building.html
我设法创建了一个补丁,它确实有效,但我注意到它只更改了 html、js 和 css 文件以及网络配置。我对 .cs 文件所做的任何更改都没有反映出来。我假设 DLL 文件没有被补丁替换。
下面是我对 patch.wxs 的配置:
<PatchCreation
Id="{real guid heere}"
CleanWorkingFolder="yes"
OutputPath="C:\Outputpath\patch.pcp"
WholeFilesOnly="yes" >
<PatchInformation
Description="Project 3.0.10 Patch"
Manufacturer="project"/>
<PatchMetadata
AllowRemoval="yes"
Description=" Patch v3.0.10"
ManufacturerName="ManufacturerName"
TargetProductName="TargetProductName"
MoreInfoURL="www.google.com"
Classification="Update"
DisplayName="ManufacturerNamePatch"
MinorUpdateTargetRTM="1"/>
<Family DiskId="5000"
MediaSrcProp="Patch"
Name="patchtest">
<UpgradeImage SourceFile="C:\output\test\new\admin\Setup.msi"
Id="UpgradeImage">
<TargetImage SourceFile="C:\output\test\old\admin\Setup.msi"
Order="2"
Id="TargetImage"
IgnoreMissingFiles="no" />
</UpgradeImage>
</Family>
<PatchSequence PatchFamily="SCMPatchFamily"
Supersede="yes" />
</PatchCreation>
我用日志安装了补丁,注意到了这一点:
MSI (s) (18:F0) [17:37:18:316]: 文件: C:\Location\Website.Web.dll;不会覆盖;不会打补丁;现有文件的版本相同
我一直在网上寻找答案,但没有找到解决办法。
非常感谢。
线索就在留言里!服务包、补丁、修补程序都依赖于根据文件版本更新二进制文件。这不仅通过不安装不需要更改的文件来加快速度,还确保您不会用旧版本覆盖更高版本。创建日期(因为我的文件较新而应该替换文件的想法)不适用。文件版本对于识别客户端是否具有最新版本也很有用。因此,增加文件版本,如果它是托管代码,则不需要更改 AssemblyVersion,只需为实际已更改的文件添加一个 AssemblyFileVersion,增加到现有安装版本之上。
https://msdn.microsoft.com/en-us/library/aa367835(v=vs.85).aspx