Системные окна каталога на 64 и 32 бита

Попытка найти третий выпуск в базе данных без удачи.

Так, я разрабатываю в системе на 64 бита (окна семь). Я делаю простую консольную программу, которые проверяют, присутствует ли dll в системе окон. в этом случае я регистрируюсь в system32 папке и затем в sysWOW64 папке. Про грамм является приложением на 32 бита.

На целевой платформе на 32 бита я могу обычно проверять win32dll, поскольку каталог SysWOW64 не существует, без проблем. Бит, когда это выполняется в системе на 64 бита, я могу проверить, что win32 каталог, но sysWOW64 каталог всегда меня указывает на system32 каталог.

Кажется, что в системе на 64 бита существует своего рода перенаправление.

Я пытаюсь использовать "Wow64DisableWow64FsRedirection", но у меня есть "ошибка C3861: 'Wow64DisableWow64FsRedirection': идентификатор не нашел", когда я компилирую.

Таким образом, существует два вопроса:

  • В winbase.h отключена эта функция, как получить его работа?
  • Как определить, ли я в настоящее время нахожусь в системе на 32 или 64 бита, когда программа работает?
1
задан Benjamin 15 December 2013 в 01:04
поделиться

3 ответа

Вам не нужно искать библиотеки DLL. LoadLibrary () и LoadLibraryEx () автоматически выполнят для вас поиск во всех соответствующих папках.

Порядок поиска следующий:

  1. Каталог, из которого загружено приложение.
  2. Системный каталог.
  3. 16-битный системный каталог.
  4. Каталог Windows
  5. Текущий каталог.
  6. Каталоги, перечисленные в переменной среды PATH.

Если вы уверены, что хотите отключить перенаправление, вы можете сделать это с помощью Wow64DisableWow64FsRedirection, как вы упомянули. Чтобы он "работал", вы должны установить

#define _WIN32_WINNT 0x0501 (or higher)

перед включением windows.h

2
ответ дан 2 September 2019 в 22:31
поделиться

Возможно, это не то, что вы ищете, но немного расточительно, если вы знаете, что это единственные два места, где может быть расположен файл, и, возможно, не будет работать, если пользователь их изменил ( Хотя целый ряд других вещей также будет нарушен для пользователя), вы можете просто использовать переменную окружения % Path% .

0
ответ дан 2 September 2019 в 22:31
поделиться

О том, как определить, использую ли я сейчас 32-битную или 64-битную систему, я думаю, вы могли бы проверить размер указателя int ...

int bits = IntPtr.Size * 8;
Console.WriteLine( "{0}-bit", bits );
0
ответ дан 2 September 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: