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

商店版桌面应用调用MddBootstrapInitialize失败求解决方案

解决Win32 MSIX打包应用调用MddBootstrapInitialize返回ERROR_NOT_SUPPORTED的问题

核心原因

MSIX打包的应用运行在C:\Program Files\WindowsApps的沙箱环境中,系统会通过AppxManifest.xml的依赖声明自动管理框架组件加载,手动调用MddBootstrapInitialize()会与系统的依赖解析机制冲突,从而返回ERROR_NOT_SUPPORTED。

解决方案

1. 在AppxManifest.xml中添加WinUI3依赖声明

通过清单告知系统自动加载WinUI3可再发行组件,无需手动调用MddBootstrapInitialize()。在Dependencies节点下添加WinUI3的包依赖:

<Dependencies>
  <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.22621.0" />
  <!-- 替换为你使用的WinUI3版本对应的依赖信息 -->
  <PackageDependency 
    Name="Microsoft.UI.Xaml.2.8" 
    Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" 
    MinVersion="8.2306.22001.0" />
</Dependencies>
  • 注意:Name和MinVersion需与你开发时使用的WinUI3版本匹配,可在项目的NuGet包引用中查看具体版本。

2. 在代码中区分打包/非打包场景调用逻辑

保留非MSIX场景下的MddBootstrapInitialize()调用,同时在MSIX打包场景下跳过该调用:

#include <windows.h>
#include <appmodel.h>

bool IsAppPackaged()
{
    UINT32 length = 0;
    LONG result = GetCurrentPackageFamilyName(&length, nullptr);
    return result != ERROR_INSUFFICIENT_BUFFER ? false : true;
}

// 初始化逻辑
void InitializeWinUI3()
{
    if (!IsAppPackaged())
    {
        // 非MSIX场景下调用MddBootstrapInitialize
        HRESULT hr = MddBootstrapInitialize(0x00010000, MddBootstrapInitializeOptions_None);
        if (FAILED(hr))
        {
            // 处理初始化失败
        }
    }
    // MSIX场景下系统自动加载依赖,无需手动初始化
}

3. 验证MSIX包的依赖配置

使用PowerShell命令检查包的依赖是否正确注册:

Get-AppxPackageDependency -PackageFamilyName "你的应用包族名"

若依赖缺失,需确保提交应用商店时清单中的依赖声明正确,或让用户手动安装对应版本的WinUI3可再发行组件。

4. 正确使用makemsix.exe打包

确保打包时指定了正确的AppxManifest.xml路径,并且没有遗漏依赖相关配置。可使用以下命令格式打包:

makemsix.exe pack -d "你的应用文件目录" -p "输出的MSIX包路径" -m "AppxManifest.xml"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:37:05