应用程序卸载后未删除 sqlite 数据库文件

sqlite database file not deleted after application uninstall

我已经用 Qt 编写了桌面 windows 应用程序。我使用 sqlite 作为我的数据库来存储与应用程序相关的数据。我通过使用 NSIS 快速脚本生成器制作安装程序来部署二进制文件。一切正常,直到我卸载应用程序。当我卸载应用程序时,似乎所有文件都被删除了,但实际上数据库文件(.sqlite)并没有被删除,尽管它不是直接可见的。当我再次安装该应用程序并且该应用程序开始使用旧应用程序的数据时,我才知道这一点。然后我使用 DB Browser for Sqlite 发现该文件仍然存在。现在我可以使用该应用程序删除文件。但我的问题是 sqlite 文件应该自动删除,而不是用户使用第三方应用程序手动删除。我在这里做错了吗?有什么方法可以避免这种情况吗?

如果 NSIS 没有自己放置文件(您的程序正在创建它),它不会创建删除命令来删除它 - 它应该如何知道它?您需要在 NSIS 脚本中为任何您需要删除但快速脚本生成器不知道的文件放置一个手动删除命令。

在生成的 NSIS 脚本中,在卸载部分,您需要添加类似于 "Delete PATH\Database.db" 的命令。将 Database.db 更改为您的数据库名称。将 PATH 更改为文件所在的正确路径。您可以使用 NSIS 常量来帮助设置路径。一些可能的常量是@INSTDIR(安装目录)$DOCUMENTS(基本文档文件夹),$APPDATA(基本应用程序数据目录)。因此,如果您的数据库在 appdata 的 mysqliteapp 文件夹中被称为 foodata.db,那么命令将是

Delete $APPDATA\mysqliteapp\foodata.db