Inno installation compiler: how to modify file contents

I am trying to read the contents of a text file line by line;

I am looking for something for a specific string.

I need to change this line;

I need to save new content in another file and then delete the original file and rename the new file with the original file name;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  ExecInfo: TShellExecuteInfo;
  ExecInfoBrowser: TShellExecuteInfo;
  textFileFrom, textFileTo : text;
  line: string;
begin
  Result := True;

  if CurPageID = wpFinished then
  begin
    ExecInfo.cbSize := SizeOf(ExecInfo);
    ExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
    ExecInfo.Wnd := 0;
    ExecInfo.lpFile := ExpandConstant('{app}') + '\{#Exewampmanager}';
    ExecInfo.nShow := SW_HIDE;
    if ShellExecuteEx(ExecInfo) then
      begin
        if WaitForSingleObject(ExecInfo.hProcess, 5000) = WAIT_TIMEOUT then
          begin
            Assign(textFileFrom,'wampmanager.conf');
            Reset(textFileFrom);
            Assign(textFileto,'wampmanager2.conf');
            Rewrite(textFileTo);
            repeat
              readln(textFileFrom,line);
              writeln(textFileto,line);
            until eof(textFileFrom);
            Close(textFileFrom);
            Close(textFileTo);
               ExecInfoBrowser.cbSize := SizeOf(ExecInfo);
               ExecInfoBrowser.fMask := SEE_MASK_NOCLOSEPROCESS;
               ExecInfoBrowser.Wnd := 0;
               ExecInfoBrowser.lpFile := 'http://localhost/cow';
               ExecInfoBrowser.nShow := SW_HIDE;
               ShellExecuteEx(ExecInfoBrowser);
          end;
      end;
  end;
end;

in the file I need to assign the following line: installDir = "c:/wamp"

since the new installation may not be in one place

this is the conf file:

[main]
language = english
status = "offline"
wampserverVersion = 2.2
wampserverLastKnown = 2.2
installDir = "c:/wamp"
navigator = "C:\Windows\explorer.exe"
defaultLanguage = english


[php]
phpVersion = "5.4.3"
phpLastKnown = 5.4.3
phpIniDir = .
phpConfFile = php.ini
phpExeDir = .


[phpCli]
phpCliVersion = 5.4.3
phpExeFile = php.exe
phpCliFile = php-win.exe


[apache]
apacheVersion = "2.2.22"
apacheLastKnown = 2.2.22
apacheExeDir = bin
apacheConfDir = conf
apacheExeFile = httpd.exe
apacheConfFile = httpd.conf
apacheServiceInstallParams = -n wampapache -k install
apacheServiceRemoveParams = -n wampapache -k uninstall


[mysql]
mysqlVersion = "5.5.24"
mysqlLastKnown = 5.5.24
mysqlConfDir = .
mysqlConfFile = my.ini
mysqlExeDir = bin
mysqlExeFile = mysqld.exe
mysqlServiceInstallParams = --install-manual wampmysqld
mysqlServiceRemoveParams = --remove wampmysqld


[apps]
phpmyadminVersion = 3.5.1
sqlbuddyVersion = 1.3.3
webgrindVersion = 1.0
0
source share
1 answer

INI, , , [INI] , ( , script , ). , , , , :

[INI]
Filename: "{app}\wampmanager.conf"; Section: "main"; Key: "installDir"; String: """{app}"""

, [Code]:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Code]
function ChangeInstallDir(const FileName, InstallDir: string): Boolean;
begin
  Result := SetIniString('main', 'installDir', '"' + InstallDir + '"', FileName);
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
    if not ChangeInstallDir(ExpandConstant('{app}\wampmanager.conf'), 
        ExpandConstant('{app}')) then
      MsgBox('Saving to config file failed!', mbError, MB_OK);
end;
+2

Source: https://habr.com/ru/post/1651362/


All Articles