我已经发布了Inno Setup的应用程序。遗憾的是,这个应用程序已经安装了一个DB文件作为源文件,因此如果卸载了该应用程序,则会删除整个DB文件。
我即将发布新版本。我希望新版本覆盖以前的版本,而不是安装DB文件,而是由应用程序本身创建数据库。
如果我在没有安装原版的情况下安装新版本,一切正常。应用程序创建一个DB文件,卸载后,数据库将保留在计算机上。
问题是,如果我在计算机上安装了以前的版本然后安装了新版本,那么在卸载新版本后,数据库文件将始终被删除。
两个应用程序都使用相同的AppId转到同一目录。
如何撤消先前安装程序安排的文件删除?
答案 0 :(得分:3)
如果添加uninsneveruninstall
标志,则可以继续安装数据库文件。这将在卸载应用程序时保留文件和目录。不幸的是,添加此标志现在无济于事,因为卸载仍将删除数据库文件 - 初始安装中的数据库文件的文件条目不会被以后的安装修改,因此将始终删除数据库文件。似乎没有办法解决这个问题。
您可以做的是将代码添加到制作数据库文件备份副本的新安装程序(或卸载程序)中。然后将保留文件和目录,因为卸载程序默认情况下不会删除安装程序尚未创建的任何内容。
答案 1 :(得分:1)
在新版本中,我建议您使用其他名称创建数据库文件。这将是一种简单的方法,可以确保任何以前的安装程序永远不会卸载它。
新版本的安装程序(使用某些Pascal脚本)或应用程序本身可以检测具有旧名称的数据库(如果存在),并且:
您必须小心考虑所有可能的安装,卸载,重新安装方案,而不是弄乱每个方案中的数据。
答案 2 :(得分:1)
感谢您的回复。我同意这里最明显的解决方案是将DB文件复制到新位置并忘记问题。所以我的upvote去了mghie。
我设法通过删除unins000。*文件来实现我所需要的:
[InstallDelete]
Type: files; Name: "{app}\unins000.dat"
Type: files; Name: "{app}\unins000.exe"
我需要删除这两个文件。此外,我不得不重新安装所有带有“ignoreversion”标志的文件,以便新的卸载程序将其删除:
[Files]
Source: {#SourceFileDir}\my.exe; DestDir: {app}; Flags: ignoreversion
这当然有一些缺点,并不是100%安全,但在我的情况下有效。
答案 3 :(得分:0)
尝试在脚本中更改AppID。
来自InnoSetup帮助文件:
AppId的值存储在卸载日志文件(unins ???。dat)中,并由后续安装检查以确定它是否可以附加到特定的现有卸载日志。如果现有卸载日志的AppId与当前安装的AppId相同,安装程序将仅附加到卸载日志。
答案 4 :(得分:0)
这是一个相当高级的主题(我认为)。
我建议在innosetup的新闻组中提出这个问题:
news://news.jrsoftware.org/jrsoftware.innosetup
如果您在新闻组中收到答案,请在此处发布结果。