Распакованное приложение WinUI3 аварийно завершает работу при вызове Bootstrap.Initialize()

У меня есть приложение WinUI3, которое я хочу развернуть как неупакованное приложение, т. Е. Приложение, которое не использует формат упаковки MSIX.

Я следовал инструкциям, приведенным здесь: Инструкции для распакованных приложений C# WinUI 3, и это работает хорошо. Я могу запустить exe-файл, созданный в папке bin (отладка или выпуск), или отладить приложение, используя «распакованный» профиль.

Следующее, что я попробовал, - это сослаться на Windows AppSDK во время выполнения, чтобы использовать предоставляемые им функции. Это не работает, т.е. приложение вылетает или точнее просто останавливается.

Я выполнил следующие шаги: Расширенное руководство: создание и развертывание распакованного приложения, использующего Windows AppSDK.

В своем примере они используют консольное приложение с таким кодом запуска, вызов которого можно увидеть в их коде:

      namespace DynamicDependenciesTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Bootstrap.Initialize(0x00010000); // Call wrapper that enables the Windows App SDK APIs
            Console.WriteLine("Hello World!");

            // Release the DDLM and clean up.
            Bootstrap.Shutdown();
        }
    }
}

В моем приложении WinUI3 я вставил вызов Bootstrap.Initialize() в конструктор Appкласс. Однако как только линия с звонком на Initializeвыполняется, приложение останавливается без видимых исключений. Обе следующие реализации показывают одинаковое поведение.

Версия 1:

          /// <summary>
    /// Initializes the singleton application object.  This is the first line of authored code
    /// executed, and as such is the logical equivalent of main() or WinMain().
    /// </summary>
    public App()
    {
        this.InitializeComponent();            

        Bootstrap.Initialize(0x00010000); // --> application stops after this line
    }

Версия 2:

          /// <summary>
    /// Initializes the singleton application object.  This is the first line of authored code
    /// executed, and as such is the logical equivalent of main() or WinMain().
    /// </summary>
    public App()
    {
        this.InitializeComponent();

        try
        {
            int hresult;
            bool flag = Bootstrap.TryInitialize(0x00010000, out hresult); // --> application stops after this line
        }
        catch (Exception e)
        {

        }
    }

Кто-нибудь знает возможные причины такого поведения?
Проект WinUI3 ссылается на пакет Nuget «Microsoft.WindowsAppSDK», и я также установил в своей системе Windows AppSDK (стабильная версия 1).

Это первая часть моего файла проекта:

      <Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net5.0-windows10.0.19041</TargetFramework>
    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
    <RootNamespace>Test.UI</RootNamespace>
    <ApplicationManifest>app.manifest</ApplicationManifest>
    <Platforms>x86;x64;arm64</Platforms>
    <RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
    <PublishProfile>win10-$(Platform).pubxml</PublishProfile>
    <UseWinUI>true</UseWinUI>
    <ApplicationIcon>Resources\TASKL.ICO</ApplicationIcon>
    <EnableDefaultPageItems>false</EnableDefaultPageItems>
    <EnablePreviewMsixTooling>true</EnablePreviewMsixTooling>
    <WindowsPackageType>None</WindowsPackageType> // unpackaged
  </PropertyGroup>

2 ответа

Вам не нужно загружать свое приложение. Достаточно <WindowsPackageType>None</WindowsPackageType>. Он выполнит начальную загрузку автоматически.

Может быть, посмотрите https://github.com/microsoft/WindowsAppSDK/discussions/1935 или, скорее, https://github.com/microsoft/WindowsAppSDK/discussions/1933 . Существует ошибка, если у вас было установлено приложение «Галерея элементов управления WinUI 3» из Магазина Microsoft в любое время.

При использовании Bootstrap.Initialize(0x00010000) обязательно удалите функцию WindowsPackageType из файла YourProjectName.csproj:

      <!--<WindowsPackageType>None</WindowsPackageType>-->

Также убедитесь, что используемая версия WindowsAppSDK в пакетах вашего проекта совпадает с версией среды выполнения.

      powershell -c $(get-appxpackage micro*win*appruntime*).packagefullname
Другие вопросы по тегам