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

UWP打包的WPF .NET 6应用经URI/执行别名启动时弹出空白窗口

问题:MSIX打包WPF应用通过URI/别名启动时出现空白窗口

我将一个仅含单个按钮的WPF示例项目用Windows 10自带的makeappx打包为MSIX包,正常启动应用运行正常,但通过URI激活(WpfApp1:)或执行别名(WpfApp1.exe)启动时,会同时打开WPF主窗口与一个空白窗口,寻求原因及解决办法。

相关配置文件

Appxmanifest.xml

<?xml version="1.0" encoding="utf-8"?>
<Package
  xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
  xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
  xmlns:uap5="http://schemas.microsoft.com/appx/manifest/uap/windows10/5"
  xmlns:uap10="http://schemas.microsoft.com/appx/manifest/uap/windows10/10"
  xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities"
  IgnorableNamespaces="uap rescap">

    <Identity Name="WpfApp1" Publisher="CN=Something, O=Another thing, L=City, C=DK" Version="1.0.0.0" ProcessorArchitecture="x86" />
    <Properties>
        <DisplayName>WpfApp1</DisplayName>
        <PublisherDisplayName>Something</PublisherDisplayName>
        <Logo>Images\StoreLogo.png</Logo>
    </Properties>
    <Resources>
        <Resource Language="EN-US" />
    </Resources>
    <Dependencies>
        <TargetDeviceFamily Name="MSIXCore.Desktop" MinVersion="6.1.7601.0" MaxVersionTested="10.0.20348.0" />
        <TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.19041.0" MaxVersionTested="10.0.20348.0" />
    </Dependencies>
    <Applications>
        <Application Id="WpfApp1" Executable="WpfApp1.exe" EntryPoint="windows.fullTrustApplication">
            <Extensions>
                <uap5:Extension Category="windows.appExecutionAlias">
                    <uap5:AppExecutionAlias>
                        <uap5:ExecutionAlias Alias="WpfApp1.exe"/>
                    </uap5:AppExecutionAlias>
                </uap5:Extension>
            </Extensions>
            <uap:VisualElements
                BackgroundColor="#464646"
                DisplayName="WpfApp1"
                Square150x150Logo="Images\StoreLogo.png"
                Square44x44Logo="Images\Square44x44Logo.targetsize-24_altform-unplated.png"
                Description="A useful description" />
        </Application>
    </Applications>
</Package>

构建流水线打包任务

- task: PowerShell@2
  displayName: 'MSIX Packaging'
  inputs:
    targetType: 'inline'
    script: |
      & 'C:\Program Files (x86)\Windows Kits\10\App Certification Kit\makeappx.exe' pack /d 'path\to\output\' /p test.msix

原因分析

空白窗口是MSIX容器在协议激活/别名启动这类非常规入口激活全信任应用时,自动创建的临时窗口。由于你的WPF应用未处理这类激活场景的窗口逻辑,系统临时窗口和应用自身主窗口同时加载,导致双窗口出现。

解决办法

1. 完善Appxmanifest的URI激活配置

在<Application>节点的<Extensions>中添加URI协议激活声明,让系统明确应用的激活入口:

<Extensions>
    <!-- 保留原有别名扩展 -->
    <uap5:Extension Category="windows.appExecutionAlias">
        <uap5:AppExecutionAlias>
            <uap5:ExecutionAlias Alias="WpfApp1.exe"/>
        </uap5:AppExecutionAlias>
    </uap5:Extension>
    <!-- 添加URI激活扩展 -->
    <uap:Extension Category="windows.protocol">
        <uap:Protocol Name="wpfapp1">
            <uap:DisplayName>WpfApp1 URI Protocol</uap:DisplayName>
        </uap:Protocol>
    </uap:Extension>
</Extensions>

2. 修改WPF应用代码,处理激活事件

在App.xaml.cs中重写激活相关方法,确保只加载应用主窗口,抑制系统临时窗口:

using System;
using System.Windows;

namespace WpfApp1
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            // 直接创建并显示主窗口,覆盖系统临时窗口
            MainWindow = new MainWindow();
            MainWindow.Show();
            
            // 若需处理URI参数,可解析e.Args数组
            // if (e.Args.Length > 0) { /* 处理参数逻辑 */ }
            
            // 不要调用base.OnStartup(e),避免重复创建窗口
        }

        protected override void OnActivated(EventArgs e)
        {
            // 确保激活时主窗口已存在并显示
            if (MainWindow == null)
            {
                MainWindow = new MainWindow();
                MainWindow.Show();
            }
            base.OnActivated(e);
        }
    }
}

3. 重新打包测试

修改完成后,重新执行makeappx打包、签名、安装应用,再次测试URI激活(WpfApp1:)和别名启动(WpfApp1.exe),空白窗口将不再出现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:34:55