Проверьте правильность установки 7-Zip (64 / 32bit) - PullRequest
2 голосов
/ 14 апреля 2019

Моя цель - избежать сообщения об ошибках из отладчика VBA. Необходимо проверить, какая версия 7-zip установлена, программные файлы / или программные файлы (x86):

Попытка сделать простую функцию «ЕСЛИ».

Dim PathZipProgram As String
strCommand As String

PathZipProgram = "C:\Program Files(x86)\7-Zip\7z.exe"
If Right(PathZipProgram, 1) Then
    PathZipProgram = PathZipProgram
Else
    PathZipProgram = "C:\Program Files\7-Zip\7z.exe"
End If

Shell strCommand

strCommand = """" & PathZipProgram & """ a -tzip """

VBA не может найти 7zip.

Ответы [ 2 ]

6 голосов
/ 14 апреля 2019

Вы можете проверить, существует ли файл с function, например:

Function FileExists(FilePath As String) As Boolean
Dim TestStr As String
    TestStr = ""
    On Error Resume Next
    TestStr = Dir(FilePath)
    On Error GoTo 0
    If TestStr = "" Then
        FileExists = False
    Else
        FileExists = True
    End If
End Function

А затем используйте его в своем коде:

Dim PathZipProgram As String
Dim strCommand As String

PathZipProgram = "C:\Program Files(x86)\7-Zip\7z.exe"

If Not FileExists(PathZipProgram) Then
    PathZipProgram = "C:\Program Files\7-Zip\7z.exe"
End If

Shell strCommand

strCommand = """" & PathZipProgram & """ a -tzip """

Надеюсь, эта помощь послужит отправной точкой.

1 голос
/ 14 апреля 2019

Путь установки : 7-Zip может быть установлен в другом месте диска (например, диск D: или где-то еще),Вам нужно прочитать пути из реестра, чтобы быть уверенным.Ниже приведено несколько предложений:


1. Hacky Version

Ниже приведен полный сценарий использования, но вы можете получить то, чтохотите хакерский способ (убедитесь, что пути действительно существуют - очевидно, - возможно, используйте "C:\Program Files\7-Zip", если обнаружены проблемы):

Check File Exists:

Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists("C:\Program Files (x86)\7-Zip\7z.exe")) Then
    ' Do Stuff
End If

Get File Version:

Set fso = CreateObject("Scripting.FileSystemObject")
MsgBox fso.GetFileVersion("C:\Program Files (x86)\7-Zip\7z.exe")

Не полагайтесь на это, пожалуйста.Это потерпит неудачу в конце концов.Пожалуйста, смотрите ниже.


2. Full Version

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

Const HKEY_LOCAL_MACHINE = &H80000002 : strComputer = "."

Set fso = CreateObject("Scripting.FileSystemObject")
Set reg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")

' 64-bit - Read 7-zip installation path from registry
regpath64 = "SOFTWARE\7-Zip"
reg.GetStringValue HKEY_LOCAL_MACHINE, regpath64, "Path64", regvalue64
fullpath64 = regvalue64 + "\" + "7z.exe"

If (fso.FileExists(fullpath64)) Then
   MsgBox "7-zip 64-bit: " + fso.GetFileVersion(fullpath64), vbOKOnly, "64-bit:"
End If

' 32-bit - Read 7-zip installation path from registry
regpath32 = "SOFTWARE\WOW6432Node\7-Zip"
reg.GetStringValue HKEY_LOCAL_MACHINE, regpath32, "Path", regvalue32
fullpath32 = regvalue32 + "\" + "7z.exe"

If (fso.FileExists(fullpath32)) Then
   MsgBox "7-zip 32-bit: " + fso.GetFileVersion(fullpath32), vbOKOnly, "32-bit:"
End If

Отказ от ответственности : для 64-разрядного реестра прочитайте: может быть путьи запись Path64 (у меня есть оба).Не уверен, что более ранние и / или более поздние версии будут иметь.Пожалуйста, проверьте.

...