2010-08-02 91 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%環境變量。