Статьи с тегом «Разработка Windows»
Статьи с тегом «Разработка Windows» (68 шт.), от новых к старым.
-
Реагирование на инциденты не заканчивается восстановлением — шаблон постмортема (предотвращения повторения) для небольших команд разработки
Считать инцидент закрытым сразу после исправления и извинений — гарантированный способ повторить его снова. Адаптируем blameless-постмортем для небольших ком...
-
Введение в ADR (Architecture Decision Record) — минимальный способ сохранить «почему мы спроектировали именно так» в небольшой команде
Код никогда не объясняет, почему он написан именно так. Разбираем, как использовать ADR (Architecture Decision Record) — одно решение, один Markdown-файл — ч...
-
Версионирование схемы БД бизнес-приложения — практика миграций, предотвращающая «у каждого клиента своя база»
Практическое руководство по версионированию схемы БД бизнес-приложения, установленного у множества клиентов. Разбираем PRAGMA user_version и реализацию после...
-
CI/CD для приложений WinForms / WPF на практике — автоматизация от сборки до подписи и распространения через GitHub Actions
Практическое руководство по настройке CI/CD для приложений WinForms / WPF через GitHub Actions. Минимальный YAML для сборки и тестов на windows-latest, нумер...
-
Если ваше Windows-приложение приняли за вирус — как реагировать на ложные срабатывания Microsoft Defender и жить с влиянием на производительность
Разбираем правильный порядок действий, если Microsoft Defender ложно определяет ваше Windows-приложение как вредоносное: как устроена современная антивирусна...
-
Спящий режим, гибернация, Modern Standby и долго работающие приложения — как проектированием предотвратить «остановилось ночью»
Разбираем, почему долго работающее Windows-приложение оказывается «остановленным к утру», начиная с различий между спящим режимом S3, гибернацией и Modern St...
-
Работают ли бизнес-приложения на Windows на Arm — реальность x64-эмуляции (Prism) и нативных DLL/COM
Отвечаем разработчикам и ИТ-специалистам на вопрос «заработает ли наше бизнес-приложение на Windows на Arm». Разбираем принцип работы x64-эмуляции (Prism), с...
-
Если вам досталась система без исходного кода и без документации — практический план, как сопровождать её, не останавливая работу
Разбираем практический план начала эксплуатации и сопровождения бизнес-системы, у которой нет ни исходного кода, ни спецификаций. Охватываем сохранение и рез...
-
MAX_PATH и подводные камни путей/имён файлов в Windows — лимит 260 символов, зарезервированные имена, конечная точка, регистр
Разбираем ограничения путей и имён файлов, которые часто стоят за классической ошибкой «файл не найден». Рассматриваем состав лимита MAX_PATH=260, включение ...
-
Подводные камни сетевых дисков и UNC-путей ── как бизнес-приложения работают с файловым сервером (общей папкой)
Разбираем типичные проблемы, возникающие при выводе данных и мониторинге общей папки из бизнес-приложения: почему буква диска (Z:) не видна службе, какие пра...
-
Японская эра, праздники и даты закрытия периода в бизнес-приложениях — устойчивый к смене эры дизайн, JapaneseCalendar и расчёт рабочих дней на практике
Показать «Рэйва 8» в отчёте, рассчитать рабочие дни без учёта праздников, оплатить в последний рабочий день месяца, следующего за закрытием периода 20-го чис...
-
Практическое руководство по Process Monitor (ProcMon) — как за 10 минут выяснить, почему «настройки не читаются» или возникает ACCESS DENIED
«Исправил конфигурационный файл, но изменения не применяются», «вчера всё работало, а сегодня приложение не запускается» — прежде чем лезть в исходный код, P...
-
Когда не стоит переводить Windows-приложение в веб: таблица решений и «разделение» как реальный выход
Запросов на перевод корпоративных Windows-приложений в веб становится всё больше, но для приложений с интеграцией оборудования, локальной обработкой файлов, ...
-
Интернационализация приложений WinForms/WPF — resx, сателлитные сборки и переключение культуры на практике
Разбираем интернационализацию десктопных приложений Windows на практике: различие между CurrentCulture и CurrentUICulture, устройство ресурсов через resx и с...
-
Не оборачивайте HttpClient в using ── практика HTTP-взаимодействия в бизнес-приложениях на C# (паттерны создания, тайм-ауты, повторные попытки)
HttpClient в C#, создаваемый через using при каждом запросе, приводит к исчерпанию сокетов, а статический HttpClient перестаёт учитывать изменения DNS. Разби...
-
Как точно найти причину «медленной работы» с PerfView и dotnet-trace — практическое введение в анализ производительности .NET
Когда бизнес-приложение «работает медленно», «загружает ЦП под завязку» или «иногда зависает», какой инструмент выбрать и на что смотреть? В статье разобраны...
-
Введение в журнал событий Windows и ETW — как использовать стандартные механизмы ОС для логов бизнес-приложения
Ваше Windows-бизнес-приложение опирается только на файловые логи? Журнал событий и ETW — это записи другого уровня, видимые операционному персоналу и стандар...
-
Не только appsettings.json — практическое руководство по управлению конфигурацией Windows-бизнес-приложений (настройки окружений, секреты и место записи)
Практический разбор управления конфигурацией Windows-бизнес-приложений: слои appsettings.json, выбор между IConfiguration и семейством IOptions/IOptionsSnaps...
-
Печать и вывод PDF в Windows-бизнес-приложениях — выбор между System.Drawing.Printing, WPF и библиотеками отчётов
В виде таблицы выбора по требованиям собраны печать WinForms через PrintDocument, печать WPF через FlowDocument/FixedDocument и варианты вывода PDF. Рассматр...
-
Продление жизни и миграция бизнес-приложений VB6 / Access ── таблица решений «оставить, обернуть или заменить»
Как решить, оставить ли бизнес-приложение на VB6 или Access как есть, продлить ли ему жизнь, обернув часть функциональности, или заменить целиком? Разбираем ...
-
Защита от повторного запуска приложения Windows — именованный Mutex и активация окна при повторном запуске
Разбираем, как реализовать защиту бизнес-приложения Windows от повторного запуска с помощью именованного Mutex: подводные камни RDP-окружений из-за различий ...
-
Безопасный вызов Win32 API из C# — практическое руководство по P/Invoke (DllImport / LibraryImport / CsWin32)
Разбираем практические аспекты вызова Win32 API из C# через P/Invoke: разницу между DllImport и LibraryImport, автогенерацию сигнатур через CsWin32, подводны...
-
Аутсорсинг и контрактная разработка Windows-приложения: что стоит прояснить перед заказом
Перед тем как заказать аутсорсинг или контрактную разработку Windows-приложения, разберём, что нужно прояснить: доработка существующего ПО, интеграция с обор...
-
Странная любовь разработчика, или Как я перестал беспокоиться и полюбил Windows
Windows — это хлопотно. Но эти хлопоты — от того, что данная ОС десятилетиями несла на себе реальный бизнес.
-
Почему Windows показывает сообщение «Windows защитил ваш компьютер»
Разбираем с практической точки зрения, почему при распространении Windows-приложений появляется предупреждение SmartScreen: подпись кода, сертификаты EV/OV, ...
-
Ловушки регистрации и bitness при разработке COM/OCX/ActiveX
Разбираем с практической точки зрения типичные ловушки разработки COM, OCX и ActiveX: 32-бит/64-бит, Visual Studio 2022, regsvr32/Regasm, права администратор...
-
Что такое ClickOnce - механизм работы, обновления и случаи применения с практической точки зрения
Разбираем ClickOnce - технологию распространения .NET-приложений для Windows: манифесты, обновления, кэш, подпись, а также случаи, где он подходит и где нет,...
-
Как ускорить проверку приложений с помощью Windows Sandbox
Разбираем, как использовать Windows Sandbox для эффективной локализации проблем с правами администратора, воспроизведения сценариев в чистом окружении и имит...
-
Безопасность автообновления - почему одного HTTPS недостаточно
Рассматриваем автообновление как границу доверия и разбираем с практической точки зрения подписанные метаданные, проверку на стороне клиента, разделение ключ...
-
Минимальные требования к самописному логгеру и чек-лист интеграционных тестов
Чтобы диагностические логи собственного приложения заслуживали доверия, разбираем формат UTF-8 JSON Lines, обязательные поля, flush, ротацию, поведение при с...
-
Где провести границу между юнит-тестами и интеграционными тестами
Разбираем границу между юнит-тестами и интеграционными тестами по осям чистой логики, форматов, связей, различий среды и зависимости от времени и собираем эт...
-
Как работает разрешение имён DLL в Windows — порядок поиска и SxS
Разбираем разрешение имён DLL в Windows с практической точки зрения: DLL search order, Known DLLs, loaded-module list, API set, SxS manifest и влияние API се...
-
Когда на Windows действительно требуются права администратора — UAC, защищённые области и как это определить на этапе проектирования
Разбираем на практических примерах, когда в Windows требуются права администратора — с точки зрения UAC, защищённых областей, служб, драйверов и проектирован...
-
Что такое VBA — ограничения, перспективы, случаи, когда стоит заменить, и реалистичные паттерны миграции
Разбираем основы и ограничения VBA, его перспективы, случаи, когда стоит заменить, и реалистичный порядок поэтапной миграции макросов Excel и внутренних инст...
-
Подводные камни приложений с последовательной связью — вплоть до переподключения и проектирования логов
Разбираем с практической точки зрения подводные камни приложений с последовательной связью, которых стоит избегать при интеграции с оборудованием и управлени...
-
Проектирование Windows-приложений, сохраняющих логи и дампы при сбое
Разбираем, как сочетать обычное логирование, финальный маркер сбоя, WER LocalDumps и процесс-наблюдатель, чтобы даже при падении Windows-приложения из-за неп...
-
UX-проектирование Windows-приложений - приоритеты по средам использования
Разбираем, что приоритетно в UX-проектировании Windows-приложений, в виде таблицы решений по B2C / B2B, способу ввода, среде использования и цене ошибки.
-
Как выбрать между WinForms, WPF и WinUI - практическая таблица решений
Разбираем, что выбрать - WinForms, WPF или WinUI - с точки зрения новой разработки, существующих активов, распространения, выразительности UI и состава команды.
-
Разделяемая память: подводные камни и практические рекомендации
Разбираем подводные камни практического использования разделяемой памяти и проектирование, снижающее частоту сбоев: синхронизация, видимость, время жизни, AB...
-
Введение в пользовательские профили Windows - AppData и NTUSER.DAT
Разбираем основы пользовательских профилей Windows: разграничение AppData, локальный / роуминговый / Mandatory / Temporary профили, Folder Redirection, FSLog...
-
Что такое Reg-Free COM — механизм использования COM без регистрации
Разбираем основы Reg-Free COM, роль контекста активации и манифестов, преимущества, ограничения и критерии выбора в реальных проектах.
-
Как реализовать вывод отчётов Excel — COM / Open XML / шаблоны
Проектирование вывода отчётов в Excel сильно меняется в зависимости от того, автоматизируете ли вы сам Excel, генерируете ли .xlsx напрямую или сохраняете су...
-
Как встроить изображение и текст в кадры MP4 с помощью Media Foundation
В статье разбирается, как средствами Media Foundation встроить изображение и текст в каждый кадр MP4-видео и получить новый MP4: распределение ролей между So...
-
Введение в сбор дампов сбоев Windows — WER/ProcDump/WinDbg
Чтобы отслеживать трудно воспроизводимые сбои Windows-приложений, разбираем, когда использовать WER LocalDumps, ProcDump, MiniDumpWriteDump и WinDbg, а также...
-
Почему в Windows стоит предпочитать ожидание события, а не Sleep(1)
В Windows точность коротких timed wait зависит от гранулярности системных часов и планирования. Если вы ждёте появления работы, завершения ввода-вывода или з...
-
Таблица решений: завершать работу приложения или продолжать при неожиданном исключении
Разбираем, когда после неожиданного исключения приложение стоит завершать, а когда можно продолжать работу — с точки зрения повреждения состояния, внешних по...
-
Как на практике выделить в Windows-приложении «только те операции, для которых нужны права администратора»
Разбираем на практике дизайн, при котором UI Windows-приложения остаётся asInvoker, а операции, требующие прав администратора, выносятся в helper EXE — с учё...
-
Хранение секретов в Windows-приложениях - избегаем открытых настроек с помощью DPAPI
Чтобы не хранить учётные данные и API-токены в конфигурационных файлах Windows-приложений в открытом виде, разбираем принципы DPAPI / ProtectedData, разницу ...
-
Чек-лист перед миграцией с .NET Framework на .NET
Практический чек-лист того, что нужно проверить перед миграцией с .NET Framework на .NET: типы проектов, неподдерживаемые технологии, зависимости NuGet, SDK-...
-
Как преобразовать YUV в RGB с помощью Media Foundation
Разбираем способы преобразования YUV-кадров в RGB в Media Foundation: автоматическое преобразование через Source Reader и самостоятельное преобразование NV12...
-
Расширенные настройки Windows NIC — 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#: права доступа, подпись кода, обновлени...
-
Что такое COM / ActiveX / OCX - объясняем различия и связь между ними
Разбираем с практической точки зрения, что такое COM, что такое ActiveX и что такое OCX: их различия и связь, связь с OLE, где они применяются и как относить...
-
Как вызвать C# Native AOT DLL из C/C++
Разбираем, как публиковать библиотеку классов C# в виде нативной DLL через Native AOT и вызывать точки входа UnmanagedCallersOnly из C/C++ — где это уместно,...
-
Зачем использовать .NET Generic Host и BackgroundService в десктопных приложениях
Разбираем, как использовать Generic Host и BackgroundService, чтобы упорядочить запуск, периодическую обработку, завершение работы, логирование, конфигурацию...
-
Как сегодня поступать с ActiveX / OCX - таблица решений: оставить, обернуть или заменить
Разбираем, что выбрать при обнаружении ActiveX / OCX — оставить, обернуть или заменить, — учитывая 32-бит/64-бит, регистрацию, зависимость от браузера и подд...
-
Строим основу для тестирования нештатных сценариев Windows с помощью Application Verifier
Разбираем, что такое Application Verifier, вместе с построением основы для тестирования нештатных сценариев Windows с использованием Handles, Heaps, Low Reso...
-
Расследование краша промышленной камеры при длительной работе — часть про утечку хендлов
Разбираем, как смотреть на Windows-приложение, которое неожиданно падает после длительной работы, на примере приложения управления промышленной камерой — с т...
-
Почему TCP-ретрансмиссии останавливают связь с промышленной камерой, и как это диагностировать
Разбираем, как искать причину, когда связь с промышленной камерой останавливается на несколько секунд из-за TCP-ретрансмиссий: потери пакетов, RTO, метки вре...
-
Практическое руководство по FileSystemWatcher — защита от потерянных и повторяющихся уведомлений
Разбираем использование FileSystemWatcher и его подводные камни — потерянные уведомления, дублирующиеся события, ловушки определения завершения, повторное ск...
-
Введение в Media Foundation — понимание API через призму COM
Разбираем, что такое Media Foundation, вместе с базовой терминологией Windows-медиа-API — COM, HRESULT, IMFSourceReader, MFT — в том порядке, в котором стоит...
-
Практическое руководство по максимальному приближению к мягкому реальному времени на обычной Windows
Разбираем подход к стабилизации периодической обработки и обработки с низкой задержкой на обычной Windows — с точки зрения точности таймеров, приоритетов, на...
-
Основы взаимного исключения при файловой интеграции — лучшие практики файловых блокировок и атомарного claim
Разбираем взаимное исключение при файловой интеграции с точки зрения файловых блокировок, атомарного claim, схемы temp -> rename и идемпотентности, и рассмат...
-
Вызов нативных DLL из C#: обёртка на C++/CLI или P/Invoke
При использовании нативных DLL из C# разбираем, когда достаточно P/Invoke, а когда себя оправдывает обёртка на C++/CLI — с точки зрения владения объектами, и...
-
Основы COM STA/MTA — модели потоков и как избежать зависаний
Почему UI-поток относится к STA, как работает маршалинг между апартаментами и почему вызовы COM зависают без обработки сообщений — с диаграммами и примером в...
-
Пример моста COM для вызова 64-битной DLL из 32-битного приложения
Когда 32-битное приложение не может напрямую вызвать 64-битную DLL, их можно связать через мост COM. Рассматриваем этот подход, включая ограничения Windows, ...
-
Что такое COM — почему архитектура Windows COM до сих пор прекрасна
Разбираем, что такое COM, с точки зрения проектирования интерфейсов Windows COM, IUnknown, GUID и бинарной совместимости, и объясняем, почему эта модель оста...