使用InnoSetup备份文件并在卸载时还原它们?

4
考虑以下情况:
  • 我有两个文件,例如XXX.txtYYY.txt

  • 我想将它们安装到一个文件夹中(比如说files文件夹),在这个文件夹中已经有了XXX.txtYYY.txt文件

  • 我想要“备份”这两个原始文件,将它们重命名为XXX.txt.backupYYY.txt.backup

  • 在卸载时,我想要将这两个文件恢复到它们的原始状态

如何使用Inno Setup实现这一目标?

如果安装程序在文件夹中发现XXX.txt.backup,您希望发生什么?跳过备份?覆盖旧备份? - mghie
3个回答

13

添加

[Files]
; Backup Function_Template
Source: "{app}\XXX.txt"; DestDir: "{app}"; DestName: "XXX.txt.bkup"; Flags: external skipifsourcedoesntexist uninsneveruninstall

这将移动现有的文件,并且标志将防止卸载它。现在你可以将以下代码放入你的程序中:

[Code] 
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
var
  OldFile: string;
begin
  case CurUninstallStep of    
    usPostUninstall:
      begin
        OldFile := ExpandConstant('{app}\XXX.txt.bkup');
        if FileExists(OldFile) then
          RenameFile(OldFile, ExpandConstant('{app}\XXX.txt'));
      end;
  end;
end;

0
Source: "{app}\XXX.txt"; DestDir: "{app}"; DestName: "XXX.txt.bkup"; Flags: external skipifsourcedoesntexist uninsneveruninstall

看起来似乎不起作用,因为“如果您没有指定完整的路径名,编译器将在您安装的源目录前加上路径。”

不过,我刚刚发现这个可以正常工作!我忘记加上“external”标志了。


3
欢迎来到StackOverflow。由于这不是一个答案,而是对另一个答案的跟进,请将其作为评论发表。如果该答案有误,您可以编辑它并附上适当的说明,然后会有更有经验的用户审核。谢谢。 - Deanna

-1

也许可以弹出一个窗口,显示“已经存在 XXX.txt.backup 文件。您确定要覆盖它吗?”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接