Статьи с тегом «Разработка Windows»
Статьи с тегом «Разработка Windows» (50 шт.), от новых к старым.
-
Как читать коды ошибок Windows — Win32, HRESULT и NTSTATUS
Если появился 0x80004005, сначала разберите код, а не ищите его вслепую. Три системы Win32, HRESULT и NTSTATUS, шаблон 0x8007xxxx как упакованная ошибка Win3...
-
Как читать «использование памяти» в Windows: Working Set, Private Bytes, Commit и файл подкачки
Столбец «Память» в диспетчере задач, Working Set, Private Bytes и Commit — это разные величины. Разбираем связь виртуальной и физической памяти Windows, роль...
-
Инцидент не закрывается восстановлением — постмортем для небольшой команды
Если закрыть инцидент после исправления и извинений, тот же сбой повторится. Адаптируем blameless-постмортем для небольшой команды: шаблон на час, таблица си...
-
CI/CD для WinForms / WPF: сборка, подпись и распространение в GitHub Actions
Практическое руководство по CI/CD для WinForms / WPF в GitHub Actions. Минимальный YAML сборки и тестов на windows-latest, нумерация версий по тегам, подпись...
-
Спящий режим, гибернация и Modern Standby: как не дать долгоживущему приложению остановиться ночью
Разбираем, почему долгоживущее Windows-приложение к утру оказывается остановленным: чем отличаются спящий режим S3, гибернация и Modern Standby, как во сне в...
-
Запустятся ли бизнес-приложения на Windows on Arm — эмуляция x64 (Prism) и реальность нативных DLL и COM
Разработчикам и ИТ-службам: запустится ли бизнес-приложение на Windows on Arm. Разбираем, как устроена эмуляция x64 (Prism), какие слои она не покрывает, про...
-
Сетевые диски и UNC-пути: типичные ловушки ── как бизнес-приложению работать с файловым сервером (общей папкой)
Разбираем типичные сбои, когда бизнес-приложение пишет в общую папку или следит за ней. Почему службе не видна буква диска (Z:), какие права нужны для каждой...
-
Локализация WinForms и WPF: resx, спутниковые сборки, переключение культуры
Разбираем локализацию десктопных приложений Windows: чем CurrentCulture отличается от CurrentUICulture, как устроены resx и спутниковые сборки, какой способ ...
-
Не создавайте HttpClient в using на каждый запрос — создание, тайм-ауты и повторные попытки в C#
Если создавать HttpClient через using на каждый запрос, исчерпываются сокеты; static-экземпляр не отслеживает смену DNS. Разбираем схемы через PooledConnecti...
-
Не только appsettings.json — практика конфигурации бизнес-приложений Windows (среды, секреты, куда писать)
Разбираем управление конфигурацией бизнес-приложений Windows. Показываем слои appsettings.json, когда брать IOptions, а когда IOptionsMonitor, настройки по с...
-
Печать и PDF в Windows-приложениях: PrintDocument, WPF и библиотеки отчётов
Печать WinForms через PrintDocument, печать WPF через FlowDocument и FixedDocument и варианты вывода PDF сведены в таблицу по требованиям. Разбираются разрыв...
-
Защита Windows-приложения от повторного запуска — именованный Mutex и активация окна при втором старте
Разбираем, как в бизнес-приложении Windows запретить повторный запуск через именованный Mutex. Разберём ловушку RDP из-за разницы Global\ и Local\, Abandoned...
-
Безопасный вызов Win32 API из C# — практическое руководство по P/Invoke (DllImport / LibraryImport / CsWin32)
Разбираем, как на практике вызывать Win32 API из C# через P/Invoke: чем DllImport отличается от LibraryImport, как CsWin32 генерирует сигнатуры, ловушки марш...
-
Ловушки регистрации и bitness при разработке COM/OCX/ActiveX
Практический разбор типичных ловушек COM, OCX и ActiveX: разрядность 32/64-бит, Visual Studio 2022, regsvr32 и Regasm, права администратора, HKCR, STA и MTA.
-
Что такое ClickOnce — как устроен, как обновляется, где подходит и где нет
Разбираем ClickOnce — технологию распространения десктопных .NET-приложений для Windows: манифесты, обновления, кэш, подпись, а также случаи, где он подходит...
-
Как ускорить проверку приложений в Windows Sandbox
Разбираем, как с помощью Windows Sandbox быстрее локализовать проблемы с правами администратора, воспроизводить сценарии в чистом окружении и имитировать нех...
-
Где провести границу между юнит-тестами и интеграционными тестами
Границу между юнит-тестами и интеграционными тестами разбираем по осям чистой логики, форматов, связки, различий среды и зависимости от времени и сводим в та...
-
Как работает разрешение имён DLL в Windows — порядок поиска и SxS
Разбираем разрешение имён DLL в Windows с практической стороны: DLL search order, Known DLLs, loaded-module list, API set, SxS manifest и влияние API семейст...
-
Когда в Windows нужны права администратора — UAC, защищённые области и как это отличить на этапе проектирования
Разбираем на практике, когда в Windows нужны права администратора: UAC, защищённые области, службы, драйверы и проектирование per-user / per-machine.
-
Что такое VBA — ограничения, перспективы, когда стоит заменить и как мигрировать
Разбираем, что такое VBA, его ограничения и перспективы, в каких случаях его стоит заменить и как поэтапно переносить макросы Excel и внутренние инструменты.
-
Подводные камни приложений последовательной связи: переподключение и логи
Разбираем типичные ловушки приложений последовательной связи при интеграции с оборудованием и управлении измерительными приборами: границы кадров, тайм-ауты,...
-
Как проектировать логи и дампы при сбое Windows-приложения
Разбираем, как сочетать лог штатной работы, маркер сбоя, WER LocalDumps и процесс-наблюдатель, чтобы даже после падения Windows-приложения из-за неожиданного...
-
UX Windows-приложений: приоритеты по среде использования
Что ставить выше в UX Windows-приложения: таблица решений по B2C / B2B, способу ввода, среде использования и цене ошибки.
-
WinForms, WPF или WinUI: практическая таблица выбора
Как выбрать WinForms, WPF или WinUI: новая разработка, существующий код, распространение, выразительность UI и устройство команды.
-
Разделяемая память: подводные камни и практические рекомендации
Подводные камни разделяемой памяти на практике и проектирование, которое снижает частоту сбоев: синхронизация, видимость, время жизни, ABI и права доступа.
-
Введение в профили пользователей Windows — AppData и NTUSER.DAT
Базовое устройство профиля пользователя Windows: как разделять AppData, локальный / перемещаемый / Mandatory / Temporary, Folder Redirection, FSLogix и с чег...
-
Что такое Reg-Free COM: механизм использования COM без регистрации
Разбираем основы Reg-Free COM: роль контекста активации и манифестов, преимущества, ограничения и критерии выбора в реальных проектах.
-
Как построить вывод отчётов Excel: COM / Open XML / шаблоны
Проектирование вывода отчётов Excel сильно меняется в зависимости от того, автоматизируете ли вы сам Excel, собираете ли xlsx напрямую или оставляете существ...
-
Как наложить изображение и текст на кадры MP4 в Media Foundation
Разбираем, как в Media Foundation прожечь изображение и текст в каждый кадр MP4 и собрать новый файл: роли Source Reader, отрисовки, преобразования цвета и S...
-
Сбор дампов сбоев Windows — введение: WER, ProcDump, WinDbg
Чтобы расследовать трудно воспроизводимые сбои Windows-приложений, разбираем, как выбирать между WER LocalDumps, ProcDump, MiniDumpWriteDump и WinDbg и на чт...
-
Почему в Windows стоит предпочитать ожидание события, а не Sleep(1)
В Windows точность короткого timed wait зависит от гранулярности системных часов и планирования. Если ждать нужно появление работы, завершение ввода-вывода и...
-
Как в Windows-приложении вынести только операции, которым нужны права администратора
Разбираем, как оставить UI Windows-приложения asInvoker и вынести операции с правами администратора в helper EXE: UAC, runas, именованные каналы и повторная ...
-
Хранение секретов в Windows-приложениях — избегаем настроек в открытом виде с помощью DPAPI
Чтобы не хранить сведения о подключении и API-токены в конфигурационных файлах Windows-приложений открытым текстом, разбираем подход DPAPI / ProtectedData, р...
-
Чек-лист перед миграцией с .NET Framework на .NET
Практический чек-лист того, что проверить перед миграцией с .NET Framework на .NET: типы проектов, неподдерживаемые технологии, зависимости NuGet, SDK-стиль,...
-
Как преобразовать YUV в RGB с помощью Media Foundation
Как в Media Foundation преобразовать кадр YUV в RGB: автоматическое преобразование Source Reader, самостоятельное преобразование NV12/YUY2, stride и цветовое...
-
Расширенные настройки NIC в Windows: RSS, LSO, EEE и Wake on LAN
Практический разбор расширенных настроек NIC в Windows. Что меняется, если трогать Jumbo Packet, Speed & Duplex, RSS, RSC, LSO, Flow Control, EEE, Wake on LA...
-
Как извлечь кадр из MP4 по заданному времени с помощью Media Foundation
Как Source Reader берёт из MP4 кадр, ближайший к заданному времени, выравнивает stride и alpha в RGB32 и сохраняет результат в PNG.
-
Минимальный чек-лист безопасности при разработке Windows-приложений
Чек-лист базовых мер безопасности для бизнес-приложений на WPF / WinForms / WinUI / C++ / C#: права, подпись кода, обновления, секреты, HTTPS, проверка ввода...
-
Зачем использовать .NET Generic Host и BackgroundService в десктопных приложениях
Как с помощью Generic Host и BackgroundService собрать запуск, периодическую работу, завершение, логи, конфигурацию и DI в Windows-инструментах и фоновых при...
-
Application Verifier: инфраструктура тестов нештатных путей Windows
Разбираем, что такое Application Verifier, и как с Handles, Heaps, Low Resource Simulation и !htrace строить инфраструктуру тестов нештатных путей Windows.
-
Утечка хендлов: почему приложение промышленной камеры падает после месяца работы
На примере приложения управления промышленной камерой разбираем, как смотреть на Windows-приложение, которое внезапно падает после длительной работы: как нах...
-
Почему повторная передача TCP останавливает обмен с промышленной камерой и как это диагностировать
Как диагностировать остановку обмена с промышленной камерой на несколько секунд из-за повторной передачи TCP: потеря пакетов, RTO, метки времени RFC1323 и на...
-
Практическое руководство по FileSystemWatcher — как не терять уведомления и что делать с дублями
Как пользоваться FileSystemWatcher и где он подводит: потерянные уведомления, дубли, ловушки определения готовности, повторное сканирование, атомарный claim ...
-
Введение в Media Foundation: как понять API через COM
Разбираем, что такое Media Foundation, вместе с базовой терминологией Windows-медиа-API — COM, HRESULT, IMFSourceReader, MFT — в том порядке, в котором стоит...
-
Практическое руководство: soft real-time на обычной Windows
Как стабилизировать периодическую обработку и низкую задержку на обычной Windows: разрешение таймера, приоритеты, питание и способы измерения.
-
Интеграция через файлы: блокировки, атомарный claim и практические рекомендации
Разбираем исключительный доступ при интеграции через файлы — файловые блокировки, атомарный claim, схема temp -> rename и идемпотентность — и собираем приёмы...
-
Вызов нативной DLL из C#: обёртка на C++/CLI или P/Invoke
Когда из C# вызывают нативную DLL, разбираем, где хватает P/Invoke, а где выгоднее тонкая обёртка на C++/CLI — по владению, исключениям, типам C++ и обратным...
-
STA и MTA в COM: модель потоков и как не получить зависание
STA и MTA в COM — модель апартаментов, которая задаёт, с какого потока можно вызывать компонент. Разбираем UI-поток, цикл сообщений, маршалинг и почему вызов...
-
Пример COM-моста: вызов 64-битной DLL из 32-битного приложения
32-битное приложение не может напрямую вызвать 64-битную DLL. Разбираем, как связать их COM-мостом: ограничение Windows, схема и ход вызова.
-
Что такое COM — почему дизайн Windows COM до сих пор красив
Разбираем, что такое COM: интерфейсы Windows COM, IUnknown, GUID и бинарная совместимость — и почему эта модель работает до сих пор.