You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wix Bootstrapper自定义UI关联报错求助及教程推荐

解决Wix Bootstrapper自定义UI关联错误及完整配置指南

首先,咱们来拆解你遇到的错误:Either 'Microsoft.Tools.WindowsInstallerXml.AssemblyDefaultWixExtensionAttribute' was not defined or the type defined in extension '..\Setup\bin\Debug\PETSetup.dll' could not be loaded.

这个错误的核心原因是你错误地使用了Wix扩展专用的Attribute,自定义Bootstrapper Application(BA)完全不需要这个属性,反而会导致Wix尝试把你的BA当成扩展加载,从而失败。下面是一步步的解决方法,以及完整的自定义BA配置教程:


一、立即修复现有错误

1. 移除错误的Attribute实例化

打开你的自定义UI主CS文件,删掉这一行完全多余的代码:

Microsoft.Tools.WindowsInstallerXml.AssemblyDefaultWixExtensionAttribute t = new Microsoft.Tools.WindowsInstallerXml.AssemblyDefaultWixExtensionAttribute(typeof(PETSetup));

这个Attribute是用来标记Wix扩展插件的,和自定义BA没有任何关系,保留它只会让Wix加载逻辑混乱。

2. 修正BootstrapperCore.config配置

确保你的BootstrapperCore.config文件(Bundle中作为Payload引用的那个)正确指定了自定义BA的类型,格式为命名空间.类名, 程序集名称。示例配置如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" />
  </startup>
  <appSettings>
    <!-- 替换成你的BA类的完全限定名和程序集名称 -->
    <add key="BootstrapperAssembly" value="PETSetup.PETSetup, PETSetup" />
  </appSettings>
</configuration>

同时要确保这个文件的复制到输出目录属性设置为始终复制,保证编译后能被Bundle找到。

3. 优化Bundle中的Payload配置

你当前的Bundle里引用了C:\Program Files (x86)\WiX Toolset v3.11\SDK\Microsoft.Deployment.WindowsInstaller.dll,建议改为引用自定义BA项目输出目录中的该文件(因为你已经把引用的复制本地设为True了),避免路径硬编码带来的问题:

<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost">
  <Payload SourceFile="X:\SS\Wix Installer\Setup\bin\Debug\BootstrapperCore.config"/>
  <Payload SourceFile="X:\SS\Wix Installer\Setup\bin\Debug\PETSetup.dll"/>
  <Payload SourceFile="X:\SS\Wix Installer\Setup\bin\Debug\Microsoft.Deployment.WindowsInstaller.dll"/>
</BootstrapperApplicationRef>

二、完整自定义Wix Bootstrapper UI分步教程

如果你需要从0到1搭建自定义BA,以下是完整步骤:

1. 创建自定义BA项目

  • 在Visual Studio中新建一个**Class Library (.NET Framework)**项目(目标框架选.NET Framework 4.0及以上,和你Bundle要求的.NET版本一致)。
  • 引用Wix SDK中的核心DLL:
    • Microsoft.Tools.WindowsInstallerXml.Bootstrapper.dll(路径:C:\Program Files (x86)\WiX Toolset v3.11\SDK)
    • 若需要操作MSI数据库,额外引用Microsoft.Deployment.WindowsInstaller.dll
  • 将这两个引用的复制本地属性设为True,确保编译后输出到项目目录。

2. 添加BootstrapperCore.config

  • 在项目中添加XML文件,命名为BootstrapperCore.config,设置复制到输出目录为始终复制,内容参照上面的示例。

3. 编写自定义BA逻辑

创建继承自BootstrapperApplication的类,实现Run方法初始化你的WPF/WinForms UI(以你现有的WPF代码为例,修正后如下):

using Microsoft.Tools.WindowsInstallerXml.Bootstrapper;
using PETSetup.Models;
using PETSetup.ViewModels;
using PETSetup.Views;
using System.Windows.Threading;

namespace PETSetup
{
    public class PETSetup : BootstrapperApplication
    {
        public static Dispatcher Dispatcher { get; set; }

        protected override void Run()
        {
            Dispatcher = Dispatcher.CurrentDispatcher;
            var model = new BootstrapperApplicationModel(this);
            var viewModel = new InstallViewModel(model, Engine);
            var view = new InstallView(viewModel);
            
            model.SetWindowHandle(view);
            Engine.Detect();
            view.Show();
            
            Dispatcher.Run();
            Engine.Quit(model.FinalResult);
        }
    }
}

4. 关联Bundle与自定义BA

  • 在Wix Bundle项目中,确保已添加BalExtension的引用(右键项目→添加引用→Wix扩展→勾选BalExtension)。
  • 使用BootstrapperApplicationRef指向ManagedBootstrapperApplicationHost,并添加必要的Payload(就是你自定义BA输出的文件)。

5. 编译测试

  • 先编译自定义BA项目,确认输出目录有PETSetup.dll、BootstrapperCore.config以及相关依赖DLL。
  • 再编译Bundle项目,若没有错误,运行生成的exe即可看到自定义UI。

内容的提问来源于stack exchange,提问作者Gavin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:46:46