Запуск приложения в фоне - автообмен для 1С:Предприятие

Реально работающие задачи в реальных условиях.
Ответить
Аватара пользователя
Vadim
Пассажир
Сообщения: 3
Зарегистрирован: Пт июл 03, 2009 1:18 pm
Откуда: Новосибирск
Благодарил (а): 0
Поблагодарили: 0
Контактная информация:

Запуск приложения в фоне - автообмен для 1С:Предприятие

Сообщение Vadim » Пн июл 06, 2009 12:55 pm

Здравствуйте!

Задачу запуска "1С:Конфигуратор" в пакетном режиме с помощью xStarter для выполнения задач автообмена между базами 1C с использованием компоненты УРИБ, без интерактивного входа пользователя в систему и без появления окошка "1С:Конфигуратор" на рабочем столе, мне удалось решить следующим способом:

1. Заходим в систему под определенным пользователем, например под пользователем "Администратор", настраиваем автообмен в "1С:Конфигуратор". В этот момент часть настроек, таких как названия баз данных, названия папок загрузки и выгрузки будет сохранена в реестре пользователя под которым настраивается автообмен. Все проблемы запуска "1С:Конфигуратор" в фоновом режиме для автообмена связаны как раз с тем, что процесс "1С:Конфигуратор"-а "не видит" этих данных в реестре до тех пор, пока пользователь, под которым он был настроен, не войдет в систему ИНТЕРАКТИВНО, на консоль или в терминальную сессию, и это поведение не зависит от того под каким пользователем Вы пытаетесь запустить процесс "1С:Конфигуратор"-а. Также это не зависит и от того, пытаетесь ли Вы поставить галочку напротив "Load profile" в XStarter для принудительной загрузки куста пользователя в реестр - см. ниже;

2. Настраиваем запуск xStarter как службы от имени учетной записи "LOCAL_SYSTEM";

3. Настраиваем запуск задач автообмена в xStarter в ОТДЕЛЬНОМ ПРОЦЕССЕ;

4. Заходим в систему под тем пользователем, под которым был настроен автообмен в "1С:Конфигуратор". Это не обязательно, но так удобнее, чтобы не искать в реестре куст этого пользователя. Этому пользователю на время нужно предоставить право редактирования реестра Windows, если он не является администратором. Далее исходим из предположения что выполнением следующих пунктов будет заниматься опытный администратор системы;

5. С помощью редактора реестра "RegWorks" правой кнопкой мышки копируем в буфер обмена подраздел "1С" из раздела
реестра "HKEY_CURRENT_USER\Software". Из известных мне редакторов реестра только "RegWorks" умеет копировать в буфер и обратно ЧАСТЬ ветки реестра;

6. Идем в раздел реестра "HKEY_USERS\.DEFAULT\Software" и вставляем в этот раздел подраздел "1С" из буфера обмена. Не всегда эта процедура проходит гладко, поэтому по окончании необходимо убедиться что все данные скопировались точно. Случай когда в этом разделе уже присутствует подраздел "1C" требует особого внимания. В простейшем случае его можно удалить перед вставкой, но только тогда, когда у Вас есть гарантия что это никак не повлияет на работу системы 1С. Если гарантии нет, то добавлять настройки в этот раздел придется руками и очень тщательно, чтобы не повредить работе системы;

7. Открываем консоль управления службами: "Пуск" -> "Выполнить" -> вводим services.msc, у службы xStarter снимаем галочку в пункте "Разрешить взаимодействие с рабочим столом" на вкладке "Вход в систему". В случае запуска xStarter от имени "LOCAL_SYSTEM" выполнение этого пункта возможно не является обязательным. Теперь можно вывести всех пользователей из системы и протестировать выполнение задач автообмена в фоновом режиме.

8. В случае если "1С:Конфигуратор" в качестве папок загрузки и выгрузки использует папки открытые для доступа по сети на другом сервере, то будучи запущен от имени "LOCAL_SYSTEM" он не сможет с ними работать, так как, как это уже неоднократно обсуждалось на форуме, учетная запись "LOCAL_SYSTEM" по умолчанию имеет ограничения на работу по сети в сравнении с другими пользователями. В домене эту проблему мне удалось решить следующим образом - на компьютере, где находятся эти папки, открываем правой кнопкой мышки свойства папки и на вкладках "Доступ" и "Безопасность" добавляем в списки пользователей ИМЯ КОМПЬЮТЕРА на котором запускается "1С:Конфигуратор" и В ОБОИХ вкладках даем этому компьютеру права на полный доступ. В окошке выбора пользователей из AD тип объекта "Компьютеры" по умолчанию не включен в список поиска, поэтому его надо сначала включить поставив галочку напротив него в окошке "Типы объектов".

9. Если по каким либо причинам настроить работу с папками загрузки и выгрузки по протоколу SMB согласно пункта 8 не удастся, то всегда в качестве хорошей альтернативы можно использовать FTP сервер. Пути к папкам будет легко исправить в реестре.

10. Бывают ситуации когда 1С запускается в режиме ENTERPRISE для выполнения внешней обработки с использованием сценариев написанных на языке V7Script, включенным фирмой 1С в состав Web-расширения системы 1С:Предприятие. Такие, как например автоматическая генерация прайс-листа в виде таблицы Excel. В этом случае для выполнения этих сценариев используется Microsoft Windows Script Host (WSH), в русских версиях Windows называемый Сервером Сценариев (в момент старта обработки будет запускаться процесс wscript.exe). Поэтому оформить запуск 1С в этом случае только в рамках xStarter видимо не удастся, и придется в качестве задачи для запуска указать внешний файл, (например robot.vbs) который будет содержать примерно следующий код:

Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "1cv7s.exe ENTERPRISE /DF:\Базы1С\db /NRobot /Probot"

Конечно, в данном случае система 1С настроена на автоматический запуск обработки при входе пользователя robot в нее.

Внимание!

Пользователям не знакомым с принципами устройства реестра Windows, выполнение действий указанных в пунктах 5 и 6 на рабочей системе категорически не рекомендуется во избежание ее безвозвратной потери!

Использованное ПО:

1) Win2003EE со всеми последними обновлениями и сервером терминалов;
2) xStarter 1.9.3.76 RUS - устанавливался удаленно в терминальной сессии;
3) 1C:Предприятие v7.7 с компонентой УРИБ;
4) RegWorks 1.3.3.

В прикреплении действующий пример автообмена настроенный на сервере с удаленной БД, как с задачами для запуска по отдельности, в ручном режиме, так и всеми ими по очереди в соответствии с расписанием.
1C-autosync.xsc
Пример автообмена 1С+xStarter
(14.27 КБ) 1722 скачивания
С уважением,

Вадим Валиахметов

P.S. Суть идеи описанной выше очевидна и вероятно уже не раз обсуждалась - предоставить учетной записи LOCAL_SYSTEM данные реестра пользователя под которым была осуществлена настройка приложения и затем запускать приложение от имени LOCAL_SYSTEM. В этом случае интерактивного входа пользователя в систему и загрузки его куста в реестр не потребуется. Очевидно, задача запуска 1С:Конфигуратор в пакетном режиме с помощью xStarter является частной задачей более общей задачи запуска приложения без интерактивного входа пользователя, под которым это приложение было настроено когда он был в системе и, таким образом, часть настроек запуска хранит в реестре Windows а другую часть в конфигурационных файлах на диске. Практика редактирования куста реестра учетной записи LOCAL_SYSTEM (HKEY_USERS\.DEFAULT) является достаточно распространенной, поэтому, применительно к задаче разработки планировщика задач, я думаю, она заслуживает отдельного обсуждения. Особенно это касается xStarter - на мой взгляд это планировщик с наивысшим потенциалом в своем классе.

P.P.S Несколько пояснений к вышеизложенному методу:

1) Почему решение задачи возможно только с использованием учетной записи LOCAL_SYSTEM и никакой другой ? Почему бы, например, не запустить xStarter как "LOCAL_SYSTEM" а затем из под него "1C:Конфигуратор" как "Администратор" с загрузкой профиля администратора, под которым автообмен был настроен? Потому что система Windows, по-видимому, с некоторого времени блокирует запуск сценария имперсонификации процесса c загрузкой пользовательского куста без интерактивного входа этого пользователя в систему (см. например: http://otvety.google.ru/otvety/thread?t ... 50bae6f39c). Вопрос этот сложный, мне удавалось запустить этот сценарий используя различные утилиты для имперсонификации, такие как runas, cpau и т.п. Но каждый раз он переставал работать в процессе экспериментов, причем навсегда. Попытки наделить пользователя который запускает процесс, равно как и того под которым запускается процесс, всеми мыслимыми и немыслимыми правами в политиках локальной безопасности, также не давали устойчивого результата. Последний раз, когда попытки запуска сценария имперсонификации с загрузкой пользовательского куста были предприняты из под службы xStarter, система выдала окошко с сообщением "Указанная служба была отмечена для удаления". Через минуту служба пропала. В системном журнале никаких записей нет.

2) Что такое HKEY_USERS\.DEFAULT ? Это вход в куст реестра где находится профиль учетной записи LOCAL_SYSTEM. Он является алиасом для куста HKEY_USERS\S-1-5-18, в котором собственно и находится профиль: http://blogs.msdn.com/oldnewthing/archi ... 86493.aspx

3) Что такое HKEY_CURRENT_USER ? Это вход в куст реестра где находится профиль текущего пользователя вошедшего в систему. Т.е. если Вы вошли как "Администратор", то в реестр загрузится профиль администратора, доступ к данным которого вы сможете получить когда зайдете в этот раздел. На самом деле, профиль администратора Win2003 сервера может находиться в HKEY_USERS\S-1-5-21-3007714668-1911115211-263024753-500, аналогично профилю любого другого пользователя. Т.е. HKEY_CURRENT_USER - это просто ссылка, так же как и HKEY_USERS\.DEFAULT. Изменения в реестре сделанные с использованием этих ссылок будут применены к реальному профилю.

Владимир Д.
Пассажир
Сообщения: 2
Зарегистрирован: Чт сен 03, 2009 7:22 am
Благодарил (а): 0
Поблагодарили: 0

Re: Запуск приложения в фоне - автообмен для 1С:Предприятие

Сообщение Владимир Д. » Чт сен 03, 2009 7:29 am

Полезно! Спасибо за пример!

idw
Пассажир
Сообщения: 1
Зарегистрирован: Вт дек 15, 2009 4:28 pm
Благодарил (а): 0
Поблагодарили: 0

Re: Запуск приложения в фоне - автообмен для 1С:Предприятие

Сообщение idw » Вт дек 15, 2009 4:32 pm

Здравствуйте. У меня возникла небольшая проблема я не могу запустить автообмен под пользоватлем LOCAL_SYSTEM. Xstarter пишет, что логон не выполнен. Посмотрел у себя в пользователях нет такого пользлователя. Посмотрел через службы от имени кого они запускаются. Там есть вот такой пользователь LOCAL SERVICE. Но и под ним не запускается. У меня ОС Windows XP SP2 Rus.

Аватара пользователя
Alex
Ас
Сообщения: 2833
Зарегистрирован: Вт апр 05, 2005 3:28 pm
Откуда: Kaliningrad City
Благодарил (а): 2 раза
Поблагодарили: 91 раз
Контактная информация:

Re: Запуск приложения в фоне - автообмен для 1С:Предприятие

Сообщение Alex » Сб дек 19, 2009 7:45 pm

Нужно просто назначить запуск программы в режиме NT сервиса.

Владимир Д.
Пассажир
Сообщения: 2
Зарегистрирован: Чт сен 03, 2009 7:22 am
Благодарил (а): 0
Поблагодарили: 0

Re: Запуск приложения в фоне - автообмен для 1С:Предприятие

Сообщение Владимир Д. » Чт янв 14, 2010 1:36 pm

Маньяк! Но +1! У меня есть рабочий вариант архивации 1С 8.1 но не штатными средствами, а простой архивацией с удалением старых архивов!

Ответить