Как изменить функцию LoadStringFromFile с Inno Setup 5 на Inno Setup 6 и заставить ее работать - PullRequest
1 голос
/ 22 июня 2019

Я пытаюсь преобразовать свой код из Inno Setup 5 в 6. Я не могу заставить работать следующий код.

Мой старый рабочий код был:

procedure CurStepChanged(CurStep: TSetupStep);
var
  FileData: String;
begin
  if (CurStep = ssInstall) then
  begin
    LoadStringFromFile(ExpandConstant('{code:GetSvcDir|2}\PostSteps.ps1'), FileData);
    StringChange(FileData, 'ScvProdPath', ExpandConstant('{code:GetSvcDir|0}\'));
    StringChange(FileData, 'ProdSitePath', ExpandConstant('{code:GetWebDir|0}\'));
    StringChange(FileData, 'ProdAuthPath', ExpandConstant('{code:GetWebDir|1}\'));
    StringChange(FileData, '444', ExpandConstant('{code:GetConfig|4}'));
    StringChange(FileData, '8732', ExpandConstant('{code:GetConfig|3}'));
    StringChange(FileData, 'RV_ExceptionsPath', ExpandConstant('{code:GetSvcDir|2}\RVExceptions'));
    SaveStringToFile(ExpandConstant('{code:GetSvcDir|2}\PostSteps.ps1'), FileData, False);
  end;
end;

Я пыталсячтобы изменить его после прочтения некоторых подобных статей, но я не могу заставить его работать.

procedure CurStepChanged(CurStep: TSetupStep);
var
  FileData: AnsiString;
  UnicodeStr: string;
begin
  if (CurStep = ssInstall) then
  begin
    LoadStringFromFile(ExpandConstant('{code:GetSvcDir|2}\PostSteps.ps1'), FileData);
    StringChangeEx(UnicodeStr, 'ScvProdPath', ExpandConstant('{code:GetSvcDir|0}\'), True);
    StringChangeEx(UnicodeStr, 'ProdSitePath', ExpandConstant('{code:GetWebDir|0}\'), True);
    StringChangeEx(UnicodeStr, 'ProdAuthPath', ExpandConstant('{code:GetWebDir|1}\'), True);
    StringChangeEx(UnicodeStr, '444', ExpandConstant('{code:GetConfig|4}'), True);
    StringChangeEx(UnicodeStr, '8732', ExpandConstant('{code:GetConfig|3}'), True);
    StringChangeEx(UnicodeStr, 'RV_ExceptionsPath', ExpandConstant('{code:GetSvcDir|2}\RVExceptions'), True);
    SaveStringToFile(ExpandConstant('{code:GetSvcDir|2}\PostSteps.ps1'), FileData, False);
  end;
end;

Текст внутри файла - английский, а не что-то особенное.Не могли бы вы помочь мне?

1 Ответ

1 голос
/ 22 июня 2019

Как я уже прокомментировал на ваш предыдущий вопрос, речь не идет об обновлении Inno Setup 5 до Inno Setup 6. Inno Setup 6 совместима с кодом Inno Setup 5.Ваша проблема в том, что вы использовали устаревшую версию Inno Setup 5 от Ansi, а Inno Setup 6 имеет только версию Unicode.Вы должны были использовать Unicode-версию даже с Inno Setup 5. См. Обновление с Ansi до Unicode-версии Inno Setup (любые недостатки)

В общем, вы не должны использовать AnsiString.Это наследие версии Анси.С AnsiString ваш код потерпит неудачу, если пользователь использует не-ASCII-символы в путях.

Итак, в конце ваш вопрос будет более или менее повторять:
InnoПрограмма установки заменит строку в файле UTF-8 без спецификации


В любом случае, чтобы ответить на ваш буквальный вопрос: вы никогда не назначаете переменную UnicodeStr.

Также как и сВаш предыдущий вопрос: не используйте ExpandConstant для вызова функции.

procedure CurStepChanged(CurStep: TSetupStep);
var
  FileData: AnsiString;
  UnicodeStr: string;
begin
  if (CurStep = ssInstall) then
  begin
    LoadStringFromFile(GetSvcDir('2') + '\PostSteps.ps1', FileData);
    UnicodeStr := FileData;
    StringChangeEx(UnicodeStr, 'ScvProdPath', GetSvcDir('0') + '\', True);
    StringChangeEx(UnicodeStr, 'ProdSitePath', GetWebDir('0') + '\', True);
    StringChangeEx(UnicodeStr, 'ProdAuthPath', GetWebDir('1') + '\', True);
    StringChangeEx(UnicodeStr, '444', GetConfig('4'), True);
    StringChangeEx(UnicodeStr, '8732', GetConfig('3'), True);
    StringChangeEx(UnicodeStr, 'RV_ExceptionsPath', GetSvcDir('2') + '\RVExceptions', True);
    FileData := UnicodeStr;
    SaveStringToFile(GetSvcDir('2') + '\PostSteps.ps1', FileData, False);
  end;
end;

(не проверено)

И вам, вероятно, даже тогда не нужны функции -Вы можете вставить их в приведенный выше код, если только вы не используете их в других местах.

Вы также найдете AddBackslash function полезной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...