![使 DLL 可用于所有 Windows 程序(win10 pro x64)](https://linux22.com/image/1574022/%E4%BD%BF%20DLL%20%E5%8F%AF%E7%94%A8%E4%BA%8E%E6%89%80%E6%9C%89%20Windows%20%E7%A8%8B%E5%BA%8F%EF%BC%88win10%20pro%20x64%EF%BC%89.png)
由于 Virtualbox 中 OpenGL 实现的限制(与此问题无关)(只有 OpenGL 1.1 版本可用,但我至少需要 2.0 版本),我决定使用 DLL 形式的软件实现(名为开放gl32库) 可以从这里下载:ftp://ftp.blender.org/sergey/softwaregl/
一种方法是将文件开放gl32库直接放入与可执行文件相同的目录中。
我的问题是:什么是使该软件实现可供所有程序使用的最佳方法,而无需复制 DLL 文件。
重要提示:所有 32 位应用程序都需要该文件开放gl32库从目录中/win32/此 FTP 服务器,而所有 64 位应用程序都需要该文件开放gl32库 (名称相同,但文件不同!)从目录中/win64/。因此,如果我的计算机上的同一目录中有一个 32 位和一个 64 位应用程序,则将 DLL 放入同一文件夹的解决方案不起作用:不可能在同一个目录中有两个具有相同名称的不同文件。
答案1
您需要将 64 位 放入dll
,c:\Windows\System32
将 32 位dll
放入c:\Windows\SysWOW64
。
请注意,在 Windows 10 上,原始OpenGL32.dll
文件仅供TrustedInstaller
用户访问。因此,要替换它们,您必须将这些文件的所有权更改为Administrator
。对我来说,使用任何 UI 都无法做到这一点,但命令行方法有效。为此,请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
以管理员身份将您自己的内容复制到这些位置即可。
编辑:
软件Opengl32.dll
实现也可以从https://fdossena.com/?p=mesa/index.frag
答案2
通常的解决方案是有两个像这样的子文件夹:
Installation folder
|--- Win32 DLL
|--- Win64 DLL
程序的.exe
位于主文件夹中,但不直接调用。相反,它通过一个.bat
文件启动,该文件检查 Windows 是 32 位还是 64 位,并.exe
在匹配的子文件夹上下文中启动。在多个文件夹中搜索 DLL,其中一个是当前文件夹。
查看帖子 用于检查 64 位或 32 位操作系统的批处理文件。
如果你担心.bat
文件显示为黑色方形窗口,你可以按照帖子中所述将其隐藏起来
以完全隐藏的方式运行批处理文件. 从此类隐藏批处理文件启动的 GUI 程序本身不会被隐藏。
答案3
使用该KnownDLL
机制可能会有所帮助。已知 DLL 绕过文件系统搜索,而是从单个固定目录加载。方便的是,64 位进程有一个 KnownDLL 目录,32 位进程有一个 KnownDLL32 目录。