これはEnumKeyを使用せずに32ビットアプリケーションから64ビットレジストリに到達するために使用したコードです。
objLog.WriteLine "Begin StdRegProv reg read method"
strComputer = "."
Const HKLM = &h80000002
Set objCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
objCtx.Add "__ProviderArchitecture", 64
objCtx.Add "__RequiredArchitecture", TRUE
Set objLocator = CreateObject("Wbemscripting.SWbemLocator")
Set objServices = objLocator.ConnectServer("","root\default","","",,,,objCtx)
Set objStdRegProv = objServices.Get("StdRegProv")
objLog.WriteLine "About to call EnumKey with ExecMethod"
' Use ExecMethod to call the EnumKey method
Set Inparams = objStdRegProv.Methods_("EnumKey").Inparameters
Inparams.Hdefkey = HKLM
Inparams.Ssubkeyname = sPath
'InParams.aArrayOfGuids = guidlist()
'Inparams.Svaluename = "Logging"
set Outparams = objStdRegProv.ExecMethod_("EnumKey", Inparams,,objCtx)
objLog.WriteLine "Finished creating array of guids"
'read values in array
'For Each guid In Outparams.snames
' objLog.WriteLine "these are the guids in the array - " & guid
'Next
For each guid1 in Outparams.snames
dim InstallPropertiesPath
InstallPropertiesPath = sPath & "\" & guid1 & SubPath1
objLog.WriteLine "The InstallPropertiesPath is " & InstallPropertiesPath
' Use ExecMethod to call the GetStringValue method
Set Inparams = objStdRegProv.Methods_("GetStringValue").Inparameters
Inparams.Hdefkey = HKLM
Inparams.Ssubkeyname = InstallPropertiesPath
Inparams.sValueName = "LocalPackage"
'InParams.aArrayOfGuids = guidlist()
'Inparams.Svaluename = "Logging"
set Outparams = Nothing
set Outparams = objStdRegProv.ExecMethod_("GetStringValue", Inparams,,objCtx)
objLog.WriteLine "About to call DetectMSIFeature with this path - " & Outparams.SValue
あなたのプログラムは管理者として実行されていますか?必要な権限がない可能性があります。 –
管理者として実行されています。私は何が起こっているのか知っていると思います。 Win7でEnumKeyはWOW6432レジストリにデフォルト設定されています。私が探しているキーは、64ビットレジストリツリーにあります。レジストリのどの部分を使用するかを指定する方法を検索します。 –