我已经看到很多这样的问题,但是我找不到任何问题,但是我已经找到了一些问题。 I'm using purely wix 进行小幅升级。
This question是一个非常类似于我的场景的例子,除了最后一部分。
这意味着我的补丁将始终包含前面的修补程序并相互取代。
方案:
在最后一个场景中,msp运行没有抱怨但很快。之后的原因是显而易见的,因为实际上什么也没做。在ARP中,修补程序在“已安装的更新”下以1.0.2版列出,但目标产品未更新,添加到修补程序(C.dll)的文件未添加到安装文件夹中。同样适用于更新,第二个补丁不会修改文件。
卸载1.0.2时,删除了补丁(C.dll)中包含的文件,包括已经安装了1.0.1(B.dll)的文件。
ProductCode未更改 UpgradeCode保持不变。
这是Patch.wxs的内容:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch MinorUpdateTargetRTM="yes"
AllowRemoval="yes"
Manufacturer="{Manufacturer}"
DisplayName="{ProductName} {Version} Patch"
Description="{ProductName} {Version} Patch"
Classification="Update"
TargetProductName="{ProductName}" >
<Media Id="5000" Cabinet="Patch.cab" EmbedCab="yes">
<PatchBaseline Id="RTM">
<Validate ProductVersionOperator="LesserOrEqual" ProductId="yes" UpgradeCode="yes" ProductVersion="Update" />
</PatchBaseline>
</Media>
<PatchFamilyRef Id="PatchFamily"/>
</Patch>
<Fragment>
<PatchFamily Id='PatchFamily' Version='{Version}' Supersede='yes'>
</PatchFamily>
</Fragment>
</Wix>
在此片段中,{Version}在第一个补丁中为1.0.1,在第二个补丁中为1.0.2。否则,它们是完全相同的。
对此有何想法?
答案 0 :(得分:2)
我终于开始工作了,这就是我找到的。 首先,enable MSI logging 我发现两个问题都导致了相同的行为。
我找到的第一条线索是来自MSI日志的这两个片段:
1.0.1安装:
MSI (s) (A4:60) [09:42:30:917]: SELMGR: New components have been added to feature 'ProductFeature'
MSI (s) (A4:60) [09:42:30:918]: SELMGR: Component 'comp_F8F80909F3D340B19A4CF3E6E172F386' is a new component added to feature 'ProductFeature'
....
MSI (s) (A4:60) [09:42:33:077]: Executing op: ComponentRegister(ComponentId={B49318A5-8DDE-449F-9B77-B67A3F7F8952},KeyPath=C:\[...]\B.dll,State=3,,Disk=1,SharedDllRefCount=0,BinaryType=0)
这是补丁中添加的新文件(B.dll)。
1.0.2安装:
MSI (s) (A4:70) [09:47:02:508]: SELMGR: ComponentId '{B49318A5-8DDE-449F-9B77-B67A3F7F8952}' is registered to feature 'ProductFeature', but is not present in the Component table. Removal of components from a feature is not supported!
MSI (s) (A4:70) [09:47:02:508]: SELMGR: Removal of a component from a feature is not supported
我担心的原因很简单,有点尴尬。 B.dll已被标记为新组件Id。出于某种原因,安装程序(直接运行msi / msp)没有说出任何关于错误的内容,只是放弃了但是让应用程序注册了,就好像它处于升级状态(ARP中为1.0.2)。
所以我的提示是:对生成的片段进行差异,并确保两个补丁中基线的所有新文件都显示相同的组件和文件ID .wxs文件!即使你已经认为你知道他们这样做了。
第二个问题是我想使用the WixNetfxExtension捆绑.Net:
问题是我在断开连接的系统上尝试安装并将redist安装程序放在bundle中,而不是放在bundle exectuable的'redist'子文件夹中。同样,即使已安装.Net,安装程序也放弃并将应用程序保留在其(错误)升级状态。这真的不应该发生,特别是因为.Net是一个先决条件,所以我可能已经为捆绑做了其他事情,阻止它以错误的方式行事。