2010-08-02 63 views
1

试图在数据库中发现第三个问题,但没有运气。64位和32位系统目录窗口

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

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

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

我试图使用“Wow64DisableWow64FsRedirection”,但我有“错误C3861:'Wow64DisableWow64FsRedirection':标识符未找到”当我编译。

因此,有两个问题:

  • 在这个WINBASE.H功能被禁用,如何得到它的工作?
  • 如何确定当前程序运行时我是否在32位或64位系统上?
+0

应该不需要检查Windows和SysWoW文件夹。你为什么认为这是必要的? – 2010-08-02 08:39:11

回答

2

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

search order如下:

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

如上所述,如果您确定要禁用重定向,可以使用Wow64DisableWow64FsRedirection来完成此操作。为了让“工作”,你必须设置

#define _WIN32_WINNT 0x0501 (or higher) 

你包括WINDOWS.H

0

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

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

以及我检查这个例子:http://blogs.msdn。com/b/oldnewthing/archive/2005/02/01/364563.aspx – Ziggy 2010-08-02 08:11:03

+2

注意:IntPtr的大小取决于您处于32位还是64位*进程*。它没有告诉你有关底层操作系统。要获得有关操作系统的信息,请参阅http://stackoverflow.com/questions/336633/how-to-detect-windows-64-bit-platform-with-net。此外,OP似乎没有使用.NET – 2010-08-02 08:35:30

+0

我认为这段代码更简单并且性能更好。只有一行才能得到答案! :D – Jonathan 2010-08-02 08:35:40

0

之前,虽然不是有可能你在找什么,稍有浪费,如果你知道这些是仅有的两个地方文件可能被定位,并且如果用户修改了它们,可能无法工作(虽然其他一些东西也会被用户破坏),但您可以简单地使用%Path%环境变量。