Передача строкового значения в Inno Setup из приложения командной строки - PullRequest
2 голосов
/ 05 марта 2009

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

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

Есть предложения?

Ответы [ 6 ]

5 голосов
/ 03 марта 2011

Если вы хотите проанализировать аргументы командной строки из кода в 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; 

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

3 голосов
/ 05 марта 2009

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

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

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

2 голосов
/ 09 октября 2009
1 голос
/ 06 марта 2009

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

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

0 голосов
/ 12 июня 2014

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

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

{param:filePath|abc}

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

MyInnoSetup.exe /filePath=../foo.exe
0 голосов
/ 20 мая 2009

Из руководства по установке 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 = {параметр: exe_name | хуг} .exe

Подробнее: www downloadatoz com / manual / in / inno-setup / topic_consts.htm

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