1

スクリプト インタープリター (CScript / WScript) が 32 ビットまたは 64 ビット プロセスとして実行されているかどうかを示す VBScript から利用できる機能はありますか?

他の回答から、.NETでは.Environment.Is64BitProcess を使用できることがわかります。

編集:これを行う簡単な方法がないことに満足しています。幸いなことに、スクリプトから、私が C++ で作成した COM オブジェクトを使用しています。そのため、簡単に関数を追加できます。それが私が今やろうとしていることです。しかし、可能であれば、よりネイティブなソリューションを使用したいと思います。

4

3 に答える 3

4

PROCESSOR_ARCHITECTURE最初は、環境変数を見ることができると思いました:

Set objShell = WScript.CreateObject("WScript.Shell")
Set colSystemEnvVars = objShell.Environment("System")
WSCript.Echo "System = " & colSystemEnvVars("PROCESSOR_ARCHITECTURE")

64 ビット OS 上の 32 ビット コマンド プロンプト (つまり、SysWow64 から開始された CMD.EXE) では、AMD64 ではなく x86 が返されます。ただし、64 ビットの CMD.EXE から開始された 32 ビットの CSCRIPT 内からは、依然として AMD64 が返されるようです。

したがって、他の唯一の方法 (私の意見では少しハックです - ほとんどの場合、パスからのものは常に悪いように見えますが、これはおそらく信頼できるほど十分に静的です) は、これを CSCRIPT がどこから起動されたかを調べることと組み合わせることです。

WScript.Echo WScript.FullName

... WScript.FullNameSysWOW64 が含まれている場合は、64 ビット ボックス上の 32 ビット cscript です (ほとんどの場合)。System32 が含まれている場合は、PROCESSOR_ARCHITECTURE 環境変数にフォールバックできます。

補遺
最近、Windows 7 64 ビットを実行する新しいマシンを使用しましたが、これによりさらに可能性が広がります (元の回答は 64 ビットの Server 2008 ボックスに基づいていました)。新しい環境変数が追加されましたPROCESSOR_ARCHITEW6432。簡単な実験で次のことがわかります。

  • 64 ビット cmd.exe:PROCESSOR_ARCHITECTURE=AMD64およびPROCESSOR_ARCHITEW6432未設定
  • 32 ビットの cmd.exe:PROCESSOR_ARCHITECTURE=x86およびPROCESSOR_ARCHITEW6432=AMD64
于 2013-08-19T08:02:49.320 に答える