gpt4 book ai didi

.net - WiX 自定义 Bootstrap 应用程序和 .NET 4.5

转载 作者:行者123 更新时间:2023-12-02 10:47:03 24 4
gpt4 key购买 nike

我在获取面向 .NET 4.5 的 WiX 自定义 Bootstrap 应用程序时遇到困难。

我的 Bundle.wxs 中有以下行。

<PackageGroupRef Id="NetFx45Web" />

我的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 值。然而,我已经做到了这一点。还有其他事情正在发生。

最佳答案

我发布自己问题的答案,希望对遇到类似问题的其他人有所帮助。

事实证明,问题不在于我的 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:找到的程序集的 list 定义与程序集引用不匹配。”在日志文件中,这被记录为无法加载托管 Bootstrap 应用程序。

为了解决此问题,我只需将与自定义 BA 关联的 Payload 元素的 SuppressSignatureVerification 属性设置为 yes。例如,我正在使用的Payload元素如下。

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

我认为这只是由于我正在使用的代码签名证书而有必要。

我的雇主对所有官方版本使用 VeriSign 的官方代码签名证书。然而,即使对大多数开发人员来说,该证书的详细信息也是保密的。相反,开发人员在日常工作中使用自签名证书。这适用于大多数事情,但显然不适用于此。

现在我已经解决了这些问题,我的自定义 Bootstrap 应用程序正在加载,并且除了一个小错误之外,一切都按预期工作。

我希望通过记录我的发现,可以让其他人免去解决这个问题所经历的麻烦。

关于.net - WiX 自定义 Bootstrap 应用程序和 .NET 4.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38023723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com