Попытка найти третий выпуск в базе данных без удачи.
Так, я разрабатываю в системе на 64 бита (окна семь). Я делаю простую консольную программу, которые проверяют, присутствует ли dll в системе окон. в этом случае я регистрируюсь в system32 папке и затем в sysWOW64 папке. Про грамм является приложением на 32 бита.
На целевой платформе на 32 бита я могу обычно проверять win32dll, поскольку каталог SysWOW64 не существует, без проблем. Бит, когда это выполняется в системе на 64 бита, я могу проверить, что win32 каталог, но sysWOW64 каталог всегда меня указывает на system32 каталог.
Кажется, что в системе на 64 бита существует своего рода перенаправление.
Я пытаюсь использовать "Wow64DisableWow64FsRedirection", но у меня есть "ошибка C3861: 'Wow64DisableWow64FsRedirection': идентификатор не нашел", когда я компилирую.
Таким образом, существует два вопроса:
Вам не нужно искать библиотеки DLL. LoadLibrary () и LoadLibraryEx () автоматически выполнят для вас поиск во всех соответствующих папках.
Если вы уверены, что хотите отключить перенаправление, вы можете сделать это с помощью Wow64DisableWow64FsRedirection, как вы упомянули. Чтобы он "работал", вы должны установить
#define _WIN32_WINNT 0x0501 (or higher)
перед включением windows.h
Возможно, это не то, что вы ищете, но немного расточительно, если вы знаете, что это единственные два места, где может быть расположен файл, и, возможно, не будет работать, если пользователь их изменил ( Хотя целый ряд других вещей также будет нарушен для пользователя), вы можете просто использовать переменную окружения % Path%
.
О том, как определить, использую ли я сейчас 32-битную или 64-битную систему, я думаю, вы могли бы проверить размер указателя int ...
int bits = IntPtr.Size * 8;
Console.WriteLine( "{0}-bit", bits );