使 DLL 可用于所有 Windows 程序(win10 pro x64)

使 DLL 可用于所有 Windows 程序(win10 pro x64)

由于 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 位 放入dllc:\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 目录。

相关内容