Outlook - разархивирование вложений через WinRAR и удаление архива - permission denied - VB

Узнай цену своей работы

Формулировка задачи:

Outlook - разархивирование вложений WinRAR и удаление архива - permission denied
-------
str = RarPath & " e -o- """ & DestFolder & AttFileName & Chr(34) & " " & Chr(34) & DestFolder & Chr(34)
Err = Shell(str, vbNormalFocus)
If DelArchFiles = True Then
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.DeleteFile (DestFolder & AttFileName)
End If
-------
Я сохраняю и разархивирую файлы, после чего хочу удалить архив. проблема в том, что shell() запускает паралельно RAR, который блокирует архивный файл. А DeleteFile хочет его удалить потому что не знает что файлы еще не разархивировались.
Как правильнее всего исправить эту ошибку?
Спасибо.

Решение задачи: «Outlook - разархивирование вложений через WinRAR и удаление архива - permission denied»

textual
Листинг программы
<font color="blue">Const</font> PROCESS_QUERY_INFORMATION = &H400
<font color="blue">Const</font> SYNCHRONIZE = &H100000
<font color="blue">Const</font> INFINITE = &HFFFFFFFF
<font color="blue">Const</font> STILL_ACTIVE = &H103&

<font color="blue">Private</font> <font color="blue">Declare</font> <font color="blue">Function</font> OpenProcess Lib <font color="teal">"kernel32"</font> ( _
  <font color="blue">ByVal</font> dwDesiredAccess <font color="blue">As</font> <font color="blue">Long</font>, _
  <font color="blue">ByVal</font> bInheritHandle <font color="blue">As</font> <font color="blue">Long</font>, _
  <font color="blue">ByVal</font> dwProcessId <font color="blue">As</font> <font color="blue">Long</font>) <font color="blue">As</font> <font color="blue">Long</font>
<font color="blue">Private</font> <font color="blue">Declare</font> <font color="blue">Function</font> GetExitCodeProcess Lib <font color="teal">"kernel32"</font> ( _
  <font color="blue">ByVal</font> hProcess <font color="blue">As</font> <font color="blue">Long</font>, _
  lpExitCode <font color="blue">As</font> <font color="blue">Long</font>) <font color="blue">As</font> <font color="blue">Long</font>

<font color="blue">Public</font> <font color="blue">Sub</font> ExtractAndDelete()
    <font color="blue">Dim</font> hInstance <font color="blue">As</font> <font color="blue">Long</font>
    <font color="blue">Dim</font> hProcess <font color="blue">As</font> <font color="blue">Long</font>
    <font color="blue">Dim</font> lngRetval <font color="blue">As</font> <font color="blue">Long</font>
    <font color="blue">Dim</font> lngExitCode <font color="blue">As</font> <font color="blue">Long</font>
    <font color="blue">Dim</font> strCommand <font color="blue">As</font> <font color="blue">String</font>
    <font color="blue">Dim</font> intMode <font color="blue">As</font> <font color="blue">Integer</font>
    
    strCommand = <font color="teal">"C:\Program Files\WinRAR\WinRar.exe e D:\1\Test.rar D:\1\"</font>
    intMode = <font color="darkblue"><b>1</b></font>
    
    hInstance = Shell(strCommand, intMode)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION <font color="blue">Or</font> SYNCHRONIZE, _
      True, hInstance)
    <font color="blue">Do</font>
        lngRetval = GetExitCodeProcess(hProcess, lngExitCode)
        DoEvents
    <font color="blue">Loop</font> <font color="blue">Until</font> lngExitCode <> STILL_ACTIVE
    
    MsgBox <font color="teal">"Извлечение файлов из архива завершено."</font>
    
    <font color="blue">Kill</font> <font color="teal">"D:\1\Test.rar"</font>
<font color="blue">End</font> <font color="blue">Sub</font>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы