2017-02-22 19 views
1

我正在使用引導程序來包含單個MSI。如果我已經安裝了該軟件包,然後通過啓動軟件包EXE重新安裝,它可以檢測到該軟件包已安裝。但是,如果我重新構建解決方案,即使沒有單行代碼更改,捆綁軟件安裝EXE也不會檢測到該捆綁包已安裝,而是會安裝新版本(在程序和功能表中創建重複條目),但跳過安裝MSI。如果我啓動MSI,它將檢測到已經安裝了相同的軟件包。 這會引起很大的問題,因爲我每天都有構建安裝程序和應用程序的工作,所以無法檢測是否安裝了相同的版本。 燒傷配置簡單wix工具集引導程序無法檢測到重建後安裝的軟件包

<Bundle Name="ProductName" Version="1.0.0.0" Manufacturer="CompanyName" 
     UpgradeCode="28485414-29d0-4b3d-ba8c-33b5f993dfc3"> 
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.HyperlinkSidebarLicense"> 
    <bal:WixStandardBootstrapperApplication 
    LicenseUrl="" 
    LogoFile="..\Resources\Icon\small.png" 
    ShowVersion="yes" 
    SuppressOptionsUI="yes" 
    LogoSideFile="..\Resources\Icon\banner-side.bmp" 
    LocalizationFile="HyperlinkTheme.wxl" 
    xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" /> 
</BootstrapperApplicationRef> 
    <Chain> 
    <MsiPackage SourceFile="$(var.Installer.TargetPath)" Id="MsiEnUs" DisplayInternalUI="yes"/> 
    </Chain> 
</Bundle> 

而且MSI包被定義爲

<Product Id="*" Name="$(var.ProductDisplayName)" Language="1033" Version="$(var.ProductVersion)" Manufacturer="$(var.CompanyName)" UpgradeCode="c1b3c617-0af8-4df8-8dff-e893f7bbb30a"> 
<Package InstallerVersion="200" Compressed="yes" Platform="x64" InstallPrivileges="elevated" InstallScope="perMachine" /> 
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 

檢查日誌,我能找到的WixBundleInstalled爲0

回答

3

WixBundleInstalled指這個執行包。每次重建時,都會生成一個帶有相同升級代碼的新的包。這種行爲很像MSI中的產品ID。您可以在運行引導程序時看到此GUID是什麼,引導程序會將一些信息提取到%temp%目錄中的文件夾中,這些文件夾用代表引導程序自身的GUID值命名。

當你看着WixBundleInstalled,安裝實際檢查註冊表位置

SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{ThisBundleGUID}爲「已安裝」鍵,並檢查它的值是1

你的引導程序的每一個新的版本,你做爲該特定軟件包exe生成一個新的GUID。

您遇到的問題是默認wix刻錄引導程序不支持支持相同的版本升級。相反,它們將與同一版本的其他引導程序並排安裝。您可以修改引導程序代碼以「支持」此功能,但通常可接受並且不太容易出錯的避免此問題的方法是,通過在每個構建版本中增加版本的一部分來實現適當的版本控制。

請注意,WiX Burn Bootstrappers可以比較Window MSI忽略第四部分的第四部分。

+0

謝謝你的回答。這解釋了burn *每次編譯時都會生成一個新的GUID。不過,我仍然有疑問:1.是否像MSI一樣提供燒錄的GUID? 2.使用MSI(我使用黑暗從EXE中提取MSI)進行安裝時,實際上無法安裝,但使用EXE時,會跳過MSI安裝。這是否有可能報告說根本沒有安裝MSI? – John

+0

1.我相信這個GUID是無法控制的,除非你想重寫burn.exe,但我不確定它是如何生成的,我沒有做一些搜索,但找不到它。 2.如果您每次構建引導程序時沒有構建MSI,則每次安裝時都會包含完全相同的MSI,在這種情況下,不安裝它就是正確的行爲。您可以在%temp%中查看引導程序運行的日誌,並查看安裝的檢測,計劃和執行階段以及計劃在引導程序中定義的軟件包的計劃。 –

+0

謝謝。我將使用內部編號來區分構建。每次都重建MSI,但我想它已經有GUID,所以它知道是同一產品/相同版本。 – John

相關問題