1

私は InnoSetup プロジェクトを持っています。セットアップ exe に送信されたコマンド ライン パラメータに従って InfoAfterFile を設定できるようにしたいと考えています。そうする方法はありますか?この場合に機能する「チェック」パラメーターのようなものはありますか?

4

1 に答える 1

2

InfoAfterFile実行時にディレクティブに値を割り当てることはできません。その値は、出力セットアップにコンパイルされるファイルを指定するため、このディレクティブの値はコンパイル時に認識されている必要があります。ただし、ファイルを手動でInfoAfterMemoコントロールにロードできます。-iaf次の例は、コマンド ライン パラメータが存在し、ファイルが存在する場合にのみ、コマンド ライン パラメータで指定されたファイルをロードする方法を示しています。

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
InfoAfterFile=c:\DefaultFileToBeDisplayed.txt

[Code]
const
  InfoAfterFileParam = '-iaf';

function TryGetInfoAfterFileParam(var FileName: string): Boolean;
var
  S: string;
  I: Integer;
  Index: Integer;
begin
  // initialize result
  Result := False;
  // iterate all the command line parameters
  for I := 1 to ParamCount do
  begin
    // store the current parameter to the local variable
    S := ParamStr(I);
    // try to find the position of the substring specified by the
    // InfoAfterFileParam constant; in this example we're looking
    // for the "-iaf" string in the current parameter
    Index := Pos(InfoAfterFileParam, S);
    // if the InfoAfterFileParam constant string was found in the
    // current parameter, then...
    if Index = 1 then
    begin
      // strip out the InfoAfterFileParam constant string from the
      // parameter string, so we get only file name
      Delete(S, Index, Length(InfoAfterFileParam));
      // now trim the spaces from rest of the string, which is the
      // file name
      S := Trim(S);
      // check if the file pointed by the file name we got exists;
      // if so, then return True for this function call and assign
      // the output file name to the output parameter
      if FileExists(S) then
      begin
        Result := True;
        FileName := S;
      end;
      // we've found the parameter starting with InfoAfterFileParam
      // constant string, so let's exit the function
      Exit;
    end;
  end;
end;

procedure InitializeWizard;
var
  FileName: string;
begin
  // when the parameter was found and the file to be loaded exists,
  // then load it to the InfoAfterMemo control
  if TryGetInfoAfterFileParam(FileName) then
    WizardForm.InfoAfterMemo.Lines.LoadFromFile(FileName);
end;

InfoAfterFileディレクティブを指定する必要があることに注意してください。そうしないと、ページが表示されません。また、 で始まるコマンド ライン パラメータを探している-iafので、eg-iafxパラメータを使用する場合は、このコードを実際に変更する必要があることに注意してください。コマンドラインからのこのようなセットアップのサンプル呼び出しは次のとおりです。

Setup.exe -iaf"C:\SomeFolder\SomeFileToBeShownAsInfoAfter.txt"
于 2013-11-05T12:36:31.170 に答える