2010-08-21 145 views
0

有什麼方法可以將Inno Setup中的所有設置設置「重置」爲默認值?將所有設置設置重置爲默認值

我想補充Reset options按鈕,進入我的設置,然後點擊該按鈕,如果用戶沒有改變任何事情將設置所有選項爲相同的值,但點擊剛剛NextNextInstall

但請注意,這些值比強麥小幅compile-time default values不同,例如AppDir可以默認爲DefaultDirNamewizardForm.PrevAppDir。因此,我希望所有的選項默認爲dynamic defaults,這對於AppDir是:

if wizardForm.PrevAppDir <> '' then 
    result := wizardForm.PrevAppDir 
else 
    result := '{#SetupSetting("DefaultDirName")}'; 

我希望你明白我想要完成的任務。如果應用程序已安裝,則將所有選項設置爲最新安裝值(如果未安裝該應用程序),然後將其設置爲默認值。

我知道安裝程序在啓動時會執行所有這些操作,但是我想添加一個按鈕,這會將用戶所做的所有更改(例如wpSelectComponents)恢復爲其設置啓動時的默認設置。我怎樣才能做到這一點?

+0

重新啓動setup.exe?那就是,ShellExecute(setup.exe)然後終止setup.exe的當前實例? – 2010-08-21 14:38:12

+0

是的,這可以工作,但它是一個有點討厭的解決方案。對於最終用戶,單擊「重置設置」會導致嚮導窗體消失並重新出現。這當然是意想不到的。但我仍然希望有一些方法可以在不重新啓動整個安裝過程的情況下進行。 – Paya 2010-08-21 15:04:15

回答

0

所以我已經在[Code]中解決了這個問題。所有信息都可以通過全局對象WizardForm訪問,所以當第一次顯示配置頁面時,可以將這些值保存到變量中。然後,無論何時需要重置配置,只需通過WizardForm重新恢復所有設置。我不會在整個代碼粘貼在這裏,因爲它是有點長(172 LOC),但只是部分AppDir

[Code] 
var storedAppDir : string; 
    hasAppDir : boolean; 

procedure OnAppDir; 
begin 
    if not hasAppDir then begin 
     storedAppDir := wizardForm.DirEdit.Text; 
     hasAppDir := true; 
    end; 
end; 

procedure RestoreAppDir; 
begin 
    if hasAppDir then begin 
     wizardForm.DirEdit.Text := storedAppDir; 
    end; 
end; 

procedure InitializeDefaults; 
begin 
    //hasUserInfo := false; 
    hasAppDir := false; 
    //hasComponents := false; 
    //hasProgramGroup := false; 
    //hasTasks := false; 
end; 

procedure RestoreDefaults; 
begin 
    //RestoreUserInfo; 
    RestoreAppDir; 
    //RestoreComponents; 
    //RestoreProgramGroup; 
    //RestoreTasks; 
end; 

procedure DefaultsCurPageChanged(CurPageID : integer); 
begin 
    case CurPageID of 
     //wpUserInfo: OnUserInfo; 
     wpSelectDir: OnAppDir; 
     //wpSelectComponents: OnComponents; 
     //wpSelectProgramGroup: OnProgramGroup; 
     //wpSelectTasks: OnTasks; 
    end; 
end; 

procedure InitializeWizard; 
begin 
    InitializeDefaults; 
end; 

procedure CurPageChanged(CurPageID : Integer); 
begin 
    DefaultsCurPageChanged(CurPageID); 
end; 

而當你需要重置所有的配置,只需要調用RestoreDefaults。當然,這不會恢復任何自定義嚮導選項/頁面。但是你可以自己輕鬆添加額外的存儲/恢復代碼。