質問

私は運VBScriptが実行下にx64ます。私は読み取りが必要になり、レジストリキーから、32ビットのレジストリ。のために使うパス HKLM\Software\Wow6432Node\xyz の代わりに HKLM\Software\xyz.確認方法を教えてください場合、スクリプトが実行され下x64?

役に立ちましたか?

解決

私は、スクリプトがx64の下に実行されているかどうかを確認する必要はわからない。

が適切であるどんな行動取る、それが失敗した場合、レジストリキーが存在しない、それが失敗した場合、HKLM\Software\Wow6432Node\xyzから読み取るしようと、HKLM\Software\xyzから読み取るようにしてくださいます。

あなたのデザインがより複雑である場合は、

はもちろん、その提案が機能しません(たとえば、あなたはそれが存在しない場合はそのレジストリキーに値を書き込む)。

ここでのVBScriptは、オペレーティングシステムを調べるためです。おそらく、また、から入手できるプロパティnoreferrer"> こののようなものを使用することができます必要な複雑さのレベルに応じています。

他のヒント

でも、64ビット版のWindows上でスクリプトが32ビットモードで実行することができます。

あなたのスクリプトが実行して、リアルビットモードを決定するために、次のコードを使用することができます:

option explicit

function Determine64BitMode
    dim Shell, Is64BitOs
    set Shell = CreateObject("WScript.Shell")
    on error resume next
    Shell.RegRead "HKLM\Software\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)"
    Is64BitOs = Err.Number = 0
    on error goto 0
    if Is64BitOs then
        Determine64BitMode = InStr(Shell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\ProgramFilesDir"), "(x86)") = 0
    else
        Determine64BitMode = false
    end if
end function

dim ExecutingIn64BitMode
ExecutingIn64BitMode = Determine64BitMode
if ExecutingIn64BitMode then
    MsgBox "64 bit"
else
    MsgBox "32 bit"
end if

あなたは、レジストリから読み取るために使用するものAPIは言及しませんでした。あなたはWMI StdRegProv のクラスを使用する場合たとえば、あなたは使用することができます__ProviderArchitectureフラグは関係なく、スクリプトは32ビットまたは64ビットのWindows Script Hostの下で実行されているかどうかの32ビットレジストリハイブへのアクセスを要求します。この技術は、 64ビットプラットフォーム上でWMIデータを要求する MSDNでの物品ます。

ここでは、32ビットのレジストリからの読み出しの例を示します。

strComputer = "."
Const HKLM = &h80000002

''# Specify the required registry bitness
Set oCtx = CreateObject("WbemScripting.SWbemNamedValueSet")
oCtx.Add "__ProviderArchitecture", 32
oCtx.Add "__RequiredArchitecture", True

''# Load the 32-bit registry provider
Set oLocator = CreateObject("WbemScripting.SWbemLocator")
Set oWMI = oLocator.ConnectServer(strComputer, "root\default",,,,,, oCtx)
Set oReg = oWMI.Get("StdRegProv") 

''# Specify input parameters for the GetStringValue method call
Set oInParams = oReg.Methods_("GetStringValue").InParameters
oInParams.hDefKey     = HKLM
oInParams.sSubKeyName = "Software\xyz"
oInParams.sValueName  = "foobar"

''# Read a string value from the registry
Set oOutParams = oReg.ExecMethod_("GetStringValue", oInParams,, oCtx)
WScript.Echo oOutParams.sValue

注また、この場合には、32ビットキー名はなくHKLM\Software\xyzHKLM\Software\Wow6432Node\xyzとして通常の方法で指定する必要があること。

こちらは基づいてソリューションには、Microsoftナレッジベース記事 確認方法がコンピュータでは32ビットまたは64ビットos:

Function Is64BitOS()
    Is64BitOS = Not(Is32BitOS())
End Function

Function Is32BitOS()
    Const sRegKey = "HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0"
    Const sIdentifierValue = "Identifier"
    Const sPlatformIDValue = "Platform ID"

    Dim oSh : Set oSh = CreateObject("WScript.Shell")
    Dim sIdentifier, nPlatformID

    sIdentifier = oSh.RegRead(sRegKey & "\" & sIdentifierValue)
    nPlatformID = oSh.RegRead(sRegKey & "\" & sPlatformIDValue)

    Set oSh = Nothing

    If InStr(sIdentifier, "x86") > 0 And nPlatformID = 32 Then
        Is32BitOS = True
    Else
        Is32BitOS = False
    End if
End Function

ュニケーション

代わり簡潔な解決を利用した WMIこちらの.

非常に簡単な解決策は、(仮想)フォルダC:\Windows\sysnativeが存在するかどうかをチェックすることです。このフォルダには、32ビットプロセスに存在し、ファイルを参照してくださいシステムリダイレクタする

Set fso = CreateObject("Scripting.FileSystemObject")
Set wshShell = CreateObject( "WScript.Shell" )

If fso.FolderExists(wshShell.ExpandEnvironmentStrings("%windir%") & "\sysnative" ) Then
    WScript.Echo "You are running in 32-Bit Mode"
Else
    WScript.Echo "You are running in 64-Bit Mode"
End if

注、唯一のWindows Server 2003およびWindows XP以降で動作します。

これは、システム及びプロセス両方のアーキテクチャを示しています。

Option Explicit
Dim WshShell, WshEnv
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment("System")
MsgBox "System: " & WshEnv("PROCESSOR_ARCHITECTURE")
Set WshEnv = WshShell.Environment("Process")
MsgBox "Process: " & WshEnv("PROCESSOR_ARCHITECTURE")

ちょうどあなたが<> "x86"のために必要なものを確認します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top