当前位置:  开发笔记 > 编程语言 > 正文

如何判断我的应用程序是作为32位还是64位应用程序运行?

如何解决《如何判断我的应用程序是作为32位还是64位应用程序运行?》经验,为你挑选了4个好方法。

如何判断我的应用程序(在Visual Studio 2008中作为任何CPU编译)是作为32位还是64位应用程序运行?



1> 小智..:

如果您使用的是.NET 4.0,那么它就是当前流程的单行程序:

Environment.Is64BitProcess

参考:Environment.Is64BitProcess属性(MSDN)



2> Perica Zivko..:
if (IntPtr.Size == 8) 
{
    // 64 bit machine
} 
else if (IntPtr.Size == 4) 
{
    // 32 bit machine
}



3> Lawrence Joh..:

我发现Martijn Boven的这个代码可以解决这个问题:

public static bool Is64BitMode() {
    return System.Runtime.InteropServices.Marshal.SizeOf(typeof(IntPtr)) == 8;
}


调用IntPtr.Size而不是Marshal.SizeOf(typeof(IntPtr))可能更有效率
我很想给JaredPar的评论+1; 那是我怎么做的......

4> 小智..:

Microsoft All-In-One Code Framework中的此代码示例可以回答您的问题:

在C#中检测进程运行平台(CSPlatformDetector)

CSPlatformDetector代码示例演示了与平台检测相关的以下任务:

    检测当前操作系统的名称. (例如"Microsoft Windows 7 Enterprise")

    检测当前操作系统的版本. (例如"Microsoft Windows NT 6.1.7600.0")

    确定当前操作系统是否为64位操作系统.

    确定当前进程是否为64位进程.

    确定系统上运行的任意进程是否为64位.

如果您只想确定当前正在运行的进程是否为64位进程,则可以使用.NET Framework 4中新增的Environment.Is64BitProcess属性.

如果要检测系统上运行的任意应用程序是否为64位进程,则需要确定OS位数,如果是64位,则IsWow64Process()使用目标进程句柄调用:

static bool Is64BitProcess(IntPtr hProcess)
{
    bool flag = false;

    if (Environment.Is64BitOperatingSystem)
    {
        // On 64-bit OS, if a process is not running under Wow64 mode, 
        // the process must be a 64-bit process.
        flag = !(NativeMethods.IsWow64Process(hProcess, out flag) && flag);
    }

    return flag;
}

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有