2010-11-14 712 views
3

是否有某種方法可以通過代碼來設置DefaultDirName,取決於用戶對installtion的某些決定?Inno設置和DefaultDirName

讓我評論: 我有一些代碼是建立兩個不同的系統(使用不同的interops/ocx的和這樣的東西)。我的輸入文件存儲在兩個目錄輸入\ A和輸入\ B。 我希望兩個系統只有一個設置文件。

在安裝文件中,我使用CreateInputOptionPage和2個選項來確定要安裝哪些文件(在每個文件上使用Check)。這工作正常。

但我也有一些ShellExec完成設置,目前使用{app}來例如註冊一些.Net類和ShellExec以取消註冊InitializeUninstall上的.Net類(也使用{app})

安裝程序必須在兩個不同位置安裝軟件(取決於用戶的選擇(例如,c:\因此,在將文件複製到系統之前,有一些指定DefaultDirName的方法,因此我可以在安裝和卸載時使用相同的ShellExec?我可以當然在installtation上爲兩個系統添加相同的ShellExec並使用if來檢查要註冊哪些文件(取決於用戶選擇),但在卸載時我不會有這些信息(用戶選擇),所以我不能註銷.Net類。

謝謝

回答

1

如果需要更改安裝文件夾中的DefaultDirName已初始化之後,這是爲我工作得很好:

procedure CurPageChanged(CurPageID: Integer); 
begin 
    { updates the install path depending on the install type or the entered suffix } 
    if CurPageID = wpSelectDir then begin 
    WizardForm.DirEdit.Text := ExpandConstant('{pf}') + '\MyAppName' + GetAppSuffix(''); 
    end; 
end; 

乾杯 克里斯

+0

'GetAppSuffix('')'的原因是什麼? – 2014-06-03 13:07:08

3

在您的CreateInputOptionPage代碼部分中,您可能可以設置一個值,然後在下面的代碼片段中使用該值。我沒有測試過,但它可能工作。

[Setup] 
DefaultDirName={code:getpath} 

[Code] 
function GetPath(Default: string): string; 
begin 

if (CreateInputOptionPageValue1) then 
Result := ExpandConstant({sd}) + '\path1'; 
else 
Result := ExpandConstant({sd}) + '\path2'; 
end; 
+0

您好,我嘗試使用{代碼:。}爲DefaultDirName,但安裝程序存在錯誤。可能是因爲需要在設置開始之前設置該值,並且只有在顯示第一個對話框後才顯示單選按鈕的值... – 2010-11-15 06:38:47

+1

我以「手動」方式執行了...指定{pf} \ dir爲DefaultDirName(所以我的卸載程序被安裝在那裏),並在Files部分使用Desc:{code:...}和Check()完成所有的工作。似乎工作到目前爲止 – 2010-11-15 06:40:34

+0

是的,'帕拉姆'不能是一個全球性的。 [安裝部分幫助](http://www.jrsoftware.org/ishelp/index.php?topic=setupsection)不討論[部分中的參數]的使用(http://www.jrsoftware.org/ ishelp/index.php?topic = params),但可能會傳遞任何[通用參數](http://www.jrsoftware.org/ishelp/index.php?topic=commonparams)。 FWIW尚未爲安裝部分使用[檢查功能](http://www.jrsoftware.org/ishelp/index.php?topic=scriptcheck)或[安裝之前/之後](http:// www .jrsoftware.org/ishelp/index.php?topic = scriptinstall)參數。 – 2018-01-21 06:31:16