在 Inno Setup 中转换 CurrentFilename 返回的 {constants}

Convert {constants} returned by CurrentFilename in Inno Setup

如何从下面的代码中获得漂亮的完整文件名:

;bugfixes
Source: "Bugfixes\CombatGameConstants.json"; DestDir: "{code:battletechDataDir}\constants";\
    Flags: uninsneveruninstall; Components: DataBugfixes; BeforeInstall: BackupFile()

BackupFile()过程:

procedure BackupFile();
var fileToBackup : String;
begin
  { if backup file already exists skip creation, otherwise rename the file to file.backup }
  fileToBackup := CurrentFilename(); { get destination file name }
  if not FileExists(fileToBackup + '.backup') then
  begin
    if not RenameFile(fileToBackup, fileToBackup + '.backup') then
      MsgBox('Creation backup file for ' + fileToBackup + ' failed!', mbInformation, MB_OK);
  end;
end;

这不会将 {code:battletechDataDir} 转换为完整路径 – CurrentFileName() returns 我 {code:battletechDataDir}\constants\{code:battletechDataDir}\constants。那么如何将 {code:battletechDataDir} 转换为目录,或者以其他方式备份给定文件?

您可以使用 ExpandConstant function:

fileToBackup := ExpandConstant(CurrentFilename()); { get destination file name }

尽管 CurrentFilename 旨在与通配符源一起使用。有了固定的文件名,还不如显式引用文件:

fileToBackup := battletechDataDir('') + '\constants\CombatGameConstants.json';