Ключи реестра - лучший путь, в отличие от расположения файлов, у них есть согласованность между системами.
Ниже приведены три функции, две для поддержки одной, и макрос, который проверяет функции.
GetARE () (получить исполняемый файл Adobe Reader) возвращает правильный путь на основе поиска версии в предварительно определенном месте, переданном в качестве аргумента.Это устраняет необходимость печатать много разных ключевых местоположений для каждой версии и обеспечивает определенную степень покрытия, если будущие версии будут выпущены и установлены в системе пользователя.
Я установил предыдущие версии Reader, чтобы проверить, действительно лиесть последовательность в расположении ключа InstallPath, вплоть до весьма устаревших версий.На самом деле, у нас с mwolfe02 оба ключа находятся в одном месте, хотя я использую версию 11, а он на момент написания статьи использовал 10. Я смог протестировать это только в системе x64, но вы можете легкоизмените приведенный ниже код для поиска ключей x64 и x86.Я ожидаю, что крупная корпорация, такая как Adobe, будет придерживаться своих соглашений, поэтому, вероятно, это будет работать довольно долго без особых изменений, даже когда будут выпущены новые версии Reader.
Я написал это быстро, ожидая неэффективности и непоследовательности всоглашения об именах.
Действительно, лучший способ гарантировать, что путь почти всегда возвращается, - просто запустить поиск в реестре через VBA в цикле для номеров версий, используя "* / Acrobat Reader / XX.YY / InstallPath /" изатем включение исполняемого файла на основе проверки соответствующего кандидата в соответствующий каталог;однако это не совсем экономичное решение.Мои тесты показали, что между версиями существует определенная согласованность в отношении того, где можно найти путь установки и каково имя исполняемого файла, поэтому я выбрал что-то более эффективное, но менее продолжительное.
RegKeyRead () и RegKeyExists () были взяты из:
http://vba -угол.livejournal.com / 3054.html
Я не изменил их код.Примите во внимание, что, благодаря автору этого поста, этот код никоим образом не сложен, но он избавил меня от необходимости писать его самостоятельно.
Function RegKeyRead(i_RegKey As String) As String
Dim myWS As Object
On Error Resume Next
'access Windows scripting
Set myWS = CreateObject("WScript.Shell")
'read key from registry
RegKeyRead = myWS.RegRead(i_RegKey)
End Function
Function RegKeyExists(i_RegKey As String) As Boolean
Dim myWS As Object
On Error GoTo ErrorHandler
'access Windows scripting
Set myWS = CreateObject("WScript.Shell")
'try to read the registry key
myWS.RegRead i_RegKey
'key was found
RegKeyExists = True
Exit Function
ErrorHandler:
'key was not found
RegKeyExists = False
End Function
Function GetARE(i_RegKey As String) As String
Dim InPath As String
Dim InKey As String
Dim Ind As Integer
Dim PriVer As String
Dim SubVer As String
Dim Exists As Boolean
Exists = False
PriVer = 1
SubVer = 0
For Ind = 1 To 1000
If SubVer > 9 Then
PriVer = PriVer + 1
SubVer = 0
End If
Exists = RegKeyExists(i_RegKey + "\" + PriVer + "." + SubVer + "\InstallPath\")
SubVer = SubVer + 1
If Exists = True Then
SubVer = SubVer - 1
InKey = i_RegKey + "\" + PriVer + "." + SubVer + "\InstallPath\"
InPath = RegKeyRead(InKey)
GetARE = InPath + "\AcroRd32.exe"
Exit For
End If
Next
End Function
Sub test()
Dim rando As String
rando = GetARIP("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Adobe\Acrobat Reader")
MsgBox (rando)
End Sub