При работе с классической платформой 1С:Предприятие 7.7 в операционной системе Windows 10 разработчики часто сталкиваются с крайне неприятным поведением отладчика в Конфигураторе. Во время пошаговой отладки (при нажатии клавиш F11 или F10) фокус ввода и активное окно постоянно переключаются с Конфигуратора на запущенное диалоговое окно Предприятия. Этот баг связан с особенностями работы современного диспетчера окон Windows — DWM (Desktop Window Manager), который некорректно обрабатывает перерисовку и фокус устаревших приложений.
Проверенным решением проблемы с «прыгающими» окнами является установка режима совместимости исполняемого файла 1cv7.exe (или 1cv7s.exe) с операционной системой Windows XP (пакет обновления 3). Однако здесь разработчик утыкается в другую системную преграду: при каждом запуске программы операционная система начинает настойчиво требовать подтверждения контроля учетных записей (UAC) — «Разрешить этому приложению вносить изменения на вашем устройстве?». Полностью отключать UAC из-за одной программы крайне небезопасно для системы, а постоянное нажатие кнопки подтверждения сильно утомляет.
В этой статье мы подробно и по шагам разберем несколько эффективных способов решения этой проблемы, которые позволят сохранить режим совместимости с Windows XP для комфортной отладки 1С 7.7 и одновременно избавят вас от назойливых запросов UAC.
Для начала проанализируем ситуацию и поймем, почему операционная система ведет себя именно так. Начиная с Windows Vista, в ядро ОС внедрена технология контроля учетных записей. Любой режим совместимости с версиями ОС ниже Windows 7 автоматически расценивается системой как требующий полных прав администратора для корректной работы устаревшего софта. Windows считает, что старой программе обязательно понадобятся права на запись в защищенные системные папки (например, в C:\Program Files) или в ветки реестра HKEY_LOCAL_MACHINE. Из-за этого ОС принудительно заставляет исполняемый файл запускаться с повышенными привилегиями, что неизбежно вызывает появление окна UAC.
Наша задача — заставить Windows применить к исполняемому файлу 1С 7.7 параметры совместимости с Windows XP, но при этом запустить программу с правами обычного пользователя (без повышения привилегий), обойдя таким образом вызов окна UAC. Рассмотрим подробнее, как это сделать.
Самый быстрый и простой способ обойти запрос UAC — это запуск приложения с использованием специальной переменной окружения __COMPAT_LAYER со значением RUNASINVOKER. Этот флаг принудительно указывает операционной системе запускать приложение с правами создавшего его процесса (в данном случае — обычного пользователя), игнорируя любые встроенные триггеры повышения прав и настройки совместимости в свойствах ярлыка.
Разберем по шагам, как настроить такой запуск:
@echo off
set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files (x86)\1Cv77\BIN\1cv7.exe"
.bat (например, start_1c77.bat) в удобное для вас место.Для того чтобы черное окно командной строки при запуске не мозолило глаза, можно модифицировать ярлык запуска. В поле «Объект» вашего ярлыка вместо прямого пути к bat-файлу пропишите следующую конструкцию:
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" "C:\Program Files (x86)\1Cv77\BIN\1cv7.exe""
Этот метод полностью рабочий, однако он требует использования командного интерпретатора при каждом запуске, что может показаться некоторым пользователям не совсем эстетичным.
Если мы хотим запускать 1С 7.7 через ее стандартный ярлык без использования сторонних bat-файлов или сложных команд в свойствах ярлыка, мы можем внедрить параметры совместимости и подавления UAC напрямую в реестр Windows. Это наиболее красивое и незаметное для конечного пользователя решение.
Выполните следующие действия:
regedit и нажмите Enter для открытия Редактора реестра.HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\LayersHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\LayersC:\Program Files (x86)\1Cv77\BIN\1cv7s.exe (если вы используете сетевую или SQL-версию платформы, имя файла может быть 1cv7.exe или 1cv7s.exe).~ WINXPSP3 RUNASINVOKER. Обратите внимание на символ тильды ~ в самом начале значения — он обязателен и указывает системе на ручную установку параметров. Параметры разделяются между собой одним пробелом.Результат работы: Теперь при обычном двойном клике по ярлыку платформы 1С 7.7 операционная система применит режим совместимости с Windows XP SP3 (что устранит баг с фокусом в отладчике), но благодаря флагу RUNASINVOKER запуск произойдет без повышения привилегий и без вывода раздражающего окна UAC.
В некоторых сценариях работы платформы 1С 7.7 права администратора ей все-таки жизненно необходимы. Например, это требуется при первичной регистрации внешних компонент (таких как V7Plus.dll, компоненты печати штрихкодов или работы с торговым оборудованием), а также при работе с базой данных, расположенной в защищенных каталогах. Если запустить 1С без прав администратора через RUNASINVOKER, эти компоненты просто не смогут зарегистрироваться в системе, и вы получите критические ошибки при работе программы.
В такой ситуации мы можем настроить запуск 1С с полноценными правами администратора, но полностью обойти запрос UAC с помощью системного Планировщика задач Windows. Посмотрим на этот процесс по шагам:
taskschd.msc и нажмите Enter).Start_1C7.7_Admin."C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe". Нажмите «ОК».
schtasks /run /tn "Start_1C7.7_Admin"
1cv7s.exe и выберите стандартную иконку 1С.При клике на такой ярлык система мгновенно запустит назначенную задачу планировщика. Платформа 1С откроется с максимальными административными правами, зарегистрирует все необходимые библиотеки, при этом экран не потемнеет, и UAC не побеспокоит вас своим запросом.
Для системных администраторов, которым необходимо масштабировать данное решение на множество рабочих станций в корпоративной сети, отлично подойдет профессиональный метод с использованием инструментария Microsoft Application Compatibility Toolkit (ACT). Мы можем создать так называемый «шим» (Shim) — специальную заплатку совместимости, которая будет внедрена в систему и укажет Windows, как именно нужно запускать конкретное приложение.
Рассмотрим алгоритм действий:
Compatibility Administrator (32-bit)).1C 7.7 Platform), имя разработчика и выберите путь к исполняемому файлу 1cv7.exe. Нажмите «Next».RunAsInvoker и установите напротив него галочку..sdb (например, 1c77_compat.sdb).sdbinst:
sdbinst.exe "C:\PathToYourFile\1c77_compat.sdb"
После выполнения этой команды Windows на глубоком системном уровне запомнит правила запуска для файла 1cv7.exe. При любом запуске программы ОС будет автоматически эмулировать среду Windows XP, подавляя запросы контроля учетных записей UAC.
Если по каким-то причинам вы не хотите вмешиваться в настройки совместимости операционной системы и изменять параметры запуска UAC, существует простой практический лайфхак, который позволяет избавиться от постоянной активации окон в режиме отладки силами самого разработчика:
Проанализировав поведение DWM, мы увидим, что пока окно «Предприятие» находится в свернутом состоянии на панели задач, диспетчер окон Windows не пытается принудительно выводить его на передний план при совершении каждого шага отладки. Фокус ввода будет стабильно оставаться в Конфигураторе, позволяя вам комфортно читать код и анализировать значения переменных.