コマンドラインアプリからInno Setupに文字列値を渡す
-
03-07-2019 - |
質問
このシナリオでは、IP/ポート番号で指定されたサーバーからクライアントをダウンロードする Inno Setup を使用するブートストラップであるクライアント インストールを持つクライアント/サーバー アプリがあるということです。UDP ブロードキャストを介してローカル ネットワーク上にサーバーがあるかどうかを検出できるようにしたいと考えており、それを行うコンソール アプリを作成できるようにしたいと考えています。問題は、コンソール アプリからインストーラーに情報をどのように渡すかということです。
戻りコードを取得できますが、それは int のみです。私の知る限り、Inno Setup でファイルを読み取る関数はプリプロセッサーにあるだけなので、コンソール アプリによって実行時に作成されたファイルを読み取ることはできません。私が考えることができる唯一のことは、最初の 4 桁が「.」と の位置である int を返すことです。特に私が文字列を構築するための Inno Setup 構文/関数に詳しくないことを考えると、これはハッキング的で薄っぺらでエラーが発生しやすいように思えます。
助言がありますか?
解決
コマンドラインからパラメーターを読み込む方法がわかりませんが、 LoadStringFromFile
を使用してファイルの内容を読み込むか、 GetIniString
を使用してパラメーターを読み込むことができますiniファイル。
より一般的には、「サポート関数リファレンス」を探します。 Inno Setupヘルプファイル。このページには、すべてのInno関数のリストが表示されます(プリプロセッサは含まれません)。このページが見つからない場合(プリプロセッサに関する情報のみを検索している場合)、間違ったヘルプファイルを探している可能性があります。 Inno Setup Helpの目次はそれほど素晴らしいものではありませんが、インデックスは非常に優れていることに注意してください。
コマンドラインパラメータは、「セットアップコマンドラインパラメータ」ページに記載されています。既存のパラメーターのいずれかを使用して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 に似た拡張言語が含まれています。
たとえば、レジストリを読み取ることができることはわかっていますし、少なくとも一部のフォルダーからはファイルを読み取ることができると確信しています。コンソール モード アプリは、インストーラーの残りの部分で必要な情報を含む一時ファイルを書き込んだり、1 つ以上のレジストリ キーをドロップしたりすることができ、それをスクリプト環境から適切なセットアップ スクリプトに返すことができます。インストーラーは、後で一時ファイルやキーをクリーンアップすることもできます。
Inno Setupマニュアルから:
{param: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.
例:
[セットアップ] AppId = ... AppName = {param:exe_name | xyz} .exe
その他:www downloadatoz com / manual / in / inno-setup / topic_consts.htm
上記の匿名の回答は投票する必要があります。
スクリプトで名前でパラメーターを参照するだけで、インストーラーに引数を渡すことができました。
{param:filePath|abc}
そして、インストーラーを呼び出すときに、必要な形式を使用してパラメーター値を渡します:
MyInnoSetup.exe /filePath=../foo.exe