2016-06-25 145 views
1

我很難獲得一個以.NET 4.5爲工作目標的WiX自定義引導程序應用程序。WiX自定義引導程序應用程序和.NET 4.5

我在我的Bundle.wxs中有以下行。

<PackageGroupRef Id="NetFx45Web" /> 

My BootstrapperCore.config如下所示。

<configuration> 
    <configSections> 
     <sectionGroup name="wix.bootstrapper" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore"> 
      <section name="host" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" /> 
     </sectionGroup> 
    </configSections> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <wix.bootstrapper> 
     <host assemblyName="FSCustomBA" /> 
    </wix.bootstrapper> 
</configuration> 

我已經嘗試過多種變化。

例如,我也嘗試了以下內容。

<host assemblyName="FSCustomBA"> 
    <supportedFramework version="v4\Full" /> 
    <supportedFramework version="v4\Client" /> 
</host> 

以下。

<host assemblyName="FSCustomBA"> 
    <supportedFramework version="v4.5\Full" /> 
    <supportedFramework version="v4.5\Client" /> 
</host> 

以下。

<host assemblyName="FSCustomBA"> 
    <supportedFramework version="v4.5" /> 
</host> 

以下。

<host assemblyName="FSCustomBA"> 
    <supportedFramework version="v4.5\Full" /> 
</host> 

以下。

<host assemblyName="FSCustomBA"> 
    <supportedFramework version="v4.5\Client" /> 
</host> 

不管是什麼我都試過了,當我在沒有安裝.NET 4.5的系統上運行我的安裝包,提示我安裝.NET 4.5。一旦我按下「同意並安裝」按鈕,安裝程序包就會崩潰。當我嘗試再次運行安裝程序包時,它會在顯示按鈕之前掛起。即使重新啓動後,它也會掛起。我需要從系統映像恢復我的系統,然後再次運行。

誰能告訴我我做錯了什麼?

我使用的是WiX 3.10。

到目前爲止,我唯一的線索是關於結果日誌文件中的以下行。

[1A14:1778][2016-06-28T10:01:17]i000: The prerequisites were already installed. The bootstrapper application will not be reloaded to prevent an infinite loop. 

這是在Stack Overflow的另一個問題,Prerequisite bootstrapper application fails to install .NET 4.5。這個問題的答案之一表明答案是在BootstrapperCore.config文件的supportedRuntime元素中設置sku值。但是,我已經做到了。其他事情正在發生。

+0

我對發生了什麼有一個線索。我遵循了WiX的一部分WixBA和TestBA應用程序的例子,它是在模式$ {ProjectName} .BootstrapperCore.config之後命名BootstrapperCore.config文件。我沒有意識到的是,當通過Payload元素將此文件包含在捆綁包中時,您需要使用Name屬性將其重命名爲BootstrapperCore.config。 –

+0

現在我得到另一個錯誤:「0x80131040:找到的程序集的清單定義與程序集引用不匹配。」 –

+0

通過將與我的Custom BA關聯的Payload元素的SuppressSignatureVerification屬性設置爲yes,我解決了錯誤「0x80131040:定位的程序集清單定義與程序集引用不匹配」。我認爲這只是必要的,因爲我正在使用測試(自簽名)證書而不是可信證書。 –

回答

1

我發佈了一個自己的問題的答案,希望它會受益於其他遇到類似問題的人。

事實證明,問題不在於我的BootstrapperCore.config文件的內容,而是以我的BootstrapperCore.config文件的名稱。也就是說,我的BootstrapperCore.config文件的最終內容結果正如我在我的問題中所表明的那樣,如下所示。

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <sectionGroup name="wix.bootstrapper" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.BootstrapperSectionGroup, BootstrapperCore"> 
      <section name="host" type="Microsoft.Tools.WindowsInstallerXml.Bootstrapper.HostSection, BootstrapperCore" /> 
     </sectionGroup> 
    </configSections> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <wix.bootstrapper> 
     <host assemblyName="FSCustomBA" /> 
    </wix.bootstrapper> 
</configuration> 

當我嘗試了多個涉及使用supportedFramework元素的變體時,我在錯誤的軌道上。結果問題與此無關。相反,問題在於我遵循了屬於WiX的WixBA和TestBA應用程序的示例,該示例將在模式$ {ProjectName} .BootstrapperCore.config後命名BootstrapperCore.config文件。由於我的項目名爲FSCustomBA,我的BootstrapperCore。config文件被命名爲FSCustomBA.BootstrapperCore.config。

這很好。它可以工作。但是,我沒有意識到的是該文件必須在安裝程序包運行時創建的.ba目錄的上下文中命名爲BootstrapperCore.config。由於我沒有意識到這一點,我將文件包含在我的包中,如下所示。

<Payload SourceFile="$(var.FSCustomBA.TargetDir)FSCustomBA.BootstrapperCore.config" /> 

這是行不通的。以下將會。

<Payload Name="BootstrapperCore.config" SourceFile="$(var.FSCustomBA.TargetDir)FSCustomBA.BootstrapperCore.config" /> 

請注意在Payload元素中使用Name屬性。這就是說在.ba目錄中命名文件BootstrapperCore.config。

我解決了這個問題之後,我接下來遇到了以下錯誤:「0x80131040:找到的程序集清單定義與程序集引用不匹配。」在日誌文件中,這被記錄爲無法加載Managed Bootstrapper應用程序。

爲了解決此問題,我只需將與我的Custom BA關聯的Payload元素的SuppressSignatureVerification屬性設置爲yes。例如,我正在使用的Payload元素如下。

<Payload SourceFile="$(var.FSCustomBA.TargetDir)FSCustomBA.dll" SuppressSignatureVerification="yes" /> 

我認爲這只是由於我使用的代碼簽名證書而必需的。

我的僱主使用威瑞信的官方代碼簽名證書進行所有官方建設。但是,即使是大多數開發人員,這個證書的細節都是保密的。開發人員在日常工作中使用自簽名證書。這適用於大多數情況,但顯然不適用於此。

現在我已經解決了這些問題,我的自定義引導程序應用程序正在加載,除了一個小錯誤,按預期工作。

我希望通過記錄我的發現,我將拯救他人頭痛,我不得不通過解決這個問題。

+0

如果您忘記將配置文件包含在有效載荷中,則會發生同樣的問題。謝謝! –

相關問題