【问题标题】:64 & 32 bit system directory windows64 位和 32 位系统目录窗口
【发布时间】:2011-03-24 02:14:35
【问题描述】:

试图在数据库中找到第三个问题,但没有成功。

所以,我正在 64 位系统(Windows 7)上进行开发。 我正在制作一个简单的控制台程序来检查 Windows 系统上是否存在 dll。在这种情况下,我检查 system32 文件夹,然后检查 sysWOW64 文件夹。 该程序是32位应用程序。

在32位目标平台上,win32dll可以正常查看,因为SysWOW64目录不存在,没问题。 位在 64 位系统上执行时,我可以检查 win32 目录,但 sysWOW64 目录我总是指向 system32 目录。

在64位系统上似乎有一种重定向。

我正在尝试使用“Wow64DisableWow64FsRedirection”,但在编译时出现“错误 C3861: 'Wow64DisableWow64FsRedirection': identifier not found”。

所以有两个问题:

  • 在winbase.h中这个功能被禁用了,如何让它工作?
  • 如何在程序运行时确定我当前是在 32 位还是 64 位系统上?

【问题讨论】:

  • 应该不需要同时检查 Windows 和 SysWoW 文件夹。您认为为什么需要这样做?

标签: windows 64-bit


【解决方案1】:

虽然可能不是您要查找的内容,但如果您知道文件可以定位的只有这两个位置,并且如果用户修改了它们,则可能无法正常工作(尽管还有很多其他的东西也会对用户造成破坏),您可以简单地使用 %Path% 环境变量。

【讨论】:

    【解决方案2】:

    您不必搜索 DLL。 LoadLibrary() 和 LoadLibraryEx() 将自动为您搜索所有相关文件夹。

    search order如下:

    1. 加载应用程序的目录。
    2. 系统目录。
    3. 16 位系统目录。
    4. Windows 目录
    5. 当前目录。
    6. PATH 环境变量中列出的目录。

    如果您确定要禁用重定向,可以使用您提到的 Wow64DisableWow64FsRedirection 来执行此操作。要使其“工作”,您必须设置

    #define _WIN32_WINNT 0x0501 (or higher)
    

    在包含 windows.h 之前

    【讨论】:

      【解决方案3】:

      关于如何确定我当前是在 32 位还是 64 位系统上,我认为您可以检查 int 指针的大小...

      int bits = IntPtr.Size * 8;
      Console.WriteLine( "{0}-bit", bits );
      

      【讨论】:

      • 好吧,我用这个例子检查一下:blogs.msdn.com/b/oldnewthing/archive/2005/02/01/364563.aspx
      • 注意:IntPtr 的大小取决于您是在 32 位还是 64 位进程中。它没有告诉您有关底层操作系统的信息。要获取有关操作系统的信息,请参阅stackoverflow.com/questions/336633/…。此外,OP 似乎没有使用 .NET
      • 我觉得这段代码更简单,性能也更好。只需一行即可获得答案! :D
      • 0xA3 是对的...如果您正在寻找操作系统版本,这不是正确的答案:(
      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 2012-04-03
      • 2013-09-17
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      相关资源
      最近更新 更多