Как правильно зарегистрировать дополнительную службу сервера 1С и исправить синтаксические ошибки в батнике

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При необходимости запустить на одном физическом сервере несколько экземпляров 1С:Предприятия (например, разные версии 8.3 или одновременную работу 8.2 и 8.3), системные администраторы часто прибегают к ручной регистрации служб через командную строку. Однако этот процесс сопряжен с множеством синтаксических нюансов операционной системы Windows. В этой статье мы подробно разберем, как создать корректный исполняемый файл (bat-файл) для регистрации службы ragent, проанализируем типичные ошибки и выясним, как правильно настроить порты и права доступа.

Анализ проблемы: почему возникает синтаксическая ошибка

Рассмотрим ситуацию, когда при запуске готового скрипта система выдает неочевидное сообщение: "Ошибка в синтаксисе команды". Чаще всего это происходит из-за некорректной работы с переменными окружения в Windows CMD или несоблюдения специфических требований утилиты sc. Проанализируем типичный код, который вызывает проблемы:


set SrvUserName = ".\USR1CV815"
set SrvDir = "C:\Program Files (x86)\1cv8\srvinfo_%1"
if not exist %SrvDir% mkdir %SrvDir%

В данном примере кроются сразу две критические ошибки. Во-первых, в команде set использование пробелов вокруг знака равенства недопустимо, так как Windows включит эти пробелы в имя или значение переменной. Во-вторых, если переменная не была определена из-за ошибки в set, последующая команда mkdir получит пустой аргумент, что и вызовет системный сбой.

Шаг 1. Правильное объявление переменных в Batch-файле

Выясним причину первой ошибки. В командных файлах Windows формат команды присваивания значения должен быть строгим. Давайте исправим блок инициализации параметров нашего сервера 1С. Важно убрать все лишние пробелы до и после знака =.

Рассмотрим исправленный вариант блока конфигурации:


rem %1 – полный номер версии платформы, например 8.3.15.1830
rem %2 – первые две цифры портов, например 25

set SrvUserName=".\USR1CV8"
set SrvUserPwd="YourPassword"
set RangePort=%260:%291
set BasePort=%241
set CtrlPort=%240
set SrvDir="C:\1C_Data\srvinfo_%1"
set SrvcName="1C_Enterprise_8.3.15.1830"

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

Шаг 2. Особенности команды sc create

Теперь разберем самый важный и коварный момент — регистрацию самой службы через системную утилиту sc. Основная особенность этой команды заключается в том, что после каждого знака равенства (параметра) обязательно должен идти один пробел перед значением. Если вы напишете binPath="путь", команда не сработает. Правильно писать: binPath= "путь".

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


set BinPath="\"C:\Program Files\1cv8\8.3.15.1830\bin\ragent.exe\" -srvc -agent -regport %BasePort% -port %CtrlPort% -range %RangePort% -d %SrvDir% -debug"

sc create %SrvcName% binPath= %BinPath% start= auto obj= %SrvUserName% password= %SrvUserPwd% displayname= %SrvcName% depend= Dnscache/Tcpip/lanmanworkstation/lanmanserver

В этом примере мы видим:

  1. Использование -srvc — обязательный флаг для запуска процесса в режиме службы.
  2. Использование -debug — полезный параметр, позволяющий в будущем подключаться отладчиком к серверным модулям.
  3. Параметр -d — указывает путь к папке с реестром кластера. Для каждой службы эта папка обязательно должна быть уникальной.

Шаг 3. Кодировка текстового файла и "кракозябры"

Часто при редактировании батников в современных текстовых редакторах (например, VS Code или Notepad++ с настройками по умолчанию) русские комментарии превращаются в нечитаемый набор символов. Это происходит из-за несовпадения кодировок UTF-8 и OEM 866 (которая используется в консоли Windows по умолчанию).

Рассмотрим, как это исправить:

Шаг 4. Настройка портов и Брандмауэра

Зарегистрировать службу — это только половина дела. Если мы запускаем вторую версию платформы, мы должны развести их по разным сетевым портам. По умолчанию 1С использует порты 1540, 1541 и диапазон 1560-1591.

Рассмотрим пример настройки для второй службы:

Важный момент: Windows не откроет эти порты автоматически. После успешной регистрации службы необходимо зайти в настройки Брандмауэра Windows и создать "Правило для входящих подключений", разрешив трафик по вышеуказанным TCP-портам. Без этого пользователи не смогут подключиться к базе, хотя служба будет иметь статус "Выполняется".

Шаг 5. Права на папку srvinfo и COM-соединитель

Разберем еще один нюанс, о котором часто забывают. Если в параметре obj= вы указали конкретного пользователя (например, USR1CV8), то этот пользователь должен обладать правами "Полный доступ" на директорию, указанную в параметре -d.

Алгоритм действий следующий:

  1. Создаем папку вручную или через скрипт (mkdir).
  2. Заходим в свойства папки -> вкладка "Безопасность".
  3. Добавляем пользователя службы 1С и даем ему полные права.

Также стоит помнить про библиотеку comcntr.dll. В операционной системе может быть зарегистрирована только одна версия COM-соединителя. Если вы активно используете внешние соединения из других программ, вам придется вручную перерегистрировать библиотеку нужной версии через regsvr32, если вы переходите на новый релиз как основной.

Итоговый пример надежного скрипта

Проанализируем финальный вариант скрипта, который учитывает все разобранные выше ошибки:


@echo off
set VERSION=8.3.15.1830
set PORT_PREFIX=25

set SrvName="1C_Enterprise_Server_%VERSION%"
set SrvDir="C:\1C_Data\srvinfo_%VERSION%"
set BinPath="\"C:\Program Files\1cv8\%VERSION%\bin\ragent.exe\" -srvc -agent -regport %PORT_PREFIX%41 -port %PORT_PREFIX%40 -range %PORT_PREFIX%60:%PORT_PREFIX%91 -d \"%SrvDir%\""

if not exist "%SrvDir%" mkdir "%SrvDir%"

sc create %SrvName% binPath= %BinPath% start= auto obj= LocalSystem displayname= %SrvName% depend= Dnscache/Tcpip/lanmanworkstation/lanmanserver

if %ERRORLEVEL% EQU 0 (
    echo Служба успешно зарегистрирована.
    sc start %SrvName%
) else (
    echo Произошла ошибка при регистрации службы.
)
pause

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

← На главную