Распакованное приложение 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