[英]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.