avgreen писал(а) 17. Июля 2009 :: 06:32:У меня это вот так реализовано
// Для использования вместо функции "КомандаСистемы()", потому как под долбаной Win9x она не может выполнить
// командную строку длиной более 255 символов. А "ЗапуститьПриложение()" не ожидает завершения запущеной программы,
// и к примеру для архивирования не годится нихрена :( Поэтому пользуйте ЗапуститьПриложениеМодально()
//intWindowStyle
//0 Hides the window and activates another window.
//1 Activates and displays a window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when displaying the window for the first time.
//2 Activates the window and displays it as a minimized window.
//3 Activates the window and displays it as a maximized window.
//4 Displays a window in its most recent size and position. The active window remains active.
//5 Activates the window and displays it in its current size and position.
//6 Minimizes the specified window and activates the next top-level window in the Z order.
//7 Displays the window as a minimized window. The active window remains active.
//8 Displays the window in its current state. The active window remains active.
//9 Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
//10 Sets the show-state based on the state of the program that started the application.
Функция ЗапуститьПриложениеМодально(cmdLine, intWindowStyle = 0, bWaitOnReturn = -1) Экспорт
WshShell = CreateObject("WScript.Shell");
Возврат WshShell.Run(cmdLine, intWindowStyle, bWaitOnReturn);
КонецФункции
Когда-то очень давно понадобилось именно для архивации/розархивации ....
Кстати при параметре intWindowStyle по умолчанию не мелькает "досовское" окошко архиватора
Я тоже замечательно пользую метод Run() WScript.Shell и для работы с WinRAR-ом и для отправки по FTP.
Даю код целиком (+ curl в архиве), мало ли, кому пригодится:
ИмяАрхива="FTP"+НомМаг+СтрЗаменить(СокрЛП(КонПериод),".","");//+".zip";
Если ФС.СуществуетФайл(ПутьВыгрузки+ИмяАрхива+".zip")=1 Тогда ФС.УдалитьФайл(ПутьВыгрузки+ИмяАрхива+".zip"); КонецЕсли;
СтрФайлы="";
тзСписокФайлов.ВыбратьСтроки();
Пока тзСписокФайлов.ПолучитьСтроку()=1 Цикл
СтрФайлы=СтрФайлы+?(тзСписокФайлов.НомерСтроки=1,""," ")+СокрЛП(тзСписокФайлов.ИмяФайлаВставки);
КонецЦикла;
Попытка
// Пример команды: ("cmd.exe",boolShowWindow,boolWaitComplete),
// где boolShowWindow - показывать/прятать окно консоли (1/0),
// boolWaitComplete - ждать/не ждать окончания выполнения (1/0), для получения возврата - Ждать!
РезАрх=oShell.Run(СокрЛП("C:\Progra~1\WinRAR\WinRAR.exe m -afzip -ep -ibck -inul -o+ "+ПутьВыгрузки+ИмяАрхива+" "+СтрФайлы),0,1);
Если РезАрх=0 Тогда Информация("Создан zip-архив "+ИмяАрхива+"""");
Иначе Информация("Ошибка создания zip-архива! Код ошибки: "+СокрЛП(РезАрх)); Возврат;
КонецЕсли;
Исключение
Информация("Критическая ошибка при создании zip-архива!"); Возврат;
КонецПопытки;
// Отправим по FTP
Попытка
РезФТП=oShell.Run(СокрЛП(""""+КаталогИБ()+"curl.exe"""+" -T """+ПутьВыгрузки+ИмяАрхива+".zip"""+" ftp://user:password@10.10.10.10/reports/"),0,1);
Если РезФТП=0 Тогда Информация("Отправка """+ИмяАрхива+".zip"""+" по FTP успешно завершена",,,,?(РежимВыполнения="Ручной","Сообщить","")); ФС.УдалитьФайл(ПутьВыгрузки+ИмяАрхива+".zip");
Иначе
ТхтОшибка="";
Попытка
Тхт=СоздатьОбъект("Текст"); Тхт.Открыть(КаталогИБ()+"CurlErrors.txt");
ТхтОшибка=Тхт.ПолучитьСтроку(РезФТП);
Исключение КонецПопытки;
Информация("Ошибка отправки по FTP! Код ошибки: "+РезФТП+" - "+СокрЛП(ТхтОшибка));
КонецЕсли;
Исключение
Информация("Критическая ошибка при отправке по FTP!");
КонецПопытки;
P.S.: В процедуре "Информация()" я записываю в журнал регистрации и/или уведомляю пользователя