Поделиться через


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

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

Внимание

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

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

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

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

Необходимые компоненты

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

Instructions

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

Примечание.

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

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

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

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

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

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

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

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

    Внимание

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

    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 пакета SDK для Приложений Windows в приложении. Но в приложении .NET, использующего пакет SDK для приложений Windows 1.0 или более поздней версии, можно использовать оболочку .NET для API начальной загрузки. Эта оболочка обеспечивает более простой способ вызова API загрузчика в приложении .NET, чем вызов собственных функций C/C++ напрямую. Предыдущий пример кода вызывает статические методы инициализации и завершения класса Bootstrap в оболочке .NET для API начальной загрузки.

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

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

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

      • Имя: сообщение
      • Значение: Hello, resources!
    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) см. в разделе "Использование пакета SDK для приложений Windows" в приложении WPF.