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

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

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

Какие-либо предложения?

6 ответов

Решение

Не знаю, как загрузить параметр из командной строки, но вы можете использовать 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-подобный язык расширений, который может использоваться во многих случаях во время выполнения программы установки.

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

Выше анонимный ответ должен быть проголосовал.

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

{param:filePath|abc}

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

MyInnoSetup.exe /filePath=../foo.exe

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

{Пары:ParamName|DefaultValue}

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.

Пример:

[Setup] AppId =... AppName = {param: exe_name | xyz}.exe

Больше: www downloadatoz com/manual/in/inno-setup/topic_consts.htm

Другие вопросы по тегам