Search code examples
inno-setuppascalscript

Inno Setup How to exclude a single file from AfterInstall


After install, I want to save a string to 3 out of the 4 files, but currently it's saving the string to all. How do I exclude a file called network? I'm thinking another if statement, but not sure how. This file would be {app}\configs\network.config

procedure MyBeforeInstall;
begin
  if(FileExists(ExpandConstant(CurrentFileName))) then
  begin
   Exists := True;
  end
  else
  begin
    Exists := False;
  end;
end;

procedure MyAfterInstall;
begin
  if not(Exists) then
  SaveStringToFile(ExpandConstant(CurrentFileName), #13#10 + 'SettingEnv       ' + SettingEnv.Values[0] + #13#10, True);
  MsgBox(ExpandConstant(CurrentFileName), mbInformation, MB_OK);
end;

Solution

  • Assuming you use MyBeforeInstall and MyAfterInstall like this:

    [Files]
    Source: "*.txt"; DestDir: "{app}"; \
      BeforeInstall: MyBeforeInstall; AfterInstall: MyAfterInstall
    

    Then you can do this instead:

    [Files]
    Source: "one.txt"; DestDir: "{app}"; \
      BeforeInstall: MyBeforeInstall; AfterInstall: MyAfterInstall
    
    Source: "two.txt"; DestDir: "{app}"; \
      BeforeInstall: MyBeforeInstall; AfterInstall: MyAfterInstall
    
    Source: "three.txt"; DestDir: "{app}"; \
      BeforeInstall: MyBeforeInstall; AfterInstall: MyAfterInstall
    
    Source: "but_not_this_one.txt"; DestDir: "{app}"
    

    This will do too:

    [Files]
    Source: "*.txt"; Excludes: "but_no_this_one.txt"; DestDir: "{app}"; \
        BeforeInstall: MyBeforeInstall; AfterInstall: MyAfterInstall
    
    Source: "but_not_this_one.txt"; DestDir: "{app}"
    

    Yet another option is:

    procedure MyAfterInstall;
    begin
      if CompareText(ExtractFileName(CurrentFileName), 'but_not_this_one.txt') <> 0 then
      begin
        if not Exists then
          SaveStringToFile(
            CurrentFileName,
            #13#10 + 'SettingEnv       ' + SettingEnv.Values[0] + #13#10, True);
      end;
      MsgBox(CurrentFileName, mbInformation, MB_OK);
    end;
    

    (ntb, that there's no point using ExpandConstant on CurrentFileName, as its return value does not contain any constants)