Как избавиться от подтверждения UAC при запуске 1С 7.7 в режиме совместимости в Windows 10?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При работе с классической платформой 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 10 и 1С 7.7

Для начала проанализируем ситуацию и поймем, почему операционная система ведет себя именно так. Начиная с Windows Vista, в ядро ОС внедрена технология контроля учетных записей. Любой режим совместимости с версиями ОС ниже Windows 7 автоматически расценивается системой как требующий полных прав администратора для корректной работы устаревшего софта. Windows считает, что старой программе обязательно понадобятся права на запись в защищенные системные папки (например, в C:\Program Files) или в ветки реестра HKEY_LOCAL_MACHINE. Из-за этого ОС принудительно заставляет исполняемый файл запускаться с повышенными привилегиями, что неизбежно вызывает появление окна UAC.

Наша задача — заставить Windows применить к исполняемому файлу 1С 7.7 параметры совместимости с Windows XP, но при этом запустить программу с правами обычного пользователя (без повышения привилегий), обойдя таким образом вызов окна UAC. Рассмотрим подробнее, как это сделать.

Способ 1. Запуск через пакетный файл с флагом RUNASINVOKER

Самый быстрый и простой способ обойти запрос UAC — это запуск приложения с использованием специальной переменной окружения __COMPAT_LAYER со значением RUNASINVOKER. Этот флаг принудительно указывает операционной системе запускать приложение с правами создавшего его процесса (в данном случае — обычного пользователя), игнорируя любые встроенные триггеры повышения прав и настройки совместимости в свойствах ярлыка.

Разберем по шагам, как настроить такой запуск:

  1. Откройте любой текстовый редактор, например Блокнот.
  2. Напишите следующий код для создания пакетного файла (подставьте ваш реальный путь к исполняемому файлу платформы 1С 7.7):

@echo off
set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files (x86)\1Cv77\BIN\1cv7.exe"
  1. Сохраните файл с расширением .bat (например, start_1c77.bat) в удобное для вас место.
  2. Запустите созданный bat-файл. Платформа 1С запустится мгновенно, без запроса прав администратора, но с сохранением всех необходимых для отладки параметров совместимости.

Для того чтобы черное окно командной строки при запуске не мозолило глаза, можно модифицировать ярлык запуска. В поле «Объект» вашего ярлыка вместо прямого пути к bat-файлу пропишите следующую конструкцию:


cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" "C:\Program Files (x86)\1Cv77\BIN\1cv7.exe""

Этот метод полностью рабочий, однако он требует использования командного интерпретатора при каждом запуске, что может показаться некоторым пользователям не совсем эстетичным.

Способ 2. Запись флагов совместимости напрямую в системный реестр

Если мы хотим запускать 1С 7.7 через ее стандартный ярлык без использования сторонних bat-файлов или сложных команд в свойствах ярлыка, мы можем внедрить параметры совместимости и подавления UAC напрямую в реестр Windows. Это наиболее красивое и незаметное для конечного пользователя решение.

Выполните следующие действия:

  1. Нажмите комбинацию клавиш Win + R на клавиатуре, введите команду regedit и нажмите Enter для открытия Редактора реестра.
  2. В зависимости от того, хотите ли вы настроить запуск только для текущего пользователя компьютера или для всех пользователей, перейдите в одну из следующих веток реестра:
    • Для текущего пользователя: HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
    • Для всех пользователей компьютера: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
  3. Кликните правой кнопкой мыши по пустому месту в правой части окна редактора реестра, выберите пункт Создать -> Строковый параметр (REG_SZ).
  4. В качестве **Имени параметра** вставьте полный путь к исполняемому файлу вашей платформы 1С. Например: C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe (если вы используете сетевую или SQL-версию платформы, имя файла может быть 1cv7.exe или 1cv7s.exe).
  5. Дважды кликните по созданному параметру, чтобы открыть окно редактирования значения.
  6. В поле **Значение** введите следующую строку: ~ WINXPSP3 RUNASINVOKER. Обратите внимание на символ тильды ~ в самом начале значения — он обязателен и указывает системе на ручную установку параметров. Параметры разделяются между собой одним пробелом.
  7. Нажмите кнопку «ОК» и закройте Редактор реестра.

Результат работы: Теперь при обычном двойном клике по ярлыку платформы 1С 7.7 операционная система применит режим совместимости с Windows XP SP3 (что устранит баг с фокусом в отладчике), но благодаря флагу RUNASINVOKER запуск произойдет без повышения привилегий и без вывода раздражающего окна UAC.

Способ 3. Обход UAC через Планировщик задач Windows (с сохранением прав администратора)

В некоторых сценариях работы платформы 1С 7.7 права администратора ей все-таки жизненно необходимы. Например, это требуется при первичной регистрации внешних компонент (таких как V7Plus.dll, компоненты печати штрихкодов или работы с торговым оборудованием), а также при работе с базой данных, расположенной в защищенных каталогах. Если запустить 1С без прав администратора через RUNASINVOKER, эти компоненты просто не смогут зарегистрироваться в системе, и вы получите критические ошибки при работе программы.

В такой ситуации мы можем настроить запуск 1С с полноценными правами администратора, но полностью обойти запрос UAC с помощью системного Планировщика задач Windows. Посмотрим на этот процесс по шагам:

  1. Откройте средство управления Планировщик задач (нажмите Win + R, введите taskschd.msc и нажмите Enter).
  2. В правой колонке «Действия» выберите пункт «Создать задачу...» (не «Простую задачу», а именно обычную).
  3. На вкладке «Общие» укажите понятное имя для задачи, например: Start_1C7.7_Admin.
  4. В нижней части этой же вкладки обязательно установите галочку «Выполнить с наивысшими правами». Это ключевой момент, который позволит программе запускаться от имени администратора без вывода предупреждений UAC.
  5. Перейдите на вкладку «Действия» и нажмите кнопку «Создать...». В поле «Действие» должно быть выбрано «Запуск программы». В поле «Программа или сценарий» укажите путь к файлу 1С, например: "C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe". Нажмите «ОК».
  6. Перейдите на вкладку «Условия». Крайне важно снять галочку с пункта «Запускать только при питании от электросети». Если этого не сделать, ярлык запуска не будет работать на ноутбуках при работе от батареи.
  7. Нажмите кнопку «ОК» для сохранения задачи.
  8. Теперь создадим ярлык на рабочем столе для быстрого запуска этой задачи. Кликните правой кнопкой мыши по рабочему столу, выберите Создать -> Ярлык.
  9. В поле «Укажите расположение объекта» введите следующую команду:

schtasks /run /tn "Start_1C7.7_Admin"

  1. Нажмите «Далее», укажите имя ярлыка (например, «1С 7.7 Отладка») и нажмите «Готово». Чтобы придать ярлыку красивый вид, зайдите в его свойства, нажмите кнопку «Сменить значок», перейдите к исполняемому файлу 1cv7s.exe и выберите стандартную иконку 1С.

При клике на такой ярлык система мгновенно запустит назначенную задачу планировщика. Платформа 1С откроется с максимальными административными правами, зарегистрирует все необходимые библиотеки, при этом экран не потемнеет, и UAC не побеспокоит вас своим запросом.

Способ 4. Создание системного исправления (Шима) через Microsoft ACT

Для системных администраторов, которым необходимо масштабировать данное решение на множество рабочих станций в корпоративной сети, отлично подойдет профессиональный метод с использованием инструментария Microsoft Application Compatibility Toolkit (ACT). Мы можем создать так называемый «шим» (Shim) — специальную заплатку совместимости, которая будет внедрена в систему и укажет Windows, как именно нужно запускать конкретное приложение.

Рассмотрим алгоритм действий:

  1. Скачайте и установите средство разработки развертывания Windows ADK, выбрав компонент Application Compatibility Tools. В вашей системе появится утилита Compatibility Administrator (доступны версии для 32-битных и 64-битных приложений, для 1С 7.7 нам понадобится 32-битная версия Compatibility Administrator (32-bit)).
  2. Запустите утилиту от имени администратора.
  3. В дереве слева под разделом Custom Databases нажмите правой кнопкой мыши на новую базу данных и выберите Create New -> Application Fix....
  4. В появившемся мастере укажите имя программы (например, 1C 7.7 Platform), имя разработчика и выберите путь к исполняемому файлу 1cv7.exe. Нажмите «Next».
  5. На этапе выбора параметров совместимости операционной системы (Compatibility Modes) выберите режим совместимости с Windows XP (Service Pack 3).
  6. На следующем шаге в списке дополнительных параметров (Compatibility Fixes) найдите флаг под названием RunAsInvoker и установите напротив него галочку.
  7. Нажимайте «Next» до завершения работы мастера, после чего нажмите кнопку Save на панели инструментов и сохраните созданную базу данных совместимости в файл с расширением .sdb (например, 1c77_compat.sdb).
  8. Чтобы применить созданное исправление на локальном компьютере (или на любой другой рабочей станции), откройте командную строку от имени администратора и выполните установку файла базы данных совместимости с помощью утилиты sdbinst:

sdbinst.exe "C:\PathToYourFile\1c77_compat.sdb"

После выполнения этой команды Windows на глубоком системном уровне запомнит правила запуска для файла 1cv7.exe. При любом запуске программы ОС будет автоматически эмулировать среду Windows XP, подавляя запросы контроля учетных записей UAC.

Альтернативный метод борьбы с прыгающими окнами (без режима совместимости)

Если по каким-то причинам вы не хотите вмешиваться в настройки совместимости операционной системы и изменять параметры запуска UAC, существует простой практический лайфхак, который позволяет избавиться от постоянной активации окон в режиме отладки силами самого разработчика:

  1. Запустите Конфигуратор 1С 7.7 и начните отладку (нажмите клавишу F11).
  2. Как только запустится режим «Предприятие» и фокус переключится на него, сделайте первый шаг отладки в коде.
  3. Перейдите на панель задач Windows и вручную сверните окно запущенного Предприятия (нажмите на его иконку на панели задач, чтобы окно полностью скрылось с экрана).
  4. Вернитесь в окно Конфигуратора и продолжайте пошаговую отладку клавишами F10 / F11.

Проанализировав поведение DWM, мы увидим, что пока окно «Предприятие» находится в свернутом состоянии на панели задач, диспетчер окон Windows не пытается принудительно выводить его на передний план при совершении каждого шага отладки. Фокус ввода будет стабильно оставаться в Конфигураторе, позволяя вам комфортно читать код и анализировать значения переменных.

← На главную