確認方法を教えてくださいまwscript/cscript上x64ホストOSとは
質問
私は運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\xyz
のHKLM\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"
のために必要なものを確認します。