Передача строкового значения в 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