如何检查是否安装了Ghostscript版本以及如何安装?

时间:2014-01-14 14:13:52

标签: vba vbscript registry

正如标题所说。我需要检查VBS是否(1)Ghostscript安装在本地计算机上,如果安装(2)安装在哪里。

我认为问题(1)我已经解决了:

Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
Set oReg = GetObject("winmgmts:!root/default:StdRegProv")
    If oReg.EnumKey(HKLM, "SOFTWARE\GPL Ghostscript\", arrSubKeys) = 0 Then
    KeyExists = True
Else
    KeyExists = False 'The script stops since it requires GS to be installed
End If

...

objShell.Run(pathToGhostScript & "-arguments")

但是,就我而言,注册表中的GS看起来像

HKEY_LOCAL_MACHINE\SOFTWARE\GPL Ghostscript\9.01\

注意:我正在检查注册表项SOFTWARE\GPL Ghostscript\而不是SOFTWARE\GPL Ghostscript\9.01\,因为如果有人安装了FALSE或其他内容,我的检查会返回...\9.2\。我假设可能安装的版本,注册表项SOFTWARE\GPL Ghostscript\将始终存在。这个假设是否正确?

最终,我需要打电话(在我的情况下)C:\Program Files\gs\gs9.01\bin\gswin32.exe。如果我查看注册表,..\bin\的路径只能来自注册表值SOFTWARE\GPL Ghostscript\9.01\GS_DLL,它返回C:\Program Files\gs\gs9.01\bin\gsdll32.dll。我假设我可以使用此值,删除..\bin\之后的所有内容并将gswin32.exe连接到路径。然后我会在上面的脚本中填充pathToGhostScript变量。

问题:如何从脚本中返回GS_DLL的值?因为我知道在我的情况下可以在..\9.01\GS_DLL下找到值,但在其他人的电脑上也可能是例如。 ..\9.57\GS_DLL ...

我的问题:

  1. 这是最好的方法吗?
  2. 如果没有,那么查看gswin32.exe是否可用的更强大的方法是什么?
  3. 如果是的话,你能帮我填一下上面讨论的空白吗?

1 个答案:

答案 0 :(得分:3)

我认为可以安全地假设Ghostscript可执行文件与DLL位于同一目录中,所以这样的东西应该可以工作:

Const HKLM    = &h80000002
Const baseKey = "SOFTWARE\GPL Ghostscript"
Const value   = "GS_DLL"

Set reg = GetObject("winmgmts://./root/default:StdRegProv")

If reg.EnumKey(HKLM, baseKey, subkeys) <> 0 Then
  WScript.Echo "Cannot enumerate subkeys of " & baseKey & "."
  WScript.Quit 1
End If

For Each sk In subkeys
  If reg.GetStringValue(HKLM, baseKey & "\" & sk, value, gsLib) <> 0 Then
    WScript.Echo "Cannot read value " & value & "."
    WScript.Quit 1
  End If
Next

Set fso = CreateObject("Scripting.FileSystemObject")

gsDir = fso.GetParentFolderName(gsLib)
gs = fso.BuildPath(gsDir, "gswin32.exe")

WScript.Echo gs