Разработка приложений для Windows (Microsoft Learn)
Как работать с этим обзором
Эта статья лучше всего работает как карта решений: сначала определяете стек, затем проверяете требования среды и только после этого переходите к публикации.
Если нужен быстрый практический старт, параллельно держите открытыми Windows Forms (WinForms), Справочник по WinForms — элементы UI, Первая форма WPF — XAML, стили и шаблоны, Справочник по WPF — элементы UI и Microsoft Store и публикация Windows-приложений.
Windows - отдельный стек десктоп-разработки
Раздел Десктопные приложения описывает общую архитектуру окон, событий и стеков (Qt, Electron, Java и др.). Для Windows Microsoft выделяет отдельную платформу разработчика: два уровня SDK, рекомендуемый UI (WinUI 3), классические .NET-стеки и путь от настройки машины до публикации в Microsoft Store.
Официальный вход: Обзор платформы разработчиков Windows. Практический старт проекта: Начните здесь.
См. также: Архитектура десктопных приложений (в том числе что такое драйвер), Особенности разработки десктопных приложений, Платформа .NET — UI.
Два SDK — Windows SDK и Windows App SDK
| Windows SDK | Windows App SDK | |
|---|---|---|
| Назначение | Заголовки, библиотеки и инструменты для прямого доступа к API ОС | Современный слой поверх Windows SDK: WinUI, жизненный цикл, окна, уведомления |
| Привязка к ОС | Привязан к версиям Windows | Поставляется через NuGet, обновляется чаще релизов ОС |
| Когда нужен | Низкоуровневые API, DirectX, последние функции ОС, Win32/C++ | Новые приложения с Fluent UI, интеграция в WPF/WinForms |
Документация: Windows SDK, Windows App SDK.
Любое Windows-приложение в итоге опирается на Windows SDK; Windows App SDK — рекомендуемый путь для современного UI и системных возможностей без ожидания обновления всей ОС. Поддерживается Windows 10 (1809) и новее.
DirectX — графический стек под WPF и игры
DirectX — набор API Microsoft Windows для мультимедиа и графики — изначально создан, чтобы игры на Windows 95 получили прямой доступ к видеокарте, клавиатуре и звуку — тот же уровень контроля, что давала DOS, но в защищённой модели памяти. Сегодня DirectX используют и игры, и инженерное ПО, и desktop UI (WPF, WinUI).
Основные компоненты, полезные прикладному разработчику:
| Компонент | Назначение |
|---|---|
| Direct3D (D3D) | 3D- и 2D-примитивы, шейдеры, аппаратное ускорение |
| Direct2D | двумерная векторная графика |
| DirectWrite | рендеринг текста (используется WPF) |
| DirectShow | аудио/видео потоки |
| DXGI | обмен буферами с монитором |
Direct3D 11 (октябрь 2009, Windows 7) — ключевой слой между ОС, драйвером видеокарты и приложением. Он доступен и на Windows Vista через обновление платформы. WPF при отрисовке опирается на DirectX, а WinForms — на GDI+; поэтому сложная анимация и масштабирование на HiDPI в WPF обычно плавнее.
Для прикладного C#-разработчика Direct3D напрямую нужен редко (игры, CAD, кастомный рендер). Достаточно понимать цепочку: XAML → WPF/WinUI → DirectX → драйвер GPU. Низкоуровневый доступ — через Win32 + Windows SDK или обёртки вроде SharpDX / Vortice.Windows.
WinForms рисует через GDI+. Для встраивания 3D или игрового контента на форму используют хостинг (например, элемент WPF внутри WinForms) или библиотеки вроде OpenTK / SharpDX — см. 115.md.
Выбор платформы приложения
Microsoft предлагает несколько "дорожек"; выбор зависит от того, новый ли проект, есть ли legacy и нужна ли кроссплатформенность.
WinUI 3 — рекомендуемый UI для новых Windows-приложений
WinUI 3 — нативный UI на базе Windows App SDK и XAML (C# или C++), с оформлением Fluent Design. Если вы впервые пишете под Windows или начинаете проект с нуля — документация WinUI и старт WinUI — основная точка входа.
Особенности по сравнению с другими стеками (сводка Microsoft):
- современный интерфейс и песочница AppContainer (в отличие от классических Win32/WPF/WinForms без контейнера);
- нет визуального drag-and-drop дизайнера как у WinForms/WPF — UI чаще в XAML и коде;
- только Windows (не кроссплатформа; для macOS/Linux смотрите .NET MAUI).
WPF
Windows Presentation Foundation (WPF) — презентационная подсистема .NET (с версии 3.0, 2006) для клиентских Windows-приложений с богатым визуальным взаимодействием. Разметка интерфейса пишется на XAML; логика — на любом .NET-языке (чаще C#).
Ключевые отличия от WinForms:
| WinForms | WPF | |
|---|---|---|
| Отрисовка | GDI / GDI+ через HWND-контролы | DirectX (аппаратное ускорение) |
| Единица графики | пиксели экрана | аппаратно-независимый пиксель (1/96 дюйма) — масштаб без "лесенки" |
| Разметка | конструктор форм + код | XAML + разделение дизайна и кода |
| Кастомный UI | owner-draw, ограниченно | Style, ControlTemplate, DataTemplate, анимация |
WPF изначально поставлялся с Windows Vista (.NET 3.0) и далее входил в состав .NET Framework на Windows 7–10. Сейчас WPF — часть современного .NET (net*-windows); поддерживает автономные приложения и сценарии в браузере (XBAP — legacy).
Возможности WPF, которые редко нужны в WinForms:
- Привязка данных —
Binding,MultiBinding,TemplateBinding,PriorityBinding; связь UI с ViewModel прямо в разметке. - Стили и шаблоны — единое оформление контролов и карточек списков без дублирования кода.
- 2D/3D-графика — векторные фигуры, эффекты, встроенная анимация; GPU снимает часть нагрузки с CPU.
- Ресурсы — иерархия
ResourceDictionaryот контрола доApplication.
WPF на Microsoft Learn — официальный обзор. Существующие WPF-приложения можно модернизировать через Windows App SDK (WPF + Windows App SDK). Пошаговый практикум — Первая форма WPF — XAML, стили и шаблоны. Клиент-серверный маршрут (MVVM, ASP.NET Core, Prism) — Практикум WPF и клиент-сервер.
Windows Forms
Windows Forms — быстрые формы с визуальным конструктором; см. обзор WinForms. Модернизация через WinForms + Windows App SDK.
Win32 (C++)
Прямой доступ к Windows и оборудованию; максимальная производительность, DirectX, низкоуровневые сценарии. Старт: Win32 desktop programming, современные обёртки — C++/WinRT.
UWP
Universal Windows Platform (UWP) — платформа Microsoft, представленная в Windows 10, для универсальных приложений — один код запускается на ПК, планшете, смартфоне (Windows 10 Mobile), Xbox One и IoT-устройствах без переписывания под каждую форму-фактор. UWP — расширение Windows Runtime (WinRT), появившегося в Windows 8; API реализован на C++ и доступен из C++, C#, VB.NET, F# и JavaScript.
Разработка велась в Visual Studio 2015–2019; приложения распространялись через Microsoft Store с песочницей AppContainer — ограниченный доступ к файловой системе и API в обмен на безопасность и единый магазин. UWP использует XAML для UI (как WPF, но другой набор типов и xmlns).
| UWP | WinUI 3 / Windows App SDK |
|---|---|
| Привязан к версии Windows и Store | NuGet-пакет, обновляется чаще ОС |
| Metro/Fluent UI первого поколения | Fluent Design, современные контролы |
| Новые проекты — legacy | Рекомендуемый путь для новых Windows-приложений |
UWP-приложения не запускаются на Windows 7 и ниже. Существующие UWP продолжают работать; для новых проектов Microsoft рекомендует WinUI 3 и стратегию миграции на Windows App SDK.
Кроссплатформа
.NET MAUI и React Native перечислены в сравнении платформ как кроссплатформенные варианты с поддержкой Windows среди других ОС.
Сравнение стеков
Полная таблица — на странице обзора. Упрощённо для выбора:
| Задача | Куда смотреть |
|---|---|
| Новое приложение только для Windows 10/11 | WinUI 3 |
| Большой legacy на .NET, XAML уже есть | WPF + при необходимости Windows App SDK |
| Быстрый внутренний CRUD, конструктор форм | WinForms → Windows Forms (WinForms) |
| Игра, драйвер, максимум производительности C++ | Win32 + Windows SDK |
| Один код Windows + macOS + mobile | .NET MAUI |
| Веб-команда, HTML UI | Electron → Electron |
Среда разработки
Перед первым проектом имеет смысл настроить рабочую станцию по руководству Set up your development environment:
- Visual Studio 2022 с workload "Разработка классических приложений .NET" и/или "Разработка приложений для Windows" (WinUI, C++);
- Windows SDK и при необходимости Windows App SDK (часто подтягиваются с проектом);
- .NET SDK для WinForms, WPF, MAUI;
- опционально WinGet и конфигурация окружения — см. вкладку winget в Start here.
Подробнее про IDE: Visual Studio — установка и workloads.
Поддержка и жизненный цикл
Версии Windows, SDK и фреймворков имеют политику поддержки. Актуальные сроки и рекомендации — в разделе Support for app development: какие версии Windows целевые, когда прекращается поддержка конкретных пакетов, как планировать обновления приложения.
Драйверы (обзор для прикладного разработчика)
Десктоп-приложение обращается к принтеру, камере, диску через API ОС, а не напрямую к регистрам устройства. Между приложением и железом работают драйверы — см. Что такое драйвер? и вводную в Архитектуре десктопных приложений.
Если вы не пишете драйвер, достаточно знать:
- запросы идут через стек драйверов (фильтры, function driver, bus driver);
- сбой драйвера может вызвать нестабильность системы (в отличие от падения одного user-mode процесса);
- разработка драйверов — отдельная дисциплина: Windows drivers, Getting started with drivers.
Прикладной код (WinUI, WPF, WinForms) остаётся в пользовательском режиме; к драйверам обычно не обращаются, кроме специализированных утилит и SDK производителя оборудования.
Публикация и Microsoft Store
Упаковка MSIX, учётная запись в Partner Center, сертификация и листинг — в отдельной статье Microsoft Store и публикация Windows-приложений. Старт в документации: Начало работы с Microsoft Store.
Карта документации Microsoft Learn
| Тема | Ссылка |
|---|---|
| Обзор платформы | get-started |
| Первый проект | start-here |
| Windows SDK | windows-sdk |
| WinUI 3 | winui3 |
| WPF | wpf/overview |
| Среда разработки | dev-environment |
| Поддержка | develop/support |
| Драйверы — что это | what-is-a-driver |
| Драйверы — раздел | windows-hardware/drivers |
| Публикация в Store | publish/get-started |
Частые ошибки
| Симптом | Причина |
|---|---|
| WinUI не собирается | Нет Windows App SDK workload в VS |
| Путаница SDK | Windows SDK ≠ Windows App SDK — см. таблицу выше |
| WPF на ARM | Проверьте supported runtime в документации |
| Store отклонил пакет | Не MSIX или неверная подпись — Microsoft Store и публикация Windows-приложений |
Что попробовать
- Шаблон "WinUI 3 Blank App" в Visual Studio — один экран.
- Сравните с WinForms на той же машине.
- MAUI — если нужен и Android.
Что читать дальше в энциклопедии
- Первая форма WPF — XAML, стили и шаблоны — практикум с нуля; элементы UI.
- Windows Forms (WinForms) — быстрый .NET UI с конструктором; элементы UI.
- Microsoft Store и публикация — когда приложение готово к распространению.
- Особенности разработки десктопных приложений — многопоточность UI, DevOps, тестирование.
- Архитектура десктопных приложений — общая теория окон и элементов.
- Платформа .NET — язык и runtime под WPF/WinForms/MAUI; UI-фреймворки.
Практический алгоритм выбора стека под Windows
- Зафиксируйте срок жизни продукта: пилот на 6 месяцев или платформа на 5+ лет.
- Определите требования UI — стандартные формы, сложные анимации, кастомный дизайн.
- Проверьте ограничения среды — Store, корпоративные политики, офлайн-режим.
- Сверьте экспертизу команды — C# и XAML, C++ и Win32, веб-стек.
- Запустите по одному прототипу на 2 кандидатах и сравните время реализации одинакового сценария.
Минимальный pilot checklist
- Окно приложения, навигация и базовая форма данных.
- Асинхронная загрузка данных без блокировки UI.
- Сборка и установка на чистой машине.
- Логирование и обработка ошибок при потере сети.
- Черновой сценарий обновления версии.
Этот набор дает объективное сравнение WinUI, WPF, WinForms или Electron до начала большого проекта.
Связанные материалы
- C# WinForms и WPF — простые окна (Lab)
- Особенности разработки десктопных приложений
- Electron
- Microsoft Store и публикация Windows-приложений
Как провести техническое сравнение стеков
Минимальный формат архитектурного эксперимента
- Выберите единый пользовательский сценарий для всех кандидатов.
- Реализуйте одинаковый объем функциональности на WinUI, WPF или WinForms.
- Замерьте время разработки, скорость UI, размер пакета и удобство поддержки.
- Сведите результаты в таблицу с критериями бизнеса и эксплуатации.
Решение после эксперимента
Финальный выбор делайте по совокупности факторов — срок жизни продукта, экспертиза команды, требования к UX, ограничения инфраструктуры и правила поставки в организации.