Передача строкового значения в Inno Setup из приложения командной строки

StackOverflow https://stackoverflow.com/questions/612609

  •  03-07-2019
  •  | 
  •  

Вопрос

Сценарий заключается в том, что у нас есть клиент-серверное приложение, установка клиента которого является загрузчиком с использованием Inno Setup, который загружает клиент с сервера, указанного по IP / номеру порта.Мы хотели бы иметь возможность определять, есть ли сервер в локальной сети с помощью широковещательной передачи UDP, и можем написать консольное приложение, которое это делает.Проблема в том, как нам передать информацию из консольного приложения установщику?

Я могу записать код возврата, но это может быть только int.Насколько я могу судить, единственные функции для чтения файла в Inno Setup находятся в препроцессоре, поэтому мы не можем прочитать файл, созданный во время выполнения консольным приложением.Единственное, что я могу придумать, это вернуть int, где первые 4 цифры - это позиция '.'s и :перед портированием, а затем проанализируйте значение, которое кажется хакерским, надуманным и подверженным ошибкам, особенно учитывая, что я не очень хорошо знаком с синтаксисом / функциями Inno Setup для построения строки.

Есть какие-нибудь предложения?

Это было полезно?

Решение

Не знаю, как загрузить параметр из командной строки, но вы можете использовать LoadStringFromFile для загрузки содержимого файла или GetIniString для чтения параметра из INI-файл.

В общем, ищите " Справочник по функциям поддержки " в файле справки Inno Setup. Эта страница предоставит вам список всех функций Inno (не включая препроцессор). Если вы не можете найти эту страницу (если вы только находите информацию о препроцессоре), возможно, вы искали неправильный файл справки. Обратите внимание, что содержание справки Inno Setup не так уж и велико, но индекс очень хорош.

Параметры командной строки задокументированы на странице «Настройка параметров командной строки». Вполне возможно, что вы сможете обмануть Inno, используя один из существующих параметров, но использование INI-файла кажется наиболее простым подходом.

Другие советы

Если вы хотите проанализировать аргументы командной строки из кода в Inno Setup, используйте метод, подобный этому. Просто вызовите установщик из командной строки следующим образом:

c:\MyInstallDirectory>MyInnoSetup.exe -myParam parameterValue

Затем вы можете вызывать GetCommandLineParam следующим образом:

myVariable := GetCommandLineParam('-myParam');
{ ================================================================== }
{ Allows for standard command line parsing assuming a key/value organization }

function GetCommandlineParam (inParam: String):String; 
var 
  LoopVar : Integer; 
  BreakLoop : Boolean; 
begin 
  { Init the variable to known values } 
  LoopVar :=0; 
  Result := ''; 
  BreakLoop := False; 

  { Loop through the passed in array to find the parameter } 
  while ( (LoopVar < ParamCount) and 
      (not BreakLoop) ) do 
  begin 
    { Determine if the looked for parameter is the next value } 
    if ( (ParamStr(LoopVar) = inParam) and 
       ( (LoopVar+1) < ParamCount )) then 
    begin 
      { Set the return result equal to the next command line parameter } 
      Result := ParamStr(LoopVar+1); 

      { Break the loop } 
      BreakLoop := True; 
    end 

    { Increment the loop variable } 
    LoopVar := LoopVar + 1; 
  end; 
end; 

Надеюсь, это поможет ...

InnoSetup включает в себя интерпретируемый Pascal-подобный язык расширений, который может использоваться во многих случаях во время выполнения программы установки.

Например, я знаю, что он может читать реестр, и я вполне уверен, что он может читать файлы, по крайней мере, из некоторых папок. Ваше приложение в режиме консоли может записать временный файл или удалить один или несколько ключей реестра, содержащих информацию, необходимую для остальной части установщика, и которую можно вернуть из среды сценариев в собственно сценарий установки. Установщик может даже позже очистить временный файл и / или ключи.

Из руководства по настройке Inno:

{параметр:имя_параметра|Значение по умолчанию}

Embeds a command line parameter value.
    * ParamName specifies the name of the command line parameter to read from.
    * DefaultValue determines the string to embed if the specified command 
      line parameter does not exist, or its value could not be determined.

Пример:

[Настройка] AppID=...AppName={параметр:exe_name|xyz}.exe

Еще:www скачатьatoz com/manual/in/inno-setup/topic_consts.htm

Приведенный выше анонимный ответ должен быть отклонен.

Мне удалось передать аргумент установщику, просто указав в сценарии параметр по имени:

{param:filePath|abc}

А затем при вызове установщика передайте значение параметра в нужном формате:

MyInnoSetup.exe /filePath=../foo.exe
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top