2014-10-16 166 views
0

我有兩個Wix項目 - 一個創建MSI,另一個將其引導至exe文件。卸載Bundle會導致msi安裝

使用exe,我可以安裝應用程序沒有問題,但是當我嘗試卸載應用程序時,我再次得到我的安裝程序的設置菜單,它試圖再次安裝自己。

如果我取消重新安裝,並嘗試再次卸載,它會按預期工作。

如果我使用msi執行相同的工作流程,則按預期工作。

這裏是我的引導程序是這樣的:

<Bundle Name="name" Version="2.0.0.0" Manufacturer="company" UpgradeCode="guid" IconSourceFile="icon.ico" DisableModify="yes"> 

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> 
     <bal:WixStandardBootstrapperApplication LicenseFile="license.rtf" SuppressOptionsUI="yes" SuppressRepair="yes" /> 
    </BootstrapperApplicationRef> 

<Chain> 
    <MsiPackage SourceFile="application.msi" DisplayInternalUI="yes" EnableFeatureSelection="yes"/> 
</Chain> 
</Bundle> 

任何想法?

更新

按照建議,我已經修改了我的包以下(集EnableFeatureSelection沒有),但它仍然顯示相同的行爲。

<Bundle Name="name" Version="2.0.0.0" Manufacturer="company" UpgradeCode="guid" IconSourceFile="icon.ico" DisableModify="yes"> 

    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense"> 
     <bal:WixStandardBootstrapperApplication LicenseFile="license.rtf" SuppressOptionsUI="yes" SuppressRepair="yes" /> 
    </BootstrapperApplicationRef> 

<Chain> 
    <MsiPackage SourceFile="application.msi" DisplayInternalUI="yes" EnableFeatureSelection="no"/> 
</Chain> 
</Bundle> 

更新#2

我注意到,當我卸載,第一次和它啓動的安裝設置,如果我取消安裝,它失敗了,但它已經取消了所有的文件和註冊表項。第二次運行卸載將從添加/刪除程序中刪除條目(成功)。

更新#3

這裏的UI序列微星

<UI> 
    <DialogRef Id="WelcomeDlg"/> 
    <DialogRef Id="LicenseAgreementDlg"/> 
    <DialogRef Id="VerifyReadyDlg"/> 
    <DialogRef Id="ErrorDlg" /> 
    <DialogRef Id="FatalError" /> 
    <DialogRef Id="FilesInUse" /> 
    <DialogRef Id="UserExit" /> 
    <DialogRef Id="SelectDbDlg" /> 

    <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg"></Publish> 
    <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">NOT Installed</Publish> 
    <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="SelectDbDlg">NOT Installed</Publish> 
    <Publish Dialog="SelectDbDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish> 
    <Publish Dialog="SelectDbDlg" Control="Next" Event="NewDialog" Value="DbCreateCredDlg">NOT Installed</Publish> 
    <Publish Dialog="DbCreateCredDlg" Control="Back" Event="NewDialog" Value="SelectDbDlg">NOT Installed</Publish> 
    <Publish Dialog="DbCreateCredDlg" Control="Next" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish> 

    <Publish Dialog="SetupTypeDlg" Control="Back" Event="NewDialog" Value="DbCreateCredDlg">NOT Installed</Publish> 
    <Publish Dialog="SetupTypeDlg" Control="Next" Event="NewDialog" Value="FeaturesDlg">NOT Installed</Publish> 
    <Publish Dialog="SetupTypeDlg" Control="CustomButton" Event="NewDialog" Value="FeaturesDlg">NOT Installed</Publish> 
    <Publish Dialog="SetupTypeDlg" Control="TypicalButton" Event="NewDialog" Value="VerifyReadyDlg">NOT Installed</Publish> 
    <Publish Dialog="SetupTypeDlg" Control="CompleteButton" Event="NewDialog" Value="VerifyReadyDlg">NOT Installed</Publish> 

    <Publish Dialog="FeaturesDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish> 

    <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="SetupTypeDlg">NOT Installed</Publish> 
    <Publish Dialog="ExitDialog" Control="Back" Event="EndDialog" Value="VerifyReadyDlg">1</Publish> 
    <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish> 
</UI> 
+0

EnableFeatureSelection \t YesNoType \t指定捆綁包是​​否允許單獨控制msi包內的功能的安裝狀態。管理功能選擇需要特別小心,以確保軟件包的安裝,修改,更新和卸載行爲始終正確。默認值是「否」。 – Isaiah4110 2014-10-16 15:40:40

+0

爲了測試,將屬性「EnableFeatureSelection」更改爲NO並查看它是否工作正常。 – Isaiah4110 2014-10-16 15:41:11

+0

更新了原始帖子以反映更改包。 – MrAppa 2014-10-16 15:53:14

回答

2

經過幾天的捅它後,我發現這個問題,這是由於MSI在卸載時(默默地)拋出一個錯誤。我定義了一些自定義操作,但是我沒有將它們設置爲僅在安裝時運行。

所以我不得不在此之前:

<InstallExecuteSequence> 
    <Custom Action="ServerName.Set" Before="AdjustConfigurationFile"/> 
    <Custom Action="AdjustConfigurationFile" Before="InstallFinalize"/> 
    <Custom Action="CreateDatabase" After="InstallFinalize"/> 
</InstallExecuteSequence> 

在卸載雖然,自定義操作將運行調整配置文件(這將失敗becaue的文件不再exisited),這將導致應用程序回滾,這會導致安裝程序再次運行。

更改安裝順序以下修復了這個問題:

<InstallExecuteSequence> 
    <Custom Action="ServerName.Set" Before="AdjustConfigurationFile">NOT Installed</Custom> 
    <Custom Action="AdjustConfigurationFile" Before="InstallFinalize">NOT Installed</Custom> 
    <Custom Action="CreateDatabase" After="InstallFinalize">NOT Installed</Custom> 
</InstallExecuteSequence> 

這裏的外賣是,如果你卸載引導程序和安裝程序UI再次顯示出來,微星扔一個錯誤,你應該仔細檢查邏輯。

0

添加到您的MsiPackage元素InstallCondition屬性與NOT Installed。如果你想在升級時運行安裝,那麼ypu必須添加or UPGRADINGPRODUCTCODE

+0

試過這個,它沒有工作。 – MrAppa 2014-10-17 14:30:13

2

這聽起來像是MSI存在問題。由於您有DisplayInternalUI="yes",因此屬於MSI的UI是您在添加或刪除應用程序時看到的內容。我的猜測是,MSI安裝對話框的顯示順序或顯示對話框的條件存在一些問題。在沒有看到MSI上設置的選項或者UI對話框的發佈順序以及它們顯示的條件的情況下,很難說明問題出在哪裏。您的MSI UI片段看起來像什麼樣的例子將有助於進一步診斷這是否是問題。

---- ----編輯

正如我預期的UI遵循的唯一路徑是安裝路徑,並在WelcomeDlg元素力量就沿着這條道路的條件。爲了解決這個問題,刪除當前WelcomeDlg並替換爲以下兩行:

<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed AND NOT PATCH</Publish> 
<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish> 

這將使用bootstrapers歡迎屏幕,以確定用戶想卸載,因爲沒有Installed條件發佈VerifyReadyDlg ,不用發佈任何MSI的UI對話框就直接跳到unistallation。這似乎是你想要做的,但是,如果你確實想在MSI中設置一系列對話框來指導用戶完成卸載,你可以在這裏添加這些對話框。

+0

使用msi的UI信息更新了問題。 – MrAppa 2014-10-20 11:57:59

+0

關閉WelcomeDlg行並未解決問題。然而,這似乎正在發生。當我卸載程序時,典型的卸載程序正在發生(這似乎是刪除文件)。但是,文件被刪除後,MSI的設置屏幕再次被調用。現在這些文件已經不存在了,所以它認爲這是一個安裝。 – MrAppa 2014-10-20 15:33:47