Проблема Inno Setup проблема с обновлением(AppModifyPath)

naizu12

Мимокрокодил
Добрый вечер, хочу обратится к Вам за помощью и советом, я не так далек к программированию
У меня проблема в следующем
Делаю свой инсталятор, при установке программы я в config(конфиг) прописываю ip-адрес и порт(net.tcp)
Эту задачу у меня получилось сделать, но сейчас проблема в том что, допустим прописал я ip-адрес и порт, но при изменении данных или обновлении приложения данные не подтягиваются(можно ли как нибудь подтягивать данные(вытягивать) те данные которые я прописал во время установки?
p.s хочу чтобы при изменении (AppModifyPath) мог подтягивать данные которые изначально добавил

Внизу вставляю код какой я написал в инсталяторе

Код:
var
  DBPage: TInputQueryWizardPage;
  
var
  PrimaryServerPage: TInputQueryWizardPage;

function FileReplaceString(ReplaceString: string):boolean;
var
  MyFile : TStrings;
  MyText : string;  
  MyTextPort : string;
begin
  Log('Замена в файле');
  MyFile := TStringList.Create;

  try
    Result := true;

    try
      MyFile.LoadFromFile(ExpandConstant('{app}' + '\MyApp.exe.config'));
      Log('Файл загружен');
      MyText := MyFile.Text;

      { Only save if text has been changed. }
      if StringChangeEx(MyText, 'ipaddress:port', ReplaceString, True) > 0 then
     
      begin;
        Log('Вставлен IP-адрес');
        MyFile.Text := MyText;
        MyFile.SaveToFile(ExpandConstant('{app}' + '\MyAppexe.config'));
        Log('Сохраненный файл');
      end;
    except
      Result := false;
    end;
  finally
    MyFile.Free;
  end;
  Result := True;

end;

[Code]


procedure InitializeWizard;
begin
  PrimaryServerPage :=
    CreateInputQueryPage(
      wpWelcome, 'Строка подключение к серверу', 'Введите данные, затем нажмите кнопку далее.','');
  PrimaryServerPage.Add('IP-адрес:Порт:', False);
  PrimaryServerPage.Add('Порт:', False);
  ////
   
  //PrimaryServerPage.Values[0] := ExpandConstant({#MyServiceUser});
    end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  begin
    Log('Установленный файл, заменяющий IP-адрес');
     FileReplaceString(PrimaryServerPage.Values[0]);
    // FileReplaceString(PrimaryServerPagePort.Values[0]);
    end
    end;[/B]
 

Shegorat

Lord of Madness
Администратор
@naizu12, писать значения ip+порт в реестр при установке. И при запуске инсталлятора подтягивать эти значения.
К сожалению я сейчас не могу предоставить пример. Только завтра. Ну или может кто из участников напишет пример
 

naizu12

Мимокрокодил
@naizu12, писать значения ip+порт в реестр при установке. И при запуске инсталлятора подтягивать эти значения.
К сожалению я сейчас не могу предоставить пример. Только завтра. Ну или может кто из участников напишет пример
Можно пожалуйста пример?
 

Shegorat

Lord of Madness
Администратор
@naizu12,
Код:
[Setup]
AppName=My App
AppVersion=1.0
DefaultDirName={pf}\My App


[code]
var
  DBPage: TInputQueryWizardPage;
  PrimaryServerPage: TInputQueryWizardPage;

function FileReplaceString(ReplaceString: string):boolean;
var
  MyFile : TStrings;
  MyText : string;
  MyTextPort : string;
begin
  Log('Замена в файле');

  MyFile := TStringList.Create;
  try
    if (not FileExists(ExpandConstant('{app}\MyApp.exe.config'))) then
    begin
      Result:= false;
      Exit;
    end;

    MyFile.LoadFromFile(ExpandConstant('{app}\MyApp.exe.config'));
    Log('Файл загружен');
    MyText := MyFile.Text;

    { Only save if text has been changed. }
    if StringChangeEx(MyText, 'ipaddress:port', ReplaceString, True) > 0 then
    begin
        Log('Вставлен IP-адрес');
        MyFile.Text := MyText;
        MyFile.SaveToFile(ExpandConstant('{app}' + '\MyAppexe.config'));
        Log('Сохраненный файл');
    end;
  finally
    MyFile.Free;
  except
    Result := false;
  end;

  Result := True;
end;

procedure InitializeWizard;
var
  StoredValue: String;
begin
  PrimaryServerPage := CreateInputQueryPage(wpWelcome,
                        'Строка подключение к серверу',
                        'Введите данные, затем нажмите кнопку далее.',
                        '');

  PrimaryServerPage.Add('IP-адрес:Порт:', False);
  PrimaryServerPage.Add('Порт:', False);

  // Пытаемся прочитать значение из реестра
  if (RegQueryStringValue(HKCU, 'Software\MyCompany\MyApp', 'IP-Address', StoredValue)) then
    PrimaryServerPage.Values[0] := StoredValue;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
  if CurStep = ssPostInstall then
  begin
    Log('Установленный файл, заменяющий IP-адрес');
    FileReplaceString(PrimaryServerPage.Values[0]);

    // Записываем значение в реестр
    RegWriteStringValue(HKCU, 'Software\MyCompany\MyApp', 'IP-Address', PrimaryServerPage.Values[0])
    //FileReplaceString(PrimaryServerPagePort.Values[0]);
  end
end;

P.S. Еще можно вытягивать данные из самого конфиг файла. Но без знания его структуры написать пример не получится
 
Сверху