Есть у кого-нибудь практический опыт настройки запуска 1С из виндового планировщика в режиме "без входа в систему"? Нужно простыми словами разжевать админу что и как настроить.
У меня работает под моей учеткой на серсере сеанс робота.
Когда сервак перезагружается, 1С не запускается пока не войду :(
Цитата: trdm от 21 марта 2024, 12:36У меня работает под моей учеткой на серсере сеанс робота.
Когда сервак перезагружается, 1С не запускается пока не войду :(
От подобной схемы и хочется избавиться.
1. Выгрузить ветку реестра под пользователем с зарегистрированной базой, например в файл 1cDbList.reg
[HKEY_CURRENT_USER\Software\1C]
2. Выполнить батник запуска 1С в режиме "без входа в систему" единожды со следующей строкой
regedit /s C:\1c\1cRobot\1cDbList.reg
затем ее можно закомментировать
3. Строка запуска выглядит примерно так
start "" /wait "C:\Program Files (x86)\1CV77\BIN\1cv7.exe" ENTERPRISE /DC:\1c\MNFC /NRobot /P777
Цитата: amo|obs от 22 марта 2024, 10:101. Выгрузить ветку реестра под пользователем с зарегистрированной базой, например в файл 1cDbList.reg
[HKEY_CURRENT_USER\Software\1C]
2. Выполнить батник запуска 1С в режиме "без входа в систему" единожды со следующей строкой
regedit /s C:\1c\1cRobot\1cDbList.reg
затем ее можно закомментировать
3. Строка запуска выглядит примерно так
start "" /wait "C:\Program Files (x86)\1CV77\BIN\1cv7.exe" ENTERPRISE /DC:\1c\MNFC /NRobot /P777
Т.е. проблемы только с регистрацией базы в реестре?
Вот так и работает
https://disk.yandex.ru/d/5cuUmBNPF6wisQ
Цитата: АЛьФ от 22 марта 2024, 10:13Цитата: amo|obs от 22 марта 2024, 10:101. Выгрузить ветку реестра под пользователем с зарегистрированной базой, например в файл 1cDbList.reg
[HKEY_CURRENT_USER\Software\1C]
2. Выполнить батник запуска 1С в режиме "без входа в систему" единожды со следующей строкой
regedit /s C:\1c\1cRobot\1cDbList.reg
затем ее можно закомментировать
3. Строка запуска выглядит примерно так
start "" /wait "C:\Program Files (x86)\1CV77\BIN\1cv7.exe" ENTERPRISE /DC:\1c\MNFC /NRobot /P777
Т.е. проблемы только с регистрацией базы в реестре?
Не исключено.
Можно проще - зарегистрировать базы "вручную"
Спасибо. Передам админу, пусть экспериментирует.
У нас все роботы работают без регистрации пользователя. Один раз заходишь под этим пользователем на сервер и запускаешь там базу. после захода убираешь галку с советах дня, иначе автоматом пользователь не выйдет. И еще маленький ньюанс. В планировщике задач на вкладке Действия есть поле Рабочая папка (Необязательно). пока это необязательное поле не заполнил, ничего не работало :( Это на win 2008, как на других не подскажу
Цитата: vladmenleo от 22 марта 2024, 11:45У нас все роботы работают без регистрации пользователя. Один раз заходишь под этим пользователем на сервер и запускаешь там базу. после захода убираешь галку с советах дня, иначе автоматом пользователь не выйдет. И еще маленький ньюанс. В планировщике задач на вкладке Действия есть поле Рабочая папка (Необязательно). пока это необязательное поле не заполнил, ничего не работало :( Это на win 2008, как на других не подскажу
и после перезапуска сервака не нужно авторизовываться пользователю?
Цитата: GRUNGO от 22 марта 2024, 16:14и после перезапуска сервака не нужно авторизовываться пользователю?
Нет, не нужно. В шедулере естественно прописан пароль, а так постоянно на сервере никто не залогинен
Цитата: vladmenleo от 22 марта 2024, 11:45...И еще маленький ньюанс. В планировщике задач на вкладке Действия есть поле Рабочая папка (Необязательно). пока это необязательное поле не заполнил, ничего не работало :( Это на win 2008, как на других не подскажу
У меня наоборот, работает с пустым полем Рабочая папка, попытки указать рабочую папку приводили к ошибке запуска "неверно указан путь...", win2008.
Один минус в запуске без авторизации - процесс виден только в диспетчере задач.
Что-то не получается у нашего админа настроить запуск без авторизации.
И тут мне подумалось... А никто не запускал 1С из задания в SQL Server Agent? Сейчас у меня там настроен скрип, который выгружает базу и архивирует выгруженный файл bak сторонним архиватором (т.к. SQL Server 2005 сам не архивирует выгрузку). Так вот, что мне мешает прописать там же запуск 1С для выполнения регламентных заданий?
Хм... Вроде получилось...
Но уперся в то, что служебный пользователь в базе логинется в базу и тут же отключается. До начала работы глобальника не доходит. Как-то можно оттестировать почему он отпадает?
Полные права виндявого пользователя на папку с базой должны быть.
Цитата: Злоп от 29 марта 2024, 12:43Полные права виндявого пользователя на папку с базой должны быть.
Папка сетевая и шара подключается с помощью
EXEC xp_cmdshell 'net use R: \\192.168.0.43\e$\Development\Programmer\AFedorov\_bases_\v7\_copy_ /user:*** /Persistent:no'
Из задания в папку пишет. Как проверить достаточно ли прав?
Попробовал переделать на обращение через OLE.
Initialize возвращает 0 и в журнале регистрации теперь только подключение, без отключения.
На самом деле с каталогом непонятно, конечно.
Подключается с данными одного пользователя, но запуск 1С идет от системы (от пользователя, под которым SQL запущен). 1С папку видит и к базе логинется, в журнал регистрации пишет. Но тут же отваливается, записав это в тот же ЖР. Т.е. доступа достаточно на чтение и на запись.
Вот почему бы 1С в этом случает не писать в тот же ЖР причину отвала? Загадка...
Ха! А вот еще тайна природы.
Если код запроса запустить не в задании, а просто в запросе, то запускается и начинает работу. Но валится в исключение на выполнении метода глСервис.ПолучитьСписокАктивныхПользователей().
А вот фиг! Тайна еще тайней получается. Сработал, как в предыдущем сообщении только один раз. А теперь при любом запуске подключение и тут же отвал.
Выявилась странная закономерность. Подключаюсь к серверу, на котором стоит SQL, своим логином. Там запускаю "от имени администратора" 1С под регламентным пользователем. Все запускается, как ожидается.
Тут же со своего компа в открытой "менежмент студио" запускаю запрос с регламентыми заданиями, получаю исключение в методе ПолучитьСписокАктивныхПользователей (т.е. идет уже запуск 1С на уровне выполнения глобального модуля и дошло до ПриНачалеРаботыСистемы()). Запускаю этот же запрос второй раз, получаю вход-выход без инициализации глобального модуля.
А может и нет связи между запусками...
Ваще не понимаю что там происходит...
Тупик... Так ничего и не удалось сегодня сделать. То вход-выход, то вход - вылет по исключению. Без какой-либо системы.
Пытался делать запуск от имени моего логина. Безрезультатно.
Похоже придется писать подмену dll, чтобы отловить где же затык.
В итоге решение: использовать регламентное задание v8 для запуска батника, в котором прописан запуск семерки.
Все работает.
Здравствуйте
У меня настроено так:
1. Создан cmd - шник, в котором выполняются различные регламентные действия (создание баккапов конфигруатором и запуск 1с для восстановления индексных файлов:
set CURDATE=%DATE%
set LOG=C:\cmds\Log\backup-%CURDATE:~6,4%-%CURDATE:~3,2%-%CURDATE:~0,2%.txt
set BACKUP_PATH=\\-------\backup\1c77
echo %TIME% ***Begin > %LOG%
del /q D:\-------\ExtForms\DB_SQLite\*
echo %TIME% БД SQLite очищена >> %LOG%
"%ProgramFiles(x86)%\1cv77\bin\1cv7s.exe" config /dD:\------- /tE:\Temp /nBackup /@C:\cmds\Backup
echo %TIME% Резервная копия создана >> %LOG%
if exist %BACKUP_PATH% (
move E:\Backup\base.zip %BACKUP_PATH%\Work-%CURDATE:~6,4%-%CURDATE:~3,2%-%CURDATE:~0,2%.zip >> %LOG%
) else (
rename E:\Backup\base.zip Work-%CURDATE:~6,4%-%CURDATE:~3,2%-%CURDATE:~0,2%.zip
)
del /f/q D:\------\*.cdx
"%ProgramFiles(x86)%\1cv77\bin\1cv7s.exe" enterprise /m /dD:\----- /tE:\Temp /nBackup
echo %TIME% Индексы восстановлены >> %LOG%
А раньше и был запуск от имени специального пользователя регламентов - для него в "ПриНачалеРаботыСистемы()" был запуск разных обработок.
2. в планировщике этот батничек запускается от имени специального юзера, с настройками "Выполнять для всех пользователей" и "Выполнять с наивысшими правами"
Естественно, для этого пользователя необходимые базы уже прописаны в реестре
Эта связка работает уже лет 10
Цитата: АЛьФ от 29 марта 2024, 13:48Ха! А вот еще тайна природы.
Если код запроса запустить не в задании, а просто в запросе, то запускается и начинает работу. Но валится в исключение на выполнении метода глСервис.ПолучитьСписокАктивныхПользователей().
Так а что за исключение? Может проблема в правах доступа к папкам пользователей?
Вообще на сколько я помню с семерошных времен - для корректной работы семерки сессия под которой запускается платформа должна быть открыта интерактивно хотя бы один раз после перезапуска сервера, иначе получаются такие спецеффекты. Там какой-то затык с контекстом.
Сам запуск делался штатным планировщиком без выкрутас. Только первый запуск делался в ручном режиме под пользователем чтобы все правильно прописалось и настроилось
А про реализацию задачи уже на стороне 1С - я в свое время писал такую штуку для разбора командной строки из ярлыка запуска
вот например строка для запуска в авторежиме отчета на техподдержку и выгрузку его в HTML
""C:\Program Files\1Cv77\BIN\1cv7s.exe" enterprise /d"\\ИмяПК\fs\1C\base\itbase\" /N"ИнфоЭкран" "Attr-Отчет.ИнфоЭкранСПП,ИнфоЭкран,ХТМ,ЗакрытьФорму,ЗакрытьПриложение""
1. код запуска основной функции при старте системы
//обработка доппараметров командной строки, пока только для инфоэкранов
Если ОбработкаДопПараметровКоманднойСтроки() > 0 Тогда
//В параметрах передан признак закрытия приложения
СтатусВозврата(0);
Возврат;
КонецЕсли;
//работа системы для инфоэкрана закончена
2. код самой функции (при старте системы)
//_____________________________________________________________________________
Функция ОбработкаДопПараметровКоманднойСтроки()
ЕстьПроблемы = 0;
Закрыть1С = 0;
Если (НазваниеНабораПрав() = "Пользователь") и (ИмяПользователя() = "ИнфоЭкран") Тогда
Состояние("Обработка параметров командной строки");
////пока не формируем отчеты из регистров эта проверка не нужна
////проверка наличия "Оперативного учета"
//Если НаличиеКомпонентыОперативныйУчет() = 0 Тогда
// Возврат 2;
//КонецЕсли;
////эта проверка пока тоже под вопросом
//// автоматическое открытие периода
//Если АвтоматическоеОткрытиеПериода() = 0 Тогда
// Возврат 5;
//КонецЕсли;
////загружаем только формекс, больше ничего из компонент не надо
//Если глЗагрузитьКомпонентуФормекс(0) = 0 Тогда
// //формекс не загружен, инициализировать командную строку не получится
// СписокДопПарам = 0;
//Иначе
// //формекс загружен, инициализируем командную строку
// СписокДопПарам = РазборКоманднойСтрокиФормекс();
//КонецЕсли;
//2024-10-02
Если ПустоеЗначение(глФормексЗагружен) = 1 Тогда
Если глЗагрузитьКомпонентуФормекс() = 0 Тогда
//формекс не загружен, инициализировать командную строку не получится
СписокДопПарам = 0;
КонецЕсли;
//формекс загружен только что, инициализируем командную строку
СписокДопПарам = РазборКоманднойСтрокиФормекс();
Иначе
//формекс уже загружен, инициализируем командную строку
СписокДопПарам = РазборКоманднойСтрокиФормекс();
КонецЕсли;
//2024-10-02
Если СписокДопПарам = 0 Тогда
//доппараметры отсутствуют или не инициализирован Формекс
//поэтому запускаем только то что точно надо
Результ = "";
Результ = ИнфоЭкранСПП(0);
Закрыть1С = 1;
Иначе
Если (ТипЗначенияСтр(СписокДопПарам) = "СписокЗначений") тогда //и (СписокДопПарам.ПолучитьЗначение(1) = "ДопПараметры") Тогда
Если ТипЗначенияСтр(глСервис) = "Сервис" Тогда // (глФормексЗагружен = 1)
Конт = "глМод";
Для Инд = 1 По СписокДопПарам.РазмерСписка() Цикл
//Ищем набор объектов
ТекущийПараметр = СокрЛП(СписокДопПарам.ПолучитьЗначение(Инд));
//в принципе можно в цикле увеличитвать значения счетчика на кол-во значений по умолчанию
//для отчета на 4 параметра
//для обработки на 3 параметра
Если Найти(ТекущийПараметр,"Обработка.") = 1 Тогда
ТекущийПараметр = СтрЗаменить(ТекущийПараметр, "Обработка.", "");
ИначеЕсли Найти(ТекущийПараметр,"Отчет.") = 1 Тогда
ТекущийПараметр = СтрЗаменить(ТекущийПараметр, "Отчет.", "");
ИначеЕсли Найти(ТекущийПараметр,"ЗакрытьПриложение") = 1 Тогда
ТекущийПараметр = "";
Закрыть1С = 1;
Иначе
ТекущийПараметр = "";
КонецЕсли;
Если ПустоеЗначение(ТекущийПараметр) = 0 Тогда
Результ = "";
Попытка
глСервис.ВыполнитьФункцию(Конт,ТекущийПараметр,СписокДопПарам,Результ);
Исключение
Сообщить(ОписаниеОшибки());
Сообщить("Ошибка при выполнении функции: " + "ТекущийПараметр", "!");
ЕстьПроблемы = 1;
КонецПопытки;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЕстьПроблемы > 0 Тогда
Сообщить("Были ошибки при выполнении глобального модуля", "!!!");
КонецЕсли;
Возврат Закрыть1С;
КонецФункции // ОбработкаДопПараметровКоманднойСтроки
3. а дальше в нужном объекте производим разбор параметров полученных из функции (2)