Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   bat из регламентного задания КС вариант (http://forums.kuban.ru/f1040/bat_iz_reglamentnogo_zadaniya_ks_variant-2316441.html)

EvG32 10.03.2012 22:20

bat из регламентного задания КС вариант
 
Доброго здоровья всем, чего то не получается запустить батник из модуля на котором стоит галка "сервер": сделал бат файл с текстом запуска опред. базы конфигуратором (с указанием имени пользователя и пароля,из под которого будет происходить запуск и параметром /DumpIB, в общем со всеми делами, которые нужны; если запустить его Shell.Run("C:\File.bat") из пользовательского режима кнопкой обработки например, то все ОК), положил его на диск С; в вышеупомянутом модуле написал процедуру отключения всех сеансов (текущий так и не понял как будет называться - теоретически должен иметь имя учетки из под которой запускается служба агента сервера, но запись на диск текстового документа с установленным в него текстом ТекущийПользователь() дала пустоту, но это не суть - база, бэкап которой надо сделать - отличная от той, где создал рег.задание и внешний модуль).

Итого:
в базе1 рег задание запускает процедуру общего модуля (на модуле галка Сервер), в которой написано отключение всех сеансов базы2 и запуск bat файла с диска С, в файле написан Запуск конфигуратора с последующим дампом базы2 в сетевую папку - схема работает только в случае запуска такой процедуры обработкой (процедура в форме обработки), в случае размещения процедуры в общем модуле - не работает, не важно как запускать - рег заданием или кнопкой формы.
Смотря на процессы в таскменеджере видно что смд запустился от имени пользователя, под которым запускается служба агента сервера, от него же запущен Конфигуратор, но дальше никаких движений - оба процесса висят мертвым грузом, что может быть не так?

EvG32 11.03.2012 09:59

Сопсно все - у пользователя, из под которого запускается служба агента, нет прав на сетевую шару, вопрос снят

EvG32 13.03.2012 14:02

и все таки не понятно... в контексте сервера не хочет отрабатывать

Процедура Выгрузка() Экспорт
Файл = Новый Файл("\\workstation\Share\BackUp.bat")
Если Файл.Существует() Тогда
WshShell=Новый COMОбъект("Wscript.Shell");
WshShell.Run(Файл.ПолноеИмя);
КонецЕсли;
КонецПроцедуры

написано это в общем модуле с галкой "Сервер", запускаю процедуру кнопкой обработки

Процедура Кнопкаобработки()
ОбщийМодульСГалкойСервер.Выгрузка();
КонецПроцедуры

Вот содержимое батника

"c:\Program Files\1cv82\8.2.14.519\bin\1cv8.exe" CONFIG %Base% /DisableStartupMessages /DumpIB\\workstation\Share\BackUpBase_%dt%.dt /NUser /PPassword /OUT\\workstation\Share\BackUpLog_%dt%.log -NoTruncate

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

ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.УстановитьТекст("123321");
ТекстДок.Записать("\\workstation\share\123321.txt");

делает то, что его просят.
В итоге получается что в режиме клиента (исполнение кода клиентом) конструкция WshShell.Run(ПутьКФайлу) работает нормально, а в контексте сервера - нет. Понимаю, что проблема может быть сугубо индивидуальной - настройки доменных пользователей, организация сети или еще что, но насколько эта схема корректна, может чего упустил?
пс: сервер приложений - MS 2008, 32 бит (не хочет зараза shell.Run() делать)

roma n 13.03.2012 14:07

А точно Run виноват? WshShell создается?

EvG32 13.03.2012 14:36

да, проверял так

Попытка
WshShell=Новый COMОбъект("Wscript.Shell");
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.УстановитьТекст(WshShell);
ТекстДок.Записать("\\workstation\share\123321.txt");
Исключение
КонецПопытки;

в файл написал "ComОбъект"

ну а в принципе был успешный опыт запуска такой конструкции в серверном модуле? может оно ему не доступно?

Buzz 13.03.2012 14:42

А чего эту муть не запихать в планировщик виндавс?

EvG32 13.03.2012 14:47

виндовс - прерогатива админов, не сегодня - завтра стукнет в голову винду переставлять или еще какие идеи, да и вообще это "ихнее", а рег.задание свое, родное :)

Buzz 13.03.2012 14:52

Извращение из одной базы запускать архивацию другой базы. Админ админом, а регламентные задания тоже могут подвисать.

EvG32 13.03.2012 15:12

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

EvG32 14.03.2012 15:04

попа.... почему серверный код не отрабатывает

WshShell.Run("\\workstation\share\file.bat");

В файле написано ping 127.0.0.1, после нажатия на кнопку, которая запускает процедуру запуска бата, приложение безнадежно виснет, шо это занах О_о

roma n 14.03.2012 15:39

ВозвращенноеЗначение = WshShell.Run("\\workstation\share\file.bat",,-1);
и отладчиком ВозвращенноеЗначение посмотреть?

VZ 14.03.2012 17:55

Потомушто шелл окно хочет.


Текущее время: 19:14. Часовой пояс GMT +3.