使用InnoSetup备份文件并在卸载时恢复它们?

时间:2010-08-20 14:05:28

标签: inno-setup

请考虑以下事项:

  • 我有两个文件,例如XXX.txtYYY.txt

  • 我想将它们安装到一个文件夹(比方说files),其中已有XXX.txtYYY.txt个文件

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

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

如何通过Inno Setup实现这一目标?

3 个答案:

答案 0 :(得分:12)

添加

[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;

答案 1 :(得分:0)

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

似乎没有用,因为“如果你没有指定一个完全限定的路径名​​,编译器会预先安装你的安装源目录的路径。”

然而,我刚刚发现这个工作正常!我没有留下“外部”旗帜。

答案 2 :(得分:-1)

好吧,也许是一个弹出窗口说“已经有一个XXX.txt.backup。你真的想覆盖它吗?”