2017-03-03 24 views
0

このコード行を使用して、sPathの最後にレジストリキーを使用して配列を埋めます。 Win7を除くすべてのインスタンスで動作します。 Win8、Win10で問題なく動作します。鍵が存在することを確認したので、そうではありません。oReg.EnumKeyを使用せずにVBSでレジストリキーの配列を作成する

ret = oReg.EnumKey(&H80000002, sPath, guidlist) 

私は "ret"の戻り値を読み込もうとしましたが、空白またはおそらくNULLのようですか?私は 'objLog.WriteLine'を使用します。これはret "& ret"です。 「これはretです」というメッセージだけを書き出します

VBSを使用してアレイを作成する別の方法はありますか?

+0

あなたのプログラムは管理者として実行されていますか?必要な権限がない可能性があります。 –

+0

管理者として実行されています。私は何が起こっているのか知っていると思います。 Win7でEnumKeyはWOW6432レジストリにデフォルト設定されています。私が探しているキーは、64ビットレジストリツリーにあります。レジストリのどの部分を使用するかを指定する方法を検索します。 –

答えて

0

これは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 
1

EnumKeyは正しい方法です。 guidlistには、retではなく、必要な出力が含まれます。

+0

私は "ret"を試して失敗した場合にのみそれを調べています。 –

関連する問題