我在Qt编写了桌面窗口应用程序。我使用sqlite作为我的数据库来存储应用程序相关数据。我通过使用NSIS Quick Script Generator制作安装程序来部署二进制文件。在卸载应用程序之前,一切正常。当我卸载应用程序时,似乎所有文件都被删除了,但实际上数据库文件(.sqlite)不会被删除,尽管它不是直接可见的。我开始知道这一点,当我再次安装应用程序时,应用程序开始使用旧应用程序的数据。然后我使用DB Browser for Sqlite来发现该文件仍然存在。现在我可以使用该应用程序删除该文件。但我的问题是应该自动删除sqlite文件而不是用户手动使用第三方应用程序删除。我在这里做错了吗?有没有办法避免这种情况?
答案 0 :(得分:1)
如果NSIS没有将文件放在适当的位置(您的程序正在创建它),它将不会创建删除命令来删除它 - 它应该怎么知道呢?您需要在NSIS脚本中为快速脚本生成器不知道的任何需要删除的文件添加手动删除命令。
在生成的NSIS脚本中,在卸载部分中,您需要添加一个类似“Delete PATH \ Database.db”的命令。将Database.db更改为您的数据库名称。将PATH更改为文件所在的正确路径。您可以使用NSIS常量来帮助设置路径。一些可能的常量是@INDDIR(安装目录)$ DOCUMENTS(基本文档文件夹),$ APPDATA(基本appdata目录)。因此,如果您的数据库在appdata的mysqliteapp文件夹中名为foodata.db,那么该命令将是
Delete $APPDATA\mysqliteapp\foodata.db