我在一个特定目录的不同子目录中有四个不同的.exes。所有程序都需要完全相同的.dll(Qt5Core,Qt5Gui和Qt5Widgets)。有没有办法让theese三个.dll只是在根目录中,必须将它们复制到每个子目录中?
答案 0 :(得分:1)
由于默认情况下启用了安全DLL搜索模式,因此订单为
- 加载应用程序的目录。
- 系统目录。使用GetSystemDirectory函数获取此目录的路径。
- 16位系统目录。没有函数可以获取此目录的路径,但会搜索它。
- Windows目录。使用GetWindowsDirectory函数获取此目录的路径。
- 当前目录。
- PATH环境变量中列出的目录。请注意,这不包括App Paths注册表项指定的每个应用程序路径。计算DLL搜索路径时不使用App Paths键。
醇>
因此,最简单的方法是确保从放置DLL的工作目录(5.)运行应用程序。这可以通过编写首先在那里导航的启动器.bat文件然后相对于DLL目录运行应用程序来完成。
另一种方法是在启动器.bat文件(6.)中将DLL目录添加到PATH。
在这两种情况下,您都需要为要运行的每个.exe创建一个包装器脚本。
如果可以确保指向应用程序的链接正确设置工作目录,则可以避免这种情况。如果您有一个安装程序为用户创建快捷方式,并且您知道用户不会通过右键单击.exe来创建自己的快捷方式,那么这将有效。
可能还有一种使用hardlinks or junctions的方法,但我不知道您是否可以在Linux上复制和部署符号链接,或者如果您需要在目标系统上创建它们。
答案 1 :(得分:0)