Api для служб windows

Содержание
  1. Национальная библиотека им. Н. Э. Баумана Bauman National Library
  2. Персональные инструменты
  3. Microsoft Windows API
  4. Содержание
  5. Общие сведения
  6. История Microsoft API
  7. Обзор
  8. Взаимодействие программ
  9. Версии Windows API
  10. Мультимедиа
  11. Вызов API для среды выполнения Windows в классических приложениях Call Windows Runtime APIs in desktop apps
  12. Настройка проекта .NET для использования API среды выполнения Windows Modify a .NET project to use Windows Runtime APIs
  13. .NET 5: использование моникера целевой платформы .NET 5: Use the Target Framework Moniker option
  14. Предшествующие версии .NET: установка пакета NuGet Microsoft.Windows.SDK.Contracts Earlier versions of .NET: Install the Microsoft.Windows.SDK.Contracts NuGet package
  15. Настройка проектов, предназначенных для нескольких версий .NET Configure projects that multi-target different versions of .NET
  16. Настройка использования API среды выполнения Windows в проекте Win32 на C++ Modify a C++ Win32 project to use Windows Runtime APIs
  17. Добавление возможностей Windows 10 Add Windows 10 experiences
  18. Поддержка установочных баз Windows XP, Windows Vista, Windows 7 и Windows 8 Support Windows XP, Windows Vista, and Windows 7/8 install bases
  19. Условная компиляция Conditional compilation
  20. Проверки во время выполнения Runtime checks
  21. Связанные примеры Related Samples
  22. Получение ответов на вопросы Find answers to your questions

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Microsoft Windows API

Microsoft Windows API — наиболее важная и мощная библиотека функций интерфейсов программирования приложений Microsoft Windows, которую могут использовать разработчики приложений. Является самым прямым способом взаимодействия приложений с Windows. «Майкрософт» выпускает специальный комплект разработчика программного обеспечения для создания программ, использующих Windows API, который носит название Platform SDK. Данный комплект содержит файлы заголовков, библиотеки, примеры, документацию и инструменты, необходимые для разработки приложений для Microsoft Windows и Microsoft .NET Framework. [Источник 1]

Содержание

Общие сведения

Windows API спроектирован для написания прикладных программ на языке С, предназначенных для работы под управлением операционной системы MS Windows. Тем не менее, API может быть использован любым языком программирования компилятора или ассемблером , способным обрабатывать (четко определенные) структуры данных низкого уровня наряду с предписанными соглашениями о вызовах для звонков и обратных вызовов . Кроме того , внутренняя реализация функции API была разработана на нескольких языках, исторически. Несмотря на то , что С не является объектно-ориентированным программированием языка, Windows API , и Windows , оба исторически были описаны как объектно-ориентированные. Там также было много классов обертки и расширений (от Microsoft и другие) для объектно-ориентированных языков программирования, которые делают эту объектно-ориентированную структуру более четко (MFC, VCL, GDI+ и т.д.) , Так , например, Microsoft Windows 8 обеспечивает API для Windows и WinRT API, который реализован в C++ и объектно-ориентированный дизайн. [Источник 2]

Работа через Windows API — это наиболее близкий к операционной системе способ взаимодействия с ней из прикладных программ. Более низкий уровень доступа, необходимый только для драйверов устройств, в текущих версиях Windows предоставляется через Windows Driver Model.

Windows API представляет собой множество функций, структур данных и числовых констант, следующих соглашениям языка Си. Все языки программирования, способные вызывать такие функции и оперировать такими типами данных в программах, исполняемых в среде Windows, могут пользоваться этим API. В частности, это языки C++, Pascal, Visual Basic и многие другие. Эти функции в свою очередь могут быть разбиты на следующие основные категории:

  • Базовые службы (Base Services);
  • Службы компонентов (Component Services);
  • Службы пользовательского интерфейса (User Interface Services);
  • Графические и мультимедийные службы (Graphics and Multimedia Services);
  • Обмен сообщениями и совместная работа (Messaging and Collaboration);
  • Сеть (Networking);
  • Веб-службы (Web Services). [Источник 3]

В компании Microsoft и сторонними разработчиками для облегчения программирования под Windows было предпринято множество попыток создать библиотеки и среды программирования, частично или полностью скрывающие от программиста особенности Windows API, и предоставляющие ту или иную часть его возможностей в более удобном виде. В частности, сама Microsoft в разное время предлагала библиотеки Active Template Library (ATL)/Windows Template Library (WTL), MFC, .Net/WinForms/WPF, TXLib. Компания Borland (ныне Embarcadero, её преемник в части средств разработки) предлагала OWL и VCL. Есть кросс-платформенные библиотеки, такие как Qt, Tk и многие другие. Весомая часть этих библиотек сконцентрирована на облегчении программирования графического интерфейса пользователя.

История Microsoft API

На протяжении многих лет были внесены различные изменения и дополнения в системах Windows , и Windows API изменился и вырос. В API для Windows 1.0 поддерживаются менее 450 функций , в то время как современные версии насчитывают тысячи. Тем не менее, в целом интерфейс остается достаточно последовательным, и старый Windows 1.0 будет по- прежнему выглядеть знакомым для программиста, который использует современный Windows API.

Microsoft прилагает усилия, чтобы сохранить обратную совместимость. Для достижения этой цели при разработке новых версий Windows, Microsoft иногда реализует обходные пути, чтобы обеспечить совместимость с программным обеспечением сторонних производителей, которые использовали предыдущую версию незарегистрированным или даже нецелесообразным способом.

Одно из самых больших изменений в Windows API , был переход от Win16 (поставляется в Windows 3.1 и старше) в Win32 (Windows NT и Windows 95 и выше). В то время как Win32 первоначально была введена с Microsoft Windows NT 3.1 и Win32s разрешено использовать подмножество Win32. Для того, чтобы облегчить переход, в Windows 95, для разработчиков снаружи и внутри Microsoft ,была использована сложная схема API преобразователь , она может позволить 32-битный код для вызова в 16-битного кода (для большинства из Win16 API) , и наоборот. Плоские преобразователи позволили 32-битному коду вызывать 16-битные библиотеки, а схема широко использовалась в библиотеках Windows 95 , чтобы избежать переноса всей ОС для Win32 в одном пакете. В Windows NT, операционная система была чистой 32-битной, кроме частей для совместимости с 16-разрядными приложениями, и только родовыми преобразователями были доступны преобразователи от Win16 до Win32, как и для Windows 95. Platform SDK поставляются с компилятором , который может производить код , необходимый для этих преобразователей. Версии 64-битных ОС Windows также могут запускать 32-разрядные приложения с помощью WoW64. [Источник 4]

Обзор

Функции, предоставляемые Windows API, могут быть представлены следующим образом:

  • Функции Windows API. Документированные, вызываемые подпрограммы в WindowsAPI. Например, CreateProcess, CreateFile и GetMessage.
  • Собственные системные службы (или системные вызовы). Недокументированные базовые службы в операционной системе, вызываемые при работе в пользовательском режиме. Например, NtCreateUserProcess является внутренней службой, которую функция Windows CreateProcess вызывает для создания нового процесса.
  • Функции поддержки ядра (или подпрограммы). Подпрограммы внутри операционной системы Windows, которые могут быть вызваны только из режима ядра. Например, ExAllocatePoolWithTag является подпрограммой, вызываемой драйверами устройств для выделения памяти из системных динамически распределяемых областей Windows (называемых пулами).
  • Службы Windows. Процессы, запускаемые Диспетчером управления службами (Windowsservicecontrolmanager). Например, служба Диспетчер задач запускается в виде процесса, работающего в пользовательском режиме, в котором поддерживается команда at (аналогичная UNIX-командам at или cron).
  • Библиотеки DLL (dynamic-link libraries — динамически подключаемые библиотеки). Набор вызываемых подпрограмм, связанных вместе в виде двоичного файла, который может быть загружен в динамическом режиме приложениями, которые используют эти подпрограммы. В качестве примера можно привести msvcrt.dll (библиотеку времени выполнения для приложений, написанных на языке C) и kernel32.dll (одну из библиотек подсистемы Windows API). DLL-библиотеки широко используются компонентами и приложениями Windows, которые работают в пользовательском режиме. Преимущество, предоставляемое DLL-библиотеками по сравнению со статическими библиотеками, заключается в том, что они могут использоваться сразу несколькими приложениями, и Windows обеспечивает наличие в памяти только одной копии кода DLL-библиотеки для тех приложений, в которых имеются ссылки на эту библиотеку. Следует заметить, что неисполняемые .NET-сборки компилируются как DLL-библиотеки, но без каких-либо экспортируемых подпрограмм. CLR анализирует скомпилированные метаданные для доступа к соответствующим типам и элементам классов.

Взаимодействие программ

Windows API , предназначен в основном для взаимодействия операционной системы с приложениями. Для связи между различными приложениями Microsoft разработала ряд технологий наряду с основной Windows API. Это началось с динамическим обменом данных (DDE), которая была заменена Object Linking и Embedding (OLE) , а затем с помощью модели компонентных объектов (COM), объектов автоматизации , ActiveX управления, и .NET Framework. Существует не всегда четкое различие между этими технологиями, и есть много совпадений.

Разнообразие терминов в основном является результатом группировки программных механизмов, которые имеют отношение к данному аспекту разработки программного обеспечения. Автоматизация конкретно относится к экспорту функции приложения или компонента ( в качестве интерфейса прикладного программирования (API)) , так что он может быть под контролем других приложений, а не только пользователей, .NET является автономным общей методологии и технологии разработки настольных веб — приложений , написанных на различных точно в срок (JIT) , составленный языков.

Читайте также:  Повер шелл windows 10 что это

Версии Windows API

Почти каждая новая версия Microsoft Windows представила свои собственные дополнения и изменения в Windows API.

  • Win16 — первая версия Windows API для 16-разрядных версий Windows. Изначально назывался просто Windows API, затем стал называться Win16 для отличия от Win32.
  • Win32 — 32-разрядный API для современных версий Windows. Самая популярная ныне версия. Базовые функции этого API реализованы в динамически подключаемых библиотеках kernel32.dll и advapi32.dll ; базовые модули графического интерфейса пользователя — в user32.dll и gdi32.dll . Win32 появился вместе с Microsoft Windows NT и затем был перенесён в несколько ограниченном виде в системы серии Microsoft Windows 9x. В современных версиях Windows, происходящих от Windows NT, работу Win32 GUI обеспечивают два модуля: csrss.exe (процесс исполнения клиент-сервер), работающий в пользовательском режиме, и win32k.sys в режиме ядра. Работу же системных Win32 API обеспечивает ядро — ntoskrnl.exe .
  • Win32s — подмножество Win32, устанавливаемое на семейство 16-разрядных систем Microsoft Windows 3.x, и реализующее ограниченный набор функций Win32 API для этих систем.
  • Win64 — 64-разрядная версия Win32, содержащая дополнительные функции для использования на 64-разрядных компьютерах. Win64 API можно найти только в 64-разрядных версиях Microsoft Windows XP, Microsoft Windows Server 2003, Microsoft Windows Vista, Microsoft Windows Server 2008, Microsoft Windows Server 2008 R2, Microsoft Windows 7 и Microsoft Windows 8.
  • WinCE является реализацией Windows API для Windows CE операционной системы. [Источник 5]

Мультимедиа

В рамках каждой версии Windows , начиная с Microsoft Windows 95. OSR2, Microsoft предоставила Microsoft DirectX API , — набор графических и игровых услуг, который включает в себя:

  • Direct2D — для аппаратного ускорения 2D векторной графики;
  • Direct3D — для аппаратного ускорения 3D графики;
  • DirectSound — для доступа звуковой карты низкого уровня аппаратного ускорения;
  • DirectInput — для связи с устройствами ввода, таких как джойстики и геймпады;
  • DirectPlay — многопользовательская игровая инфраструктура. Этот компонент был устаревшим DirectX 9 и Microsoft больше не рекомендует использовать его для разработки игр.

Microsoft также предоставляет несколько интерфейсов API для кодирования медиа и воспроизведения:

  • DirectShow — строит и запускает общие мультимедийные источники информации. Часто используются для визуализации в игре видео и создания медиа-плеера ( Windows Media Player базируется на нем). Но DirectShow больше не рекомендуется для разработки игр.
  • Media Foundation — новый цифровые медиа API предназначен для замены DirectShow.

Вызов API для среды выполнения Windows в классических приложениях Call Windows Runtime APIs in desktop apps

С помощью API-интерфейсов универсальной платформы Windows (UWP) в классических приложениях вы можете добавить современные возможности, которые привлекут внимание пользователей Windows 10. You can use Universal Windows Platform (UWP) APIs to add modern experiences to your desktop apps that light up for Windows 10 users.

Прежде всего настройте в проекте необходимые ссылки. First, set up your project with the required references. Затем вызовите API среды выполнения Windows из кода приложения, чтобы добавить в него новые возможности Windows 10. Then, call Windows Runtime APIs from your code to add Windows 10 experiences to your desktop app. Вы можете создавать отдельные версии для пользователей Windows 10 либо распространять одинаковые двоичные файлы для всех пользователей независимо от того, с какой версией Windows они работают. You can build separately for Windows 10 users or distribute the same binaries to all users regardless of which version of Windows they run.

Некоторые API среды выполнения Windows поддерживаются только в классических приложениях с идентификатором пакета. Some Windows Runtime APIs are supported only in desktop apps that have package identity. Подробнее см. в разделе Доступные API среды выполнения Windows. For more information, see Available Windows Runtime APIs.

Настройка проекта .NET для использования API среды выполнения Windows Modify a .NET project to use Windows Runtime APIs

Для проектов .NET существует несколько вариантов. There are several options for .NET projects:

  • Начиная с выпуска .NET 5, вы можете добавить моникер целевой платформы (TFM) в файл проекта для получения доступа к API-интерфейсам WinRT. Starting in .NET 5, you can add a Target Framework Moniker (TFM) to your project file to access WinRT APIs. Этот вариант поддерживается в проектах, предназначенных для Windows 10 версии 1809 или более поздней. This option is supported in projects that target Windows 10, version 1809 or later.
  • Для более ранних версий .NET можно установить пакет NuGet Microsoft.Windows.SDK.Contracts , чтобы добавить все необходимые ссылки в проект. For earlier versions of .NET, you can install the Microsoft.Windows.SDK.Contracts NuGet package to add all necessary references to your project. Этот параметр поддерживается в проектах, предназначенных для Windows 10 версии 1803 или более поздней. This option is supported in projects that target Windows 10, version 1803 or later.
  • Если проект предназначен одновременно для .NET 5 (или более поздний выпуск) и более ранних версий, можно настроить файл проекта для использования обоих вариантов. If your project multi-targets .NET 5 (or later) and earlier versions of .NET, you can configure the project file to use both options.

.NET 5: использование моникера целевой платформы .NET 5: Use the Target Framework Moniker option

Этот вариант поддерживают только проекты, использующие .NET 5 или более позднего выпуска и предназначенные для Windows 10 версии 1809 или более позднего выпуска. This option is only supported in projects that use .NET 5 (or a later release) and target Windows 10, version 1809 or a later OS release. Дополнительные сведения об этом сценарии см. в этой записи блога. For more background info about this scenario, see this blog post.

В Visual Studio щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Изменить файл проекта. With your project open in Visual Studio, right-click your project in Solution Explorer and choose Edit Project File. Файл проекта должен выглядеть примерно так. Your project file should look similar to this.

Замените значение элемента TargetFramework одной из следующих строк: Replace the value of the TargetFramework element with one of the following strings:

  • net5.0-windows10.0.17763.0: используйте это значение, если приложение предназначено для Windows 10 версии 1809; net5.0-windows10.0.17763.0: Use this value if your app targets Windows 10, version 1809.
  • net5.0-windows10.0.18362.0: используйте это значение, если приложение предназначено для Windows 10 версии 1903; net5.0-windows10.0.18362.0: Use this value if your app targets Windows 10, version 1903.
  • net5.0-windows10.0.19041.0: используйте это значение, если приложение предназначено для Windows 10 версии 2004. net5.0-windows10.0.19041.0: Use this value if your app targets Windows 10, version 2004.

Например, следующий элемент используется для проекта, предназначенного для Windows 10 версии 2004. For example, the following element is for a project that targets Windows 10, version 2004.

Сохраните изменения и закройте файл проекта. Save your changes and close the project file.

Предшествующие версии .NET: установка пакета NuGet Microsoft.Windows.SDK.Contracts Earlier versions of .NET: Install the Microsoft.Windows.SDK.Contracts NuGet package

Задайте этот параметр, если приложение использует .NET Core 3.x или .NET Framework. Use this option if your app uses .NET Core 3.x or .NET Framework. Этот вариант поддерживается в проектах, предназначенных для Windows 10 версии 1803 или ОС более позднего выпуска. This option is supported in projects that target Windows 10, version 1803 or a later OS release.

Убедитесь, что ссылки на пакеты активны: Make sure package references are enabled:

  1. В Visual Studio выберите элементы Сервис -> Диспетчер пакетов NuGet -> Параметры диспетчера пакетов. In Visual Studio, click Tools -> NuGet Package Manager -> Package Manager Settings.
  2. Убедитесь, что для формата управления пакетами по умолчанию установлено значение PackageReference. Make sure PackageReference is selected for Default package management format.

В Visual Studio щелкните правой кнопкой мыши проект в обозревателе решений и выберите элемент Управление пакетами NuGet. With your project open in Visual Studio, right-click your project in Solution Explorer and choose Manage NuGet Packages.

В окне диспетчера пакетов NuGet выберите вкладку Обзор и найдите Microsoft.Windows.SDK.Contracts . In the NuGet Package Manager window, select the Browse tab and search for Microsoft.Windows.SDK.Contracts .

Когда пакет Microsoft.Windows.SDK.Contracts будет найден, выберите на правой панели диспетчера пакетов NuGet нужную версию пакета в зависимости от версии Windows 10, на которую нужно ориентировать приложение: After the Microsoft.Windows.SDK.Contracts package is found, in the right pane of the NuGet Package Manager window select the Version of the package you want to install based on the version of Windows 10 you want to target:

  • 10.0.19041.xxxx — вариант для Windows 10 версии 2004; 10.0.19041.xxxx: Choose this for Windows 10, version 2004.
  • 10.0.18362.xxxx — вариант для Windows 10 версии 1903; 10.0.18362.xxxx: Choose this for Windows 10, version 1903.
  • 10.0.17763.xxxx — вариант для Windows 10 версии 1809; 10.0.17763.xxxx: Choose this for Windows 10, version 1809.
  • 10.0.17134.xxxx — вариант для Windows 10 версии 1803. 10.0.17134.xxxx: Choose this for Windows 10, version 1803.
Читайте также:  При установке windows какая должна быть система жесткого диска

Нажмите кнопку Установить. Click Install.

Настройка проектов, предназначенных для нескольких версий .NET Configure projects that multi-target different versions of .NET

Если проект предназначен одновременно для .NET 5 предварительной версии 3 (или более поздней версии) и более ранних версий (включая .NET Core 5.x и .NET Framework), можно настроить в файле проекта использование моникера целевой платформы для автоматического извлечения ссылок на API WinRT для .NET 5 и применять пакет NuGet Microsoft.Windows.SDK.Contracts для более ранних версий. If your project multi-targets .NET 5 (or later) and earlier versions (including .NET Core 3.x and .NET Framework), you can configure the project file to use the Target Framework Moniker to automatically pull in the WinRT API references for .NET 5 and use the Microsoft.Windows.SDK.Contracts NuGet package for earlier versions.

В Visual Studio щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Изменить файл проекта. With your project open in Visual Studio, right-click your project in Solution Explorer and choose Edit Project File. В следующем примере показан файл проекта для приложения, использующего .NET Core 3.1. The following example demonstrates a project file for an app that uses .NET Core 3.1.

В файле замените элемент TargetFramework элементом TargetFrameworks (обратите внимание на множественное число). Replace the TargetFramework element in the file with a TargetFrameworks element (note the plural). В этом элементе укажите моникеры целевой платформы для всех версий .NET, которые вы хотите использовать, разделив их точкой с запятой. In this element, specify the Target Framework Monikers for all the versions of .NET you want to target, separated by semi-colons.

  • Для .NET 5 или более поздней версии используйте один из следующих моникеров целевой платформы: For .NET 5 or later, use one of the following Target Framework Monikers:
    • net5.0-windows10.0.17763.0: используйте это значение, если приложение предназначено для Windows 10 версии 1809; net5.0-windows10.0.17763.0: Use this value if your app targets Windows 10, version 1809.
    • net5.0-windows10.0.18362.0: используйте это значение, если приложение предназначено для Windows 10 версии 1903; net5.0-windows10.0.18362.0: Use this value if your app targets Windows 10, version 1903.
    • net5.0-windows10.0.19041.0: используйте это значение, если приложение предназначено для Windows 10 версии 2004. net5.0-windows10.0.19041.0: Use this value if your app targets Windows 10, version 2004.
  • Для .NET Core 3.x используйте netcoreapp3.0 или netcoreapp3.1. For .NET Core 3.x, use netcoreapp3.0 or netcoreapp3.1.
  • Для .NET Framework используйте net46. For .NET Framework, use net46.

В следующем примере показано, как настроить проект для использования одновременно .NET Core 3.1 и .NET 5 (для Windows 10 версии 2004). The following example demonstrates how to multi-target .NET Core 3.1 and .NET 5 (for Windows 10, version 2004).

После элемента PropertyGroup добавьте элемент PackageReference, включающий условный оператор, который отвечает за установку пакета NuGet Microsoft.Windows.SDK.Contracts для всех версий .NET Core 3.x или .NET Framework, для которых предназначено приложение. After the PropertyGroup element, add a PackageReference element that includes a conditional statement that installs the Microsoft.Windows.SDK.Contracts NuGet package for any versions of .NET Core 3.x or .NET Framework that your app targets. Элемент PackageReference должен быть дочерним по отношению к элементу ItemGroup. The PackageReference element must be a child of an ItemGroup element. В приведенном ниже примере показано, как это сделать для .NET Core 3.1. The following example demonstrates how to do this for .NET Core 3.1.

По завершении файл проекта должен выглядеть примерно так. When you’re done, your project file should look similar to this.

Сохраните изменения и закройте файл проекта. Save your changes and close the project file.

Настройка использования API среды выполнения Windows в проекте Win32 на C++ Modify a C++ Win32 project to use Windows Runtime APIs

Примените C++/WinRT для использования API среды выполнения Windows. Use C++/WinRT to consume Windows Runtime APIs. C++/WinRT — это полностью стандартная проекция языка C++17 для API среды выполнения Windows (WinRT), реализованная как библиотека на основе файлов заголовков и предназначенная для предоставления вам первоклассного доступа к современным интерфейсам API Windows. C++/WinRT is an entirely standard modern C++17 language projection for Windows Runtime (WinRT) APIs, implemented as a header-file-based library, and designed to provide you with first-class access to the modern Windows API.

Чтобы настроить C++/WinRT для проекта, сделайте следующее: To configure your project for C++/WinRT:

  • Для новых проектов можно установить расширение C++/WinRT Visual Studio (VSIX) и использовать один из шаблонов проектов C++/WinRT, входящих в это расширение. For new projects, you can install the C++/WinRT Visual Studio Extension (VSIX) and use one of the C++/WinRT project templates included in that extension.
  • Для существующих проектов можно установить в проект пакет NuGet Microsoft.Windows.CppWinRT. For existing projects, you can install the Microsoft.Windows.CppWinRT NuGet package in the project.

Дополнительные сведения об этом варианте см. в этой статье. For more details about these options, see this article.

Добавление возможностей Windows 10 Add Windows 10 experiences

Теперь все готово для добавления современных видов взаимодействия, которые активируются, когда пользователь запускает ваше приложение в Windows 10. Now you’re ready to add modern experiences that light up when users run your application on Windows 10. Используйте этот процесс разработки. Use this design flow.

Сначала определите, какие возможности нужно добавить First, decide what experiences you want to add

Выбор огромен. There’s lots to choose from. Например, можно упростить оформление покупки с помощью API монетизации либо привлечь внимание к приложению, когда вы можете предложить что-либо интересное, например новую фотографию, добавленную другим пользователем. For example, you can simplify your purchase order flow by using monetization APIs, or direct attention to your application when you have something interesting to share, such as a new picture that another user has posted.

Даже если пользователи не обращают внимания на ваше сообщение или закрывают его, они могут снова увидеть его в центре уведомлений, а затем щелкнуть сообщение, чтобы открыть приложение. Even if users ignore or dismiss your message, they can see it again in the action center, and then click on the message to open your app. Это позволяет увеличить объем взаимодействия с приложением и обеспечивает дополнительное преимущество в виде тесной интеграции вашего приложения с операционной системой. This increases engagement with your application and has the added bonus of making your application appear deeply integrated with the operating system. Мы предложим код для реализации этой возможности чуть позже в этой статье. We’ll show you the code for that experience a bit later in this article.

Дополнительные сведения см. в документации по UWP. Visit the UWP documentation for more ideas.

Выберите путь улучшения: дополнить или расширить Decide whether to enhance or extend

Вам часто будут встречаться термины дополнить и расширить, поэтому сейчас мы поясним, какой именно смысл вкладываем в них. You’ll often hear us use the terms enhance and extend, so we’ll take a moment to explain exactly what each of these terms mean.

Термин дополнить относится к API среды выполнения Windows, которые вы можете вызывать напрямую из классического приложения (независимо от того, применяете ли вы для приложения упаковку в пакет MSIX). We use the term enhance to describe Windows Runtime APIs that you can call directly from your desktop app (whether or not you have chosen to package your application in an MSIX package). При выборе новой возможности Windows 10 определите API-интерфейсы, которые вам необходимы для ее реализации, а затем проверьте, входит ли нужный API в этот список. When you’ve chosen a Windows 10 experience, identify the APIs that you need to create it, and then see if that API appears in this list. Это список API-интерфейсов, которые можно вызывать непосредственно из классического приложения. This is a list of APIs that you can call directly from your desktop app. Если выбранный API не входит в этот список, значит, связанные с этим API функции могут работать только в рамках процесса UWP. If your API does not appear in this list, that’s because the functionality associated with that API can run only within a UWP process. Сюда часто входят API-интерфейсы, которые отображают элементы XAML UWP, например элемент управления картой UWP или запрос безопасности Windows Hello. Often times, these include APIs that render UWP XAML such as a UWP map control or a Windows Hello security prompt.

Читайте также:  Bootcamp windows 10 macbook pro late 2011

API, которые отображают XAML UWP, обычно нельзя напрямую вызывать из классического приложений. Но иногда для них доступны альтернативные подходы. Although APIs that render UWP XAML typically cannot be called directly from your desktop, you might be able to use alternative approaches. Если вы хотите разместить элементы управления XAML UWP или другие пользовательские визуальные объекты, попробуйте применить XAML Islands (доступны в Windows 10 с версии 1903) и (или) визуальный уровень (доступен в Windows 10 с версии 1803). If you want to host UWP XAML controls or other custom visual experiences, you can use XAML Islands (starting in Windows 10, version 1903) and the Visual layer (starting in Windows 10, version 1803). Эти возможности можно использовать в упакованных и неупакованных классических приложениях. These features can be used in packaged or unpackaged desktop apps.

Если вы решили упаковать классическое приложение в пакет MSIX, у вас есть возможность расширить это приложение, добавив к нему проект UWP. If you have chosen to package your desktop app in an MSIX package, another option is to extend the application by adding a UWP project to your solution. Проект классического приложения по-прежнему остается точкой входа для вашего приложения. Но проект UWP предоставляет доступ ко всем API-интерфейсам, которые не входят в этот список. The desktop project is still the entry point of your application, but the UWP project gives you access to all of the APIs that do not appear in this list. Классические приложения могут взаимодействовать с процессами UWP с помощью службы приложений. У нас есть множество рекомендаций по настройке этой функции. The desktop app can communicate with the UWP process by using a an app service and we have lots of guidance on how to set that up. Если вы хотите добавить возможность, для которой требуется проект UWP, см. раздел Расширение возможностей с помощью компонентов UWP. If you want to add an experience that requires a UWP project, see Extend with UWP components.

Добавьте ссылки на контракты API Reference API contracts

Если вы можете вызывать API непосредственно из классического приложения, откройте браузер и найдите справочный раздел для этого API-интерфейса. If you can call the API directly from your desktop app, open a browser and search for the reference topic for that API. Под общей информацией об API там представлена таблица с описанием контракта для этого API. Beneath the summary of the API, you’ll find a table that describes the API contract for that API. Пример такой таблицы приведен ниже. Here’s an example of that table:

Если у вас есть классическое приложение на основе .NET, добавьте ссылку на этот контракт API и присвойте свойству Копировать локально этого файла значение False. If you have a .NET-based desktop app, add a reference to that API contract, and then set the Copy Local property of that file to False. Если у вас есть проект на основе C++, добавьте в раздел Дополнительные каталоги включаемых файлов путь к папке, содержащей этот контракт. If you have a C++-based project, add to your Additional Include Directories, a path to the folder that contains this contract.

Вызовите API-интерфейсы для добавления возможности Call the APIs to add your experience

Ниже приведен код для отображения окна уведомлений, которое мы уже видели ранее. Here’s the code that you’d use to show the notification window that we looked at earlier. Эти API-интерфейсы внесены в этот список, а значит, вы можете добавить этот код в классическое приложение и запустить его прямо сейчас. These APIs appear in this list so you can add this code to your desktop app and run it right now.

Поддержка установочных баз Windows XP, Windows Vista, Windows 7 и Windows 8 Support Windows XP, Windows Vista, and Windows 7/8 install bases

Вы можете модернизировать приложение для Windows 10, не создавая новую ветвь и не поддерживая раздельные базы кода. You can modernize your application for Windows 10 without having to create a new branch and maintain separate code bases.

Если вы хотите создать отдельные двоичные файлы для пользователей Windows 10, используйте условную компиляцию. If you want to build separate binaries for Windows 10 users, use conditional compilation. Если вы предпочитаете создать один набор двоичных файлов, которые развертываются для всех пользователей Windows, используйте проверки во время выполнения. If you’d prefer to build one set of binaries that you deploy to all Windows users, use runtime checks.

Давайте вкратце рассмотрим эти варианты. Let’s take a quick look at each option.

Условная компиляция Conditional compilation

Можно вести одну базу кода и компилировать набор двоичных файлов только для пользователей Windows 10. You can keep one code base and compile a set of binaries just for Windows 10 users.

Для этого добавьте новую конфигурацию сборки в проект. First, add a new build configuration to your project.

Создайте константу для этой конфигурации сборки, чтобы определить код, который будет вызывать API среды выполнения Windows. For that build configuration, create a constant that to identify code that calls Windows Runtime APIs.

Для проектов на основе .NET эта константа называется константой условной компиляции. For .NET-based projects, the constant is called a Conditional Compilation Constant.

Для проектов на основе C++ эта константа называется описанием препроцессора. For C++-based projects, the constant is called a Preprocessor Definition.

Добавьте эту константу до всех блоков кода UWP. Add that constant before any block of UWP code.

Компилятор выполнит сборку этого кода, только если соответствующая константа определена в активной конфигурации сборки. The compiler builds that code only if that constant is defined in your active build configuration.

Проверки во время выполнения Runtime checks

Можно скомпилировать один набор двоичных файлов для всех пользователей Windows независимо от того, какую версию Windows они используют. You can compile one set of binaries for all of your Windows users regardless of which version of Windows they run. В этом случае приложение будет обращаться к API среды выполнения Windows, только если пользователь выполняет его как упакованное приложение в среде Windows 10. Your application calls Windows Runtime APIs only if the user is runs your application as a packaged application on Windows 10.

Чтобы добавить в код проверки во время выполнения, проще всего установить пакет Nuget: использовать вспомогательные средства моста для классических приложений и применить метод IsRunningAsUWP() для отсечения всего кода, в котором вызываются API среды выполнения Windows. The easiest way to add runtime checks to your code is to install this Nuget package: Desktop Bridge Helpers and then use the IsRunningAsUWP() method to gate off all code that calls Windows Runtime APIs. Дополнительные сведения см. в записи блога Мост для классических приложений — определение контекста приложения. See this blog post for more details: Desktop Bridge — Identify the application’s context.

Получение ответов на вопросы Find answers to your questions

Есть вопросы? Have questions? Задайте их на Stack Overflow. Ask us on Stack Overflow. Наша команда следит за этими тегами. Our team monitors these tags. Вы также можете задать нам вопросы здесь. You can also ask us here.

Оцените статью