[英]WiX: Patch installer superseding previous versions (1.0.0 -> 1.0.1, 1.0.0 -> 1.0.2, 1.0.1 -> 1.0.2, aso.)
[英]Wix - Superseding patch doesn't do anything
我已經看到很多這樣的問題了,但是我找不到任何問題,但是我已經找到了一些問題。 我正在使用純粹的wix來構建小型升級。
這個問題是一個很像我的場景的例子,除了最后一部分。
這意味着我的補丁將始終包含前面的修補程序並相互取代。
場景:
在最后一個場景中,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。 否則,它們是相同的。
有什么想法嗎?
我終於讓它運轉了,這就是我找到的。 首先, 啟用MSI日志記錄 。
我發現兩個問題都導致了相同的行為。
我發現的第一個線索是來自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)。
所以我在這里給你的提示是:對你生成的片段進行差異,並確保來自基線的任何新文件在兩個補丁.wxs文件中都顯示相同的組件和文件ID ! 即使你已經認為你知道他們這樣做了。
第二個問題是我想使用WixNetfxExtension捆綁.Net:
問題是我在斷開連接的系統上嘗試安裝並將redist安裝程序放在bundle中,而不是放在bundle exectuable的'redist'子文件夾中。 同樣,即使已安裝.Net,安裝程序也放棄並將應用程序保留在其(錯誤)升級狀態。 這真的不應該發生,特別是因為.Net是一個先決條件,所以我可能已經為捆綁做了其他事情,阻止它以錯誤的方式行事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.