powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Outlook - разархивирование вложений через WinRAR и удаление архива - permission denied
3 сообщений из 3, страница 1 из 1
Outlook - разархивирование вложений через WinRAR и удаление архива - permission denied
    #33399284
Serguest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 хочет его удалить потому что не знает что файлы еще не разархивировались.


Как правильнее всего исправить эту ошибку?

Спасибо.
...
Рейтинг: 0 / 0
Outlook - разархивирование вложений через WinRAR и удаление архива - permission denied
    #33399425
Дождись окончания процесса архивирования.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
Const PROCESS_QUERY_INFORMATION = &H400
Const SYNCHRONIZE = &H100000
Const INFINITE = &HFFFFFFFF
Const STILL_ACTIVE = &H103&

Private Declare Function OpenProcess Lib "kernel32" ( _
  ByVal dwDesiredAccess As Long, _
  ByVal bInheritHandle As Long, _
  ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" ( _
  ByVal hProcess As Long, _
  lpExitCode As Long) As Long

Public Sub ExtractAndDelete()
    Dim hInstance As Long
    Dim hProcess As Long
    Dim lngRetval As Long
    Dim lngExitCode As Long
    Dim strCommand As String
    Dim intMode As Integer
    
    strCommand = "C:\Program Files\WinRAR\WinRar.exe e D:\1\Test.rar D:\1\"
    intMode =  1 
    
    hInstance = Shell(strCommand, intMode)
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or SYNCHRONIZE, _
      True, hInstance)
    Do
        lngRetval = GetExitCodeProcess(hProcess, lngExitCode)
        DoEvents
    Loop Until lngExitCode <> STILL_ACTIVE
    
    MsgBox "Извлечение файлов из архива завершено."
    
    Kill "D:\1\Test.rar"
End Sub
...
Рейтинг: 0 / 0
Outlook - разархивирование вложений через WinRAR и удаление архива - permission denied
    #33399588
Serguest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо помгло :)... конечно лучше бы в WinRAR иметь такой ключик.

Еще один вопрос. Определение архивов. Пока сделано так:
(Right(currAttachment.FileName, 3) = "zip" Or _
Right(currAttachment.FileName, 3) = "rar" Or _
Right(currAttachment.FileName, 3) = "arj" Or _
Right(currAttachment.FileName, 3) = "ARJ" _)

1. Можно ли писать сборные условия как в SQL: IN(,,,,)
2. Правильно ли определять архивы только по расширению? :-\
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Outlook - разархивирование вложений через WinRAR и удаление архива - permission denied
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]