Извлечение Установить местоположения 64-битного программного обеспечения из реестра, когда скрипт выполняется с использованием 32-битного wscript / cscript - PullRequest
0 голосов
/ 06 февраля 2019

В моей системе установлены как 64-разрядная, так и 32-разрядная версия Java в расположениях C:\Program Files\Java\jre1.8.0_191 и C:\Program Files (x86)\Java\jre1.8.0_191 соответственно.

У меня есть следующий код, который выбирает место установки программного обеспечения насистема.

MsgBox fn_getInstallLocation("java")

function fn_getInstallLocation(strApplication)
    Dim strKey, objReg, subkey, arrKeys, strRequiredPath
    Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
    strRequiredPath = ""
    strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"    '<----THIS KEY IS IMPORTANT
    set objReg = getObject("winmgmts://./root/default:StdRegProv")
    objReg.enumKey HKLM, strKey, arrKeys
    for each subkey in arrKeys
        objReg.getStringValue HKLM, strKey&subkey, "InstallLocation", strInstallLocation
        if InStr(1,strInstallLocation,strApplication,1)>0 Then
            strRequiredPath = strInstallLocation
            Exit for        
        End if
    next
    fn_getInstallLocation = strRequiredPath
End Function

Мои наблюдения:

  1. При сохранении значения strKey на SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ и запуске вышеуказанного скрипта с использованием 64-битного wscript,Я получаю ожидаемый вывод как C:\Program Files\Java\jre1.8.0_191.
  2. При изменении значения strKey на SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ и выполнении сценария с использованием 64-битного wscript я получаю ожидаемый вывод как C:\Program Files (x86)\Java\jre1.8.0_191

  3. При сохранении значения strKey на SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ ИЛИ SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\ и выполнении вышеуказанного сценария с использованием 32-битного wscript, я получаю вывод как C:\Program Files (x86)\Java\jre1.8.0_191 (32-битная Java). Есть ли способ получить место установки 64-битной Java, когда этот скрипт выполняется в 32-битном режиме?

Я НЕ играюсь с разнымиперестановки и комбинации.Я спрашиваю об этом, потому что когда я выполнял этот скрипт на другом компьютере, он не давал мне должных результатов.Спецификации этой машины следующие:

OS: Windows 7 x64
Java: 64 bit(Not 32 bit) - In Registry Editor, it is present in the key - SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\
The script ran in 32 bit mode(cannot switch to 64-bit on that machine because I am running this script on a tool - TestComplete which runs in 32-bit mode on all machines. If I do decide to run Test complete in 64-bit mode, there will be architecture mismatch issues with ODBC drivers.)

Поскольку скрипт выполнялся с использованием 32-битного wscript, он не смог вернуть мне путь установки 64-битной JAVA.Итак, есть ли способ заставить это решение работать в 32-разрядном режиме и получить место установки 64-разрядного программного обеспечения?

1 Ответ

0 голосов
/ 06 февраля 2019

Мне удалось получить место установки 64-битных приложений, когда скрипт запускается на 32-битном хосте.

MsgBox fn_getInstallLocation("java")

function fn_getInstallLocation(strApplication)
    Dim strKey, objReg, subkey, arrKeys, strRequiredPath
    Const HKLM = &H80000002 'HKEY_LOCAL_MACHINE
    strRequiredPath = ""
    strKey = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"    '<----THIS KEY IS IMPORTANT

    Set oWbm = CreateObject("WbemScripting.SWbemNamedValueSet")
    oWbm.Add "__ProviderArchitecture", 64                '<----Change this parameter to 32 to get the install locations of 32-bit softwares
    Set oLocator = CreateObject("Wbemscripting.SWbemLocator")
    Set objReg = oLocator.ConnectServer("", "root\default", "", "", , , , oWbm).Get("StdRegProv")

    objReg.enumKey HKLM, strKey, arrKeys
    for each subkey in arrKeys
        objReg.getStringValue HKLM, strKey&subkey, "InstallLocation", strInstallLocation
        if InStr(1,strInstallLocation,strApplication,1)>0 Then
            strRequiredPath = strInstallLocation
            Exit for        
        End if
    next
    fn_getInstallLocation = strRequiredPath
End Function

Это дало мне место установки ключа, который присутствует в реестреРедактор в пути SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\, а не в пути SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\, несмотря на работу в 32-битном хосте сценариев.

Ссылка для ConnectServer Метод SWbemLocator объект.

Ссылка для SWbemNamedValueSet и SWbemNamedValue

...