检查7-Zip(64 / 32bit)的正确安装

问题描述 投票:2回答:2

我的目标是避免来自VBA调试器的错误消息。需要检查已安装的7-zip版本,程序文件/或程序文件(x86):

尝试做简单的“IF”功能。

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。

vba 7zip
2个回答
6
投票

您可以检查文件是否存在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
投票

安装路径:7-Zip可以安装在另一个磁盘位置(例如D:驱动器或其他位置)。您确实需要从注册表中读取路径。以下几点建议:


1. Hacky Version

我已经在下面放了一个完整的脚本来使用,但你基本上可以得到你想要的hacky方式(确保路径实际存在 - 显然 - 如果有问题可能使用"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位注册表读取:可能有一个Path和一个Path64条目(我有两个)。不确定早期版本和/或更高版本的版本。请检查。

© www.soinside.com 2019 - 2024. All rights reserved.