К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

bat из регламентного задания КС вариант

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

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



Гость
1 - 11.03.2012 - 09:59
Сопсно все - у пользователя, из под которого запускается служба агента, нет прав на сетевую шару, вопрос снят
Гость
2 - 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() делать)
Гость
3 - 13.03.2012 - 14:07
А точно Run виноват? WshShell создается?
Гость
4 - 13.03.2012 - 14:36
да, проверял так

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

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

ну а в принципе был успешный опыт запуска такой конструкции в серверном модуле? может оно ему не доступно?
Гость
5 - 13.03.2012 - 14:42
А чего эту муть не запихать в планировщик виндавс?
Гость
6 - 13.03.2012 - 14:47
виндовс - прерогатива админов, не сегодня - завтра стукнет в голову винду переставлять или еще какие идеи, да и вообще это "ихнее", а рег.задание свое, родное :)
Гость
7 - 13.03.2012 - 14:52
Извращение из одной базы запускать архивацию другой базы. Админ админом, а регламентные задания тоже могут подвисать.
Гость
8 - 13.03.2012 - 15:12
так сделал исключительно для теста - во второй базе нет активных сеансов, что бы не заморачиваться с отловом своего пользователя... да просто удобно, не вижу принципиальной разницы, к тому же архивация делается батником, кодом просто выгоняю пользователей и хочу запустить бат. Рег. задания, с работоспособным кодом в зависаниях заподозрены не были
Гость
9 - 14.03.2012 - 15:04
попа.... почему серверный код не отрабатывает

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

В файле написано ping 127.0.0.1, после нажатия на кнопку, которая запускает процедуру запуска бата, приложение безнадежно виснет, шо это занах О_о
Гость
10 - 14.03.2012 - 15:39
ВозвращенноеЗначение = WshShell.Run("\\workstation\share\file.bat",,-1);
и отладчиком ВозвращенноеЗначение посмотреть?
Гость
11 - 14.03.2012 - 17:55
Потомушто шелл окно хочет.


К списку вопросов






Copyright ©, Все права защищены