如何通过Inno Setup撤消先前安装计划的文件删除

时间:2010-01-13 14:13:39

标签: inno-setup

我已经发布了Inno Setup的应用程序。遗憾的是,这个应用程序已经安装了一个DB文件作为源文件,因此如果卸载了该应用程序,则会删除整个DB文件。

我即将发布新版本。我希望新版本覆盖以前的版本,而不是安装DB文件,而是由应用程序本身创建数据库。

如果我在没有安装原版的情况下安装新版本,一切正常。应用程序创建一个DB文件,卸载后,数据库将保留在计算机上。

问题是,如果我在计算机上安装了以前的版本然后安装了新版本,那么在卸载新版本后,数据库文件将始终被删除。

两个应用程序都使用相同的AppId转到同一目录。

如何撤消先前安装程序安排的文件删除?

5 个答案:

答案 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

如果您在新闻组中收到答案,请在此处发布结果。