![]() |
bat из регламентного задания КС вариант Доброго здоровья всем, чего то не получается запустить батник из модуля на котором стоит галка "сервер": сделал бат файл с текстом запуска опред. базы конфигуратором (с указанием имени пользователя и пароля,из под которого будет происходить запуск и параметром /DumpIB, в общем со всеми делами, которые нужны; если запустить его Shell.Run("C:\File.bat") из пользовательского режима кнопкой обработки например, то все ОК), положил его на диск С; в вышеупомянутом модуле написал процедуру отключения всех сеансов (текущий так и не понял как будет называться - теоретически должен иметь имя учетки из под которой запускается служба агента сервера, но запись на диск текстового документа с установленным в него текстом ТекущийПользователь() дала пустоту, но это не суть - база, бэкап которой надо сделать - отличная от той, где создал рег.задание и внешний модуль). Итого: в базе1 рег задание запускает процедуру общего модуля (на модуле галка Сервер), в которой написано отключение всех сеансов базы2 и запуск bat файла с диска С, в файле написан Запуск конфигуратора с последующим дампом базы2 в сетевую папку - схема работает только в случае запуска такой процедуры обработкой (процедура в форме обработки), в случае размещения процедуры в общем модуле - не работает, не важно как запускать - рег заданием или кнопкой формы. Смотря на процессы в таскменеджере видно что смд запустился от имени пользователя, под которым запускается служба агента сервера, от него же запущен Конфигуратор, но дальше никаких движений - оба процесса висят мертвым грузом, что может быть не так? |
Сопсно все - у пользователя, из под которого запускается служба агента, нет прав на сетевую шару, вопрос снят |
и все таки не понятно... в контексте сервера не хочет отрабатывать Процедура Выгрузка() Экспорт Файл = Новый Файл("\\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() делать) |
А точно Run виноват? WshShell создается? |
да, проверял так Попытка WshShell=Новый COMОбъект("Wscript.Shell"); ТекстДок = Новый ТекстовыйДокумент; ТекстДок.УстановитьТекст(WshShell); ТекстДок.Записать("\\workstation\share\123321.txt"); Исключение КонецПопытки; в файл написал "ComОбъект" ну а в принципе был успешный опыт запуска такой конструкции в серверном модуле? может оно ему не доступно? |
А чего эту муть не запихать в планировщик виндавс? |
виндовс - прерогатива админов, не сегодня - завтра стукнет в голову винду переставлять или еще какие идеи, да и вообще это "ихнее", а рег.задание свое, родное :) |
Извращение из одной базы запускать архивацию другой базы. Админ админом, а регламентные задания тоже могут подвисать. |
так сделал исключительно для теста - во второй базе нет активных сеансов, что бы не заморачиваться с отловом своего пользователя... да просто удобно, не вижу принципиальной разницы, к тому же архивация делается батником, кодом просто выгоняю пользователей и хочу запустить бат. Рег. задания, с работоспособным кодом в зависаниях заподозрены не были |
попа.... почему серверный код не отрабатывает WshShell.Run("\\workstation\share\file.bat"); В файле написано ping 127.0.0.1, после нажатия на кнопку, которая запускает процедуру запуска бата, приложение безнадежно виснет, шо это занах О_о |
ВозвращенноеЗначение = WshShell.Run("\\workstation\share\file.bat",,-1); и отладчиком ВозвращенноеЗначение посмотреть? |
Потомушто шелл окно хочет. |
| Текущее время: 19:14. Часовой пояс GMT +3. |