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 хочет его удалить потому что не знает что файлы еще не разархивировались.
Как правильнее всего исправить эту ошибку?
Спасибо.
-------
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>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д