将所有设置设置重置为默认值

问题描述:

有什么方法可以将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

所以我已经在[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。当然,这不会恢复任何自定义向导选项/页面。但是你可以自己轻松添加额外的存储/恢复代码。