0

我有一个 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 
4

1 回答 1

0

您的问题似乎是 shell.application 的 CopyHere 方法是异步的——它不会在您复制时暂停执行。

“objFolder.CopyHere”启动,然后立即调用“Exit Sub”,导致您的代码在 CopyHere 完成之前失去控制。

有一些使 CopyHere 同步的示例

这是一种适用于拉链的方法,但可以根据您的需要进行调整。

于 2012-09-13T02:13:58.767 回答