
VB6 в 2026 году: сборка, Windows 11, 32 бита и регистрация COM
Приложения на Visual Basic 6 до сих пор считают деньги, печатают накладные и управляют станками. Собрали практики, которые помогают держать их живыми на современных Windows без авралов.
Что на самом деле поддерживается
Начнём с хорошей новости. Среда выполнения VB6 (msvbvm60.dll и базовый набор контролов) входит в Windows и поддерживается Microsoft в рамках политики «It Just Works» на протяжении жизненного цикла Windows 11 и Windows Server последних версий. Готовый EXE в большинстве случаев запускается без танцев.
Плохая новость касается всего остального. Сама среда разработки VB6 официально не поддерживается с 2008 года, многие OCX от сторонних вендоров давно брошены, а часть системных компонентов, на которые опираются старые программы, Microsoft постепенно выключает. Сопровождение VB6 сегодня это в первую очередь управление окружением, а не код.
Сборочная машина как артефакт
Самая частая беда legacy-проекта: собрать его может только один ноутбук, и никто не помнит, что на нём установлено. Первое, что стоит сделать, это превратить сборку в воспроизводимый процесс.
Удобнее всего держать отдельную виртуальную машину (Windows 10 или 11, 32- или 64-битную) с установленной VB6 SP6, всеми OCX и ссылками проекта. Снимок этой машины хранится рядом с репозиторием. IDE ставится с правами администратора, после установки её запускают в режиме совместимости и отключают в установщике пункт Data Access, на котором он часто зависает.
- храните в репозитории не только .vbp, .frm и .bas, но и .frx, .ctx и .res: без бинарных спутников формы не откроются;
- добавьте в .gitattributes правило, запрещающее менять переводы строк у файлов VB6, иначе IDE откажется их читать;
- сложите все сторонние OCX и DLL с версиями в каталог third_party и опишите, откуда они взяты;
- собирайте из командной строки, а не кнопкой в IDE, чтобы сборку мог повторить любой.
@echo off
rem Сборка VB6-проекта без открытия IDE
set VB6="C:\Program Files (x86)\Microsoft Visual Studio\VB98\VB6.EXE"
%VB6% /make "src\Billing.vbp" /outdir "out" /out "out\build.log"
if errorlevel 1 (
type out\build.log
exit /b 1
)
rem подпись исполняемого файла сертификатом организации
signtool sign /fd SHA256 /a /tr http://timestamp.digicert.com /td SHA256 out\Billing.exe32 бита и всё, что из этого следует
VB6 умеет создавать только 32-битный код. На 64-битной Windows такие программы работают в подсистеме WOW64, и это влияет на детали, о которых легко забыть.
Во-первых, процесс видит перенаправленные пути и ветки реестра: обращение к System32 уходит в SysWOW64, а ключи HKLM\Software попадают в WOW6432Node. Если внешний скрипт или установщик пишет настройки в «обычную» ветку, программа их не увидит. Во-вторых, 32-битный процесс не может загрузить 64-битную DLL. Новые версии драйверов ODBC, OLE DB-провайдеры и клиентские библиотеки СУБД часто выходят только в 64-битном варианте, и это самая частая причина внезапной поломки после обновления. В-третьих, адресное пространство ограничено 2 ГБ, а с флагом LARGEADDRESSAWARE до 4 ГБ, и большие отчёты в памяти упираются в этот потолок.
Регистрация COM без сюрпризов
Большинство VB6-программ состоит из EXE и набора ActiveX DLL и OCX, зарегистрированных в системе. Регистрировать их на 64-битной Windows нужно 32-битной утилитой: C:\Windows\SysWOW64\regsvr32.exe. Ошибка «модуль загружен, но точка входа не найдена» или молчаливый отказ часто означает, что запущен 64-битный regsvr32 из System32.
Отдельная тема: совместимость интерфейсов. У ActiveX-проекта в свойствах выставляйте Binary Compatibility и храните эталонную DLL в репозитории. Без этого каждая пересборка генерирует новые GUID, и клиенты, собранные раньше, перестают находить классы.
Если хочется уйти от глобальной регистрации вовсе, используйте reg-free COM: рядом с EXE кладётся манифест, где перечислены DLL и их классы. Программа находит компоненты по манифесту, и две разные версии приложения спокойно живут на одной машине. Манифесты можно сгенерировать утилитами вроде Make My Manifest или вручную через mt.exe.
Что ломается на Windows 11
По опыту сопровождения, проблемы после обновления ОС повторяются. Стоит заранее пройтись по списку и проверить, что из этого использует ваше приложение:
- VBScript: Microsoft объявила о его поэтапном отключении, а VB6-программы часто используют VBScript.RegExp и MSScriptControl. Замените регулярные выражения на собственный разбор или вызов .NET-компонента через COM;
- запись в Program Files и в HKLM без прав администратора: старые программы хранят там настройки, на современной системе их нужно переносить в %APPDATA% и HKCU;
- высокий DPI: формы VB6 не масштабируются, на мониторах 150% текст обрезается. Помогает манифест с dpiAware = false или настройка совместимости;
- SMBv1 и старые сетевые шары: если программа читает файлы с NAS из нулевых, проверьте протокол заранее;
- антивирусы и SmartScreen: неподписанный EXE всё чаще блокируется, подписывайте сборки.
План на ближайшие годы
Переписывать работающую систему целиком ради новизны обычно невыгодно. Разумная стратегия выглядит так: заморозить окружение и автоматизировать сборку, покрыть ключевые расчёты тестами (хотя бы сравнением выходных файлов на эталонных данных), вынести рискованные зависимости, такие как доступ к БД, печать и интеграции, в отдельные компоненты на .NET с COM-интерфейсом.
Тогда VB6-часть постепенно худеет до тонкой оболочки, а новые функции пишутся уже на .NET. Когда оболочка станет достаточно тонкой, её замена на WinForms или веб-интерфейс займёт недели, а не годы.
Как это делают сегодня
Вопросы и ответы
Можно ли установить VB6 IDE на Windows 11?
Да, на практике она устанавливается и работает при запуске от администратора и в режиме совместимости. Официальной поддержки IDE нет, поэтому держите её в выделенной виртуальной машине.
Почему после обновления драйвера пропал доступ к базе?
Скорее всего, установлен только 64-битный драйвер. VB6-процесс 32-битный и видит только 32-битные драйверы ODBC и провайдеры OLE DB, их нужно ставить отдельно.
Что делать, если исходников части OCX нет?
Зафиксируйте бинарник и версию, проверьте его работу на целевой ОС и начните планировать замену. Компонент без исходников и без вендора это главный риск сопровождения.