DotFix ::: Software protection portal
 *Начало * Ответить * Статистика * Задать вопрос * Поиск * FAQ * *

DotFix Forum / Вопросы программирования и исследования защит / Как в VBScript определить окончание работы программы
Автор Сообщение
IgorZ
Участник


Дата: 5 Май 2006 15:01


Надо написать небольшой скрипт, который запускает ночную архивацию. Для архивации используется WinRAR. После создания архива файл должен быть скопирован в определенный каталог.

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

Может кто подскажет как можно отследить окончание работы архиватора ?

Support staff
Участник


Дата: 10 Май 2006 04:20


Чтобы сказать конкретнее, нужно увидеть часть кода. На bat-файлах это делается вызовом типа такого:

---sample.bat---

do_something.exe
call winrar_batch_job.bat
rem вызов call должен дождаться возврата управления из winrar. Можно попробовать с консольной версией winrar, должно работать

copy c:\.....
--sample---

Еще можно посмотреть подсказку к командам cmd.exe и start. Или использовать другую систему бекапа (встроенная в win200 неплоха). Или задействовать scheduled tasks. Вариантов много.

Admin
Администратор


Дата: 10 Май 2006 21:58 * Поправил: Admin


Откуда пример не помню, но он прекрасно справляется с задачей

Private Type STARTUPINFO 
  cb As Long 
  lpReserved As String 
  lpDesktop As String 
  lpTitle As String 
  dwX As Long 
  dwY As Long 
  dwXSize As Long 
  dwYSize As Long 
  dwXCountChars As Long 
  dwYCountChars As Long 
  dwFillAttribute As Long 
  dwFlags As Long 
  wShowWindow As Integer 
  cbReserved2 As Integer 
  lpReserved2 As Long 
  hStdInput As Long 
  hStdOutput As Long 
  hStdError As Long 
End Type 
 
Private Type PROCESS_INFORMATION 
  hProcess As Long 
  hThread As Long 
  dwProcessID As Long 
  dwThreadID As Long 
End Type 
 
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hH 
 <br>andle As Long, ByVal dwMilliseconds As Long) As Long 
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpAppli 
 <br>cationName As Long, ByVal lpCommandLine As String, ByVal lpProce 
s sAttr <br>ibutes As Long, ByVal lpThreadAttributes As Long, ByVal bIn
h eritHandle <br>s As Long, ByVal dwCreationFlags As Long, ByVal lpEnvi
r onment As Long, <br> ByVal lpCurrentDirectory As Long, lpStartupInfo
A s STARTUPINFO, lpPro <br>cessInformation As PROCESS_INFORMATION) As L
o ng Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As <br> Long) As Long Private Const NORMAL_PRIORITY_CLASS = &H20& Private Const INFINITE = -1& Public Sub ExecCmd(cmdline$) Dim proc As PROCESS_INFORMATION Dim start As STARTUPINFO ' Инициализируем структуру STARTUPINFO: start.cb = Len(start) ' Запускаем приложение: ret& = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, NORMAL_PRIORITY_CLA <br>SS, 0&, 0&, start, proc) ' Ждем завершения запущенного приложения: ret& = WaitForSingleObject(proc.hProcess, INFINITE) ret& = CloseHandle(proc.hProcess) End Sub Private Sub Form_Load() ExecCmd ("Notepad") MsgBox "Работа Блокнота завершена", vbInformation, "Конец." End Sub


Ваш ответ

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL  Email Link  Код 
... Отменить *Что это?


Перед отправкой "нелатинского" текста проверьте кодировку броузера!
 » Логин  » Пароль