ssInstall 部分の defaultdirname パラメータを変更したい。どうやってやるの?[セットアップ]パラメータを設定する機能はありますか?
3 に答える
次のグローバル オブジェクトを使用できます。タイプ TMainForm の MainForm、タイプ TWizardForm の WizardForm、タイプ TUninstallProgressForm の UninstallProgressForm、および 1 つの特別な定数: タイプ TControl.Cursor の crHand。
ウィザードでデフォルト ディレクトリを設定したい場合は、通常の Delphi コードで行うように、そのコンポーネントにアクセスするだけです。
たとえば、ディレクトリをカスタム値に設定します。
WizardForm.DirEdit.Text := 'c:\test';
その値を読み取るには、WizardDirValue 関数を使用できます。
私は「アクセスするだけ」と言いますが、理解するのに1時間かかりました;)
スクリプトを使用してスクリプト定数を変更する方法はないようです。[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"
スクリプトを作成する必要はありません。疑わしい場合は、より簡単な解決策を選択してください。
セットアップアプリがコマンドラインからインストールパスを受信しているという同様の状況があります。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;
セットアップアプリは、サイレントモードで別のセットアップから開始されています。それは私にとってはうまくいきました。