簡體   English   中英

如何在Inno Setup中安裝之前更改defaultdirname參數?

[英]How to change defaultdirname parameter just before Install in Inno Setup?

我想在ssInstall部分中更改defaultdirname參數。 我怎樣才能做到這一點? 是否有設置[設置]參數的功能。

可以使用以下全局對象:類型為TMainForm的MainForm,類型為TWizardForm的WizardForm和類型為TUninstallProgressForm的UninstallProgressForm,以及一個特殊常量:類型為TControl.Cursor的crHand。

如果你想在向導中設置默認目錄,只需像在普通的delphi代碼中那樣訪問它的組件。

例如,將目錄設置為自定義值:

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

要讀取該值,您可以使用WizardDirValue函數。

我說'只是訪問'......但是花了我一個小時來弄明白;)

似乎沒有辦法通過腳本來改變腳本常量。
我認為你最好的辦法是修改[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;

安裝應用程序正在以靜默模式從另一個設置啟動。 它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM