5

ssInstall 部分の defaultdirname パラメータを変更したい。どうやってやるの?[セットアップ]パラメータを設定する機能はありますか?

4

3 に答える 3

11

次のグローバル オブジェクトを使用できます。タイプ TMainForm の MainForm、タイプ TWizardForm の WizardForm、タイプ TUninstallProgressForm の UninstallProgressForm、および 1 つの特別な定数: タイプ TControl.Cursor の crHand。

ウィザードでデフォルト ディレクトリを設定したい場合は、通常の Delphi コードで行うように、そのコンポーネントにアクセスするだけです。

たとえば、ディレクトリをカスタム値に設定します。

WizardForm.DirEdit.Text := 'c:\test';

その値を読み取るには、WizardDirValue 関数を使用できます。

私は「アクセスするだけ」と言いますが、理解するのに1時間かかりました;)

于 2009-09-21T20:35:30.923 に答える
3

スクリプトを使用してスクリプト定数を変更する方法はないようです。[Files]セクション
の各エントリのターゲット ディレクトリを変更するのが最善の策だと思います。

[Files]
Source: "MYPROG.EXE"; DestDir: "{code:NewTargetDir}"

そして、次のように新しいインストール ディレクトリを取得します。

[Code]
function NewTargetDir(Param: String): String;
begin
  Result := ExpandConstant('{app}') + '\MySubDir';
end;

ファイルが実際にコピーされる直前にNewTargetDir関数が呼び出されるため、これは機能するはずです。

ただし、アプローチを再考する必要があると思います。最初にユーザーにインストール先のディレクトリを指定するように求め、次に実際に別のディレクトリにインストールすることは、意図しているように見えますが、間違った方法です.IMO. ユーザーが指定したディレクトリとは別のディレクトリにインストールするやむを得ない理由が本当にありますか? その上、私のコード例の結果は、次のように指定することでも同様に達成できます

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}\MySubDir"

スクリプトを作成する必要はありません。疑わしい場合は、より簡単な解決策を選択してください。

于 2009-08-19T20:32:51.670 に答える
2

セットアップアプリがコマンドラインからインストールパスを受信して​​いるという同様の状況があります。Jonxによって提案されたソリューションを使用しています:

WizardForm.DirEdit.Text := 'c:\test';

例:

function CompareParameter(param, expected: String): Boolean;
begin
  Result := False;
  if Length(param) >= Length(expected) then
  begin
    if CompareText(Copy(param, 1, Length(expected)), expected) = 0 then
    begin
      Result := True;
    end;
  end;
end;

function GetParameter(expectedParam: String): String;
var
  i : LongInt;
begin
  Result := '';
  for i := 0 to ParamCount() do
  begin
    if CompareParameter(ParamStr(i), '/' + expectedParam + '=') then
    begin
      Result := Copy(ParamStr(i), Length(expectedParam) + 3, Length(ParamStr(i)));
      break;
    end;
  end;
end;

procedure InitializeWizard();
var
  newInstallFolder: String;
begin
  newInstallFolder := GetParameter('INSTALL_FOLDER');
  if Length(newInstallFolder) > 2 then
  begin
    if Copy(newInstallFolder, 1, 1) = '"' then
      newInstallFolder := Copy(newInstallFolder, 2, Length(newInstallFolder) - 2)
    if Length(newInstallFolder) > 1 then
      WizardForm.DirEdit.Text := newInstallFolder;
  end;
end;

セットアップアプリは、サイレントモードで別のセットアップから開始されています。それは私にとってはうまくいきました。

于 2009-10-28T15:35:31.940 に答える