VBScript中是否有一种方法可以判断它是以32位还是64位进程运行?

时间:2013-08-19 07:38:49

标签: vbscript 64-bit

VBScript是否有可用的函数告诉您脚本解释器(CScript / WScript)是以32位还是64位进程运行?

我从其他答案中看到,在.NET中你可以使用.Environment.Is64BitProcess,其中完全按照它所说的那样

编辑:我现在感到满意的是,没有什么可以做到的。幸运的是,我从脚本中使用了我用C ++编写的COM对象;所以我可以轻而易举地添加一个功能。这就是我现在要做的事情。但如果可能的话,我宁愿使用更原生的解决方案。

3 个答案:

答案 0 :(得分:4)

起初我以为你可以查看PROCESSOR_ARCHITECTURE环境变量:

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

在64位操作系统上的32位命令提示符下(即从SysWow64启动的CMD.EXE),它返回x86而不是AMD64。但是,从32位CSCRIPT开始,它从64位CMD.EXE开始,它仍然返回AMD64。

所以唯一的另一种方式(在我看来这是一个黑客攻击 - 主要是因为假设路径中的东西看起来总是很糟糕,但这可能是静态的,足以让它变得可靠)是将它与CSCRIPT所在的地方相结合发起自:

WScript.Echo WScript.FullName

...如果WScript.FullName包含SysWOW64,则它是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=x86PROCESSOR_ARCHITEW6432=AMD64

答案 1 :(得分:1)

最后我写了这篇文章(以及一些COM样板文件):

unsigned Environment::GetProcessBits()
    {
        return sizeof(std::ptrdiff_t) /*size in bytes*/ * 8U;
    }

我喜欢它,因为它避免了预处理器,如果msvc2012支持它,我甚至可以使用constexpr获得资格。

答案 2 :(得分:1)

如果您在“处理”(而不是“系统”)组中要求“PROCESSOR_ARCHITECTURE”:

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

你得到(32位shell)

System = x86
  Host = C:\Windows\SysWOW64\CScript.exe

或(64位shell)

System = AMD64
  Host = C:\Windows\System32\CScript.exe