1

Из-за (не относящихся к этому вопросу) ограничений реализации OpenGL в Virtualbox (доступна только версия OpenGL 1.1, но мне нужна как минимум версия 2.0), я решил использовать программную реализацию в форме DLL (называемой opengl32.dll), которая может можно скачать здесь: ftp://ftp.blender.org/sergey/softwaregl/

Один из способов сделать это - поместить файл opengl32.dll непосредственно в тот же каталог, что и исполняемый файл.

Мой вопрос: каков наилучший способ сделать эту программную реализацию доступной для всех программ, не копируя файлы DLL вокруг.

Важное замечание: Всем 32- битным приложениям нужен файл opengl32.dll из каталога /win32/ этого FTP-сервера, в то время как всем 64- битным приложениям нужен файл opengl32.dll (то же имя, но это другой файл!) из каталога /win64/. Таким образом, если у меня есть одно 32-битное и одно 64-битное приложение в одном и том же каталоге на моем компьютере, решение поместить DLL в одну и ту же папку не работает: невозможно иметь два разных файла с одинаковым именем в одном и том же каталоге. каталог.

3 ответа3

2

Вам нужно поместить вашу 64-битную dll в c:\Windows\System32 а вашу 32-битную dll в c:\Windows\SysWOW64 .

Обратите внимание, что в Windows 10 оригинальные файлы OpenGL32.dll доступны только пользователю TrustedInstaller . Таким образом, чтобы заменить их, вы должны сменить владельца этих файлов на Administrator . Для меня это было невозможно сделать с помощью любого пользовательского интерфейса, но подход с использованием командной строки работал. Для этого запустите Command Prompt от имени администратора. Затем используйте следующие команды для удаления оригинальных файлов OpenGL32.dll :

takeown /F C:\Windows\System32\OpenGL32.dll /A icacls C:\Windows\System32\OpenGL32.dll /T /grant administrators:F move C:\Windows\System32\OpenGL32.dll C:\Windows\System32\OpenGL32.dll.orig

То же самое для каталога C:\Windows\SysWOW64 .

После этого просто скопируйте свой собственный OpenGL32.dll в эти места с правами администратора.

1

Обычное решение состоит в том, чтобы иметь две подпапки как это:

Installation folder
    |--- Win32 DLL
    |--- Win64 DLL

.exe этой программы находится в основной папке, но не непосредственно называется. Вместо этого он запускается через файл .bat который проверяет, является ли Windows 32- или 64-разрядным, и запускает .exe в контексте соответствующей подпапки. Поиск DLL выполняется в нескольких папках, одна из которых является текущей папкой.

Посмотрите файл post batch для проверки 64-битной или 32-битной ОС.

Если вас беспокоит, что файл .bat как окно с черным квадратом, вы можете запустить его как скрытый, как описано в посте. Запустите пакетный файл полностью скрытым способом. Программа с графическим интерфейсом, которая запускается из такого скрытого пакетного файла, сама по себе не будет скрыта.

0

Использование механизма KnownDLL может помочь. Известные DLL обходят поиск в файловой системе и вместо этого загружаются из одного фиксированного каталога. Удобно, что есть один каталог KnownDLL для 64-битных процессов и один каталог KnownDLL32 для 32-битных процессов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .