PowerBuilder中如何判断操作系统是64位还是32位?
是否可以使用 GetEnvironment 获得它?
检查环境变量很容易,但它不是防弹的,因为用户可以重新定义该值。
更稳健的方法是检查当前 Powerbuilder 进程是否在 WOW64 模式(32 位仿真模式)下运行。
[Local external definitions]
FUNCTION long IsWow64Process(long hwnd, ref boolean Wow64Process) &
LIBRARY "Kernel32.DLL"
FUNCTION long GetCurrentProcess () LIBRARY "KERNEL32.DLL"
[Powerscript]
boolean wow64 =false
IsWow64Process(GetCurrentProcess(), wow64)
MessageBox("Running in 64b env", wow64)
GetEnvironment
可以通过其CPUType
属性提供有关 cpu 的一些信息,但它只会返回平台类型(alpha,mips,pentium,...)。
您可以从仅在 64b 平台上定义的环境中测试一些显着的值,例如ProgramFiles(x86)
使用GetContextService
/GetContextKeywords
并将环境变量设置为查询的上下文关键字:
string ls_vals[], ls_val, ls_env = "ProgramFiles(x86)" /*name of the env variable to query*/
ContextKeyword lcxk_base
GetContextService("Keyword", lcxk_base)
lcxk_base.GetContextKeywords(ls_env, ls_vals[])
if upperbound(ls_vals[]) > 0 then
ls_val = ls_vals[1]
else
ls_val = "*undefined*" //it is 32b
end if
messagebox ("architecture", ls_val)
我会建议首先测试PROCESSOR_ARCHITECTURE
环境变量,即AMD64
在 Windows 64b 的 shell 中,但似乎 PB 可执行文件得到x86
......
您可以使用 Roland Smith 网站上的免费代码。
http://www.topwizprogramming.com/freecode_osversion.html
“该程序返回有关操作系统版本的信息。它返回操作系统名称、版本和服务包。它还具有从 .dll 和 .exe 文件返回版本字符串的功能。”