0

PowerBuilder中如何判断操作系统是64位还是32位?

是否可以使用 GetEnvironment 获得它?

4

3 回答 3

8

检查环境变量很容易,但它不是防弹的,因为用户可以重新定义该值。

更稳健的方法是检查当前 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)
于 2012-10-09T02:55:20.153 回答
2

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......

于 2012-10-08T09:22:25.153 回答
0

您可以使用 Roland Smith 网站上的免费代码。

http://www.topwizprogramming.com/freecode_osversion.html

“该程序返回有关操作系统版本的信息。它返回操作系统名称、版本和服务包。它还具有从 .dll 和 .exe 文件返回版本字符串的功能。”

于 2013-02-06T11:02:02.603 回答