Руководство. Использование API начального загрузчика в приложении, упаковавшемся с внешним расположением или неупакованном, в котором используется Windows App SDK

В этой статье показано, как настроить приложение, которое не установлено с помощью MSIX (то есть упаковано с внешним расположением или распаковано), для использования API начального загрузчика, чтобы оно явным образом загружало среду выполнения Windows App SDK и вызывало api Windows App SDK. К приложениям, которые не устанавливаются через MSIX, относятся приложения, упакованные с внешним расположением, и неупакованные приложения.

Важно!

Начиная с Windows App SDK 1.0, по умолчанию при загрузке Windows App SDK из упаковаемого с внешним расположением или неупакованного приложения используется автоматическая инициализация с помощью <WindowsPackageType> свойства проекта (а также внесение дополнительных изменений в конфигурацию). Инструкции по автоматической инициализации в контексте проекта WinUI 3 см. в статье Создание первого проекта WinUI 3. Или, если у вас есть проект, отличный от WinUI 3, см. статью Использование Windows App SDK в существующем проекте.

Если у вас есть дополнительные требования (например, настраиваемая обработка ошибок или загрузка определенной версии Windows App SDK), вы можете явно вызвать API загрузчика. И это подход, который демонстрируется в этой статье. Кроме того, дополнительные сведения см. в статье Использование среды выполнения Windows App SDK для приложений, упакованных с внешним расположением или неупакованных.

В этом разделе демонстрируется явный вызов API начального загрузчика из базового проекта консольного приложения. но эти действия применяются к любому неупакованное классическое приложение, использующее Windows App SDK.

Прежде чем приступить к работе с этим руководством, рекомендуем ознакомиться с архитектурой среды выполнения, чтобы узнать больше о зависимости пакета Платформы, которую ваше приложение принимает при использовании Windows App SDK, а также о дополнительных компонентах, необходимых для работы в пакете с внешним расположением или неупакованном приложении.

Предварительные требования

  1. Установка инструментов для Windows App SDK.
  2. Убедитесь, что установлены все зависимости для упакованных с внешним расположением и неупакованных приложений (см. Windows App SDK руководстве по развертыванию приложений, зависимых от платформы, упакованных с внешним расположением или неупакованных). Простой способ сделать это — запустить установщик среды выполнения Windows App SDK.

Инструкции

Вы можете следовать этому руководству с помощью проекта C# или C++.

Примечание

Динамические зависимости и API-интерфейсы начального загрузчика завершаются сбоем при вызове процессом с повышенными привилегиями. В результате Visual Studio не следует запускать с повышенными привилегиями. Дополнительные сведения см. в статье Динамические зависимости не поддерживают повышение прав #567 .

Следуйте этим инструкциям, чтобы настроить проект C# WinUI 3, который упаковывается с внешним расположением или не упаковывается.

  1. В Visual Studio создайте проект консольного приложения C#. Назовите проект DynamicDependenciesTest. После создания проекта у вас должно быть сообщение "Hello, World!" Консольное приложение C#.

  2. Затем настройте проект.

    1. В Обозреватель решений щелкните проект правой кнопкой мыши и выберите команду Изменить файл проекта.
    2. Замените значение элемента TargetFrameworkмоникером Target Framework. Например, используйте следующую команду, если ваше приложение предназначено для Windows 10 версии 2004.
    <TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
    
    1. Сохраните и закройте файл проекта.
  3. Измените платформу для решения на x64. Значение по умолчанию в проекте .NET — AnyCPU, но WinUI 3 не поддерживает такую платформу.

    1. Выберите Сборка>Configuration Manager.
    2. Выберите раскрывающийся список в разделе Активная платформа решения и нажмите кнопку Создать , чтобы открыть диалоговое окно Новая платформа решения .
    3. В раскрывающемся списке Введите или выберите новую платформу выберите x64.
    4. Нажмите кнопку ОК , чтобы закрыть диалоговое окно Новая платформа решения .
    5. В Configuration Manager нажмите кнопку Закрыть.
  4. Установите пакет NuGet Windows App SDK в проекте.

    1. В Обозреватель решений щелкните правой кнопкой мыши узел Зависимости и выберите Управление пакетами NuGet.
    2. В окне Диспетчер пакетов NuGet перейдите на вкладку Обзор и установите пакет Microsoft.WindowsAppSDK .
  5. Теперь вы готовы использовать API начального загрузчика (см. раздел Использование среды выполнения Windows App SDK для приложений, упакованных с внешним расположением или неупакованных), чтобы динамически принимать зависимости от пакета платформы Windows App SDK. Это позволяет использовать API Windows App SDK в приложении.

    Откройте файл кода Program.cs и замените код по умолчанию следующим кодом, чтобы вызвать метод Bootstrap.Initialize для инициализации начального загрузчика. Этот код определяет, от какой версии Windows App SDK зависит приложение при инициализации начального загрузчика.

    Важно!

    Вам потребуется изменить приведенный ниже код в соответствии с конкретной конфигурацией. См. описание параметров метода Bootstrap.Initialize, чтобы указать одну из версий установленного Windows App SDK.

    using System;
    using Microsoft.Windows.ApplicationModel.DynamicDependency;
    
    namespace DynamicDependenciesTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                Bootstrap.Initialize(0x00010002);
                Console.WriteLine("Hello, World!");
    
                // Release the DDLM and clean up.
                Bootstrap.Shutdown();
            }
        }
    }
    

    В корне API начального загрузчика является собственным API C/C++, который позволяет использовать api Windows App SDK в приложении. Но в приложении .NET, которое использует Windows App SDK 1.0 или более поздней версии, можно использовать оболочку .NET для API начального загрузчика. Эта оболочка обеспечивает более простой способ вызова API начального загрузчика в приложении .NET, чем вызов собственных функций C/C++ напрямую. В предыдущем примере кода вызываются статические методы Initialize и Shutdown класса Bootstrap в оболочке .NET для API начального загрузчика.

  6. Чтобы продемонстрировать, что компоненты среды выполнения Windows App SDK были загружены правильно, добавьте код, который использует класс ResourceManager в Windows App SDK для загрузки строкового ресурса.

    1. Добавьте новый файл ресурсов (RESW) в проект (оставьте имя по умолчанию).

    2. Открыв файл ресурсов в редакторе, создайте строковый ресурс со следующими свойствами.

      • Имя: Сообщение
      • Значение: Здравствуйте, ресурсы!
    3. Сохраните файл ресурсов.

    4. Откройте файл кода Program.cs и замените Console.WriteLine("Hello, World!"); строку приведенным ниже кодом.

    // Create a resource manager using the resource index generated during build.
     var manager = new Microsoft.Windows.ApplicationModel.Resources.ResourceManager("DynamicDependenciesTest.pri");
    
    // Look up a string in the .resw file using its name.
    Console.WriteLine(manager.MainResourceMap.GetValue("Resources/Message").ValueAsString);
    
    1. Нажмите кнопку Запустить без отладки (или Начать отладку), чтобы выполнить сборку и запуск приложения. Строка должна отобразиться Hello, resources! успешно.

Если проект — WPF

Сведения о приложении Windows Presentation Foundation (WPF) см. в статье Использование Windows App SDK в приложении WPF.