2013-08-19 72 views
1

VBScript中是否有可用的函数来告诉您脚本解释器(CScript/WScript)是作为32位还是64位进程运行?在VBScript中有一种方法可以判断它是作为32位还是64位进程运行的吗?

我从其他答案中看到,在.NET中,您可以使用.Environment.Is64BitProcess,其中完全按照它在tin上的说法进行操作。

编辑:我现在满意,没有无足轻重的方法来做到这一点。幸运的是,我从脚本中使用C++编写的COM对象;所以我可以平凡地添加一个函数。这就是我现在要做的。但如果可能的话,我宁愿使用更原生的解决方案。

回答

1

在我写这个端部(沿一些COM样板):

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

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

4

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

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

在对64位操作系统的32位命令提示符(即CMD.EXE从SYSWOW64开始),则将返回x86而不是AMD64。然而,从64位CMD.EXE开始的32位CSCRIPT中,它仍然返回AMD64。所以唯一的另一种方式(在我看来这有点破绽 - 主要是假设路径总是看起来很糟糕,但这可能足够静态以保证可靠),就是将它与查看CSCRIPT的位置组合起来从推出:

WScript.Echo WScript.FullName 

...如果WScript.FullName包含SysWOW64中,那么它在64位盒(最有可能)的32位CSCRIPT。如果它包含System32,那么你可以回退到PROCESSOR_ARCHITECTURE环境变量。

附录
我最近有运行Windows 7 64位的新机,这提供了进一步的可能性(原来的答案是基于64位服务器2008盒)。现在有一个新的环境变量PROCESSOR_ARCHITEW6432。快速实验表明:

  • 64位的cmd.exe:PROCESSOR_ARCHITECTURE=AMD64PROCESSOR_ARCHITEW6432未设置
  • 32位的cmd.exe:PROCESSOR_ARCHITECTURE=x86PROCESSOR_ARCHITEW6432=AMD64
+0

+1;可能是你可以做的最好的事情,而不需要搞乱你可以控制的COM对象。你现在有10K代表! – Bathsheba

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位壳)

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

或(64 bit shell)

System = AMD64 
    Host = C:\Windows\System32\CScript.exe 
相关问题