vbscript hta зависает при копировании файлов

У меня есть HTA, который копирует набор файлов на USB-накопитель как часть создания USB-диска с утилитами. Он работает правильно, но проблема в том, что HTA перестает отвечать на запросы во время выполнения процесса копирования.

Const FOF_CREATEPROGRESSDLG = &H0&
sub CopyFiles(driveletter) ' Copys Files to the new USB Disk showing progress bar 

  if radio(0).checked Then 
    Set objFilesys = CreateObject("Scripting.FileSystemObject")
    Set objShell = CreateObject("Shell.Application")
    driveletter = ((driveletter) & "\")
    Set objFolder = objshell.NameSpace(driveletter)
    pathstring = objFilesys.GetAbsolutePathName("c:") 
    objFolder.CopyHere pathstring & "\" & "*.*", FOF_CREATEPROGRESSDLG
    exit sub
  elseif radio(1).checked Then
    Set objFilesys = CreateObject("Scripting.FileSystemObject")
            set objShell = CreateObject("shell.application")
    pathstring = userselections.txtFile.value   
        if objFilesys.fileExists(pathstring & "\" & "kernel.sys") then
            driveletter = ((driveletter) & "\")
            Set objFolder = objshell.NameSpace(driveletter) 
                    objFolder.CopyHere pathstring & "\" & "*.*", FOF_CREATEPROGRESSDLG
        Else
            msgbox "Error! The Specified path does not contain valid Install Files", vbcritical 
        end if
  end if 
end sub 

person SHobbs    schedule 12.09.2012    source источник


Ответы (1)


Похоже, ваша проблема заключается в том, что метод CopyHere оболочки shell.application является асинхронным - он не приостанавливает выполнение во время копирования.

Запускается «objFolder.CopyHere», а сразу после этого вызывается «Exit Sub», в результате чего ваш код теряет контроль до завершения CopyHere.

Есть несколько примеров того, как делает CopyHere своего рода синхронным

Вот один который работает для застегивания, но может быть адаптирован к вашим потребностям.

person Rich    schedule 13.09.2012
comment
HTA зависает при выполнении каждой команды. Для большинства встроенных команд это не имеет значения, но такие вещи, как копирование файлов или синтаксический анализ документов и т. д., обычно занимают больше времени, и тогда вы заметите зависание. Как упоминалось выше, вы можете добавить несколько пауз в процесс копирования, чтобы сделать hta более отзывчивым. Возможно, это может дать вам дополнительную информацию: visualbasicscript .com/ - person Mathias; 25.09.2012