【问题标题】:Qt App doesn't load sql drivers when started by task scheduler任务调度程序启动时,Qt App 不加载 sql 驱动程序
【发布时间】:2016-04-09 06:48:06
【问题描述】:

我在 exe 附近的同一目录中编写了一个小型应用程序和所有与 Qt 相关的 dll(也是 sqldrivers 文件夹)。

问题:应用程序在我手动启动时工作,但当它由 Windows 的任务调度程序启动时,会出现“QSqlDatabase:未加载驱动程序,QSqlDatabase:可用驱动程序:QSQLITE QMYSQL ... blah blah”错误。

有什么想法吗?

【问题讨论】:

  • 我也尝试将应用目录设置为“Path”系统环境变量,但没有任何改变...
  • 那个目录下有qt.conf吗?
  • 我试图创建 qt.conf 但它没有用。也许我不能正确地准备它,我不知道。我分享了我的替代解决方案。谢谢。

标签: c++ qt scheduled-tasks


【解决方案1】:

将路径添加到 Path 环境变量后,我意识到如果我在命令提示符下的任何其他目录中调用 myapp.exe,它不会加载驱动程序,但如果我将命令提示符目录更改为 exe 的路径,它就可以工作。

所以我找到了另一种解决方案,即创建以下我用调度程序调用的 bat 文件,它可以工作。

@echo off
d:
cd MyAppPath
start "" "D:\MyAppPath\MyApp.exe"
exit

顺便说一句,不要忘记将路径添加到 ["Path"] 环境中,例如 "....;D:\MyAppPath"

感谢您的回复。

【讨论】:

  • 什么?调度程序不会自行更改目录?这很奇怪。也许有一些可以更改目录的调度程序任务设置?顺便说一句,由于无论如何您都在启动 BAT,您可以在此处设置 PATH 并保留系统设置,但这是您的选择。
【解决方案2】:

确保 Qt SQL 驱动程序插件所依赖的库(例如 libmysql.dll)也在 PATH 中。

否则Qt不能dlopen任何Qt插件b/c依赖不满足。

PS:使用 Dependency Walker (http://www.dependencywalker.com/) 检查 sqldrivers/ 中插件的其他依赖项

【讨论】:

  • libmysql.dll 已经在里面了。我解决并分享了我的替代解决方案。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 2016-12-02
  • 1970-01-01
相关资源
最近更新 更多