64& 32位系统目录窗口

时间:2010-08-02 07:57:49

标签: windows 64-bit

试图在没有运气的情况下在数据库中找到第三个问题。

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

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

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

我正在尝试使用“Wow64DisableWow64FsRedirection”但我编译时出现“错误C3861:'Wow64DisableWow64FsRedirection':标识符未找到”。

所以有两个问题:

  • 在winbase.h中,此功能已禁用,如何使其正常工作?
  • 如果程序正在运行,如何确定我当前是在32位还是64位系统上?

3 个答案:

答案 0 :(得分:2)

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

search order如下:

  1. 加载应用程序的目录。
  2. 系统目录。
  3. 16位系统目录。
  4. Windows目录
  5. 当前目录。
  6. PATH环境变量中列出的目录。
  7. 如果您确定要禁用重定向,可以使用Wow64DisableWow64FsRedirection执行此操作。要使其“正常”,您必须设置

    #define _WIN32_WINNT 0x0501 (or higher)
    

    包含windows.h之前

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

虽然不是你想要的东西,但如果你知道那些文件可以找到的只有两个地方会有点浪费,如果用户修改了它们可能就行不通了(尽管还有很多其他的东西)也会破坏用户),你可以简单地使用%Path%环境变量。