修复Inno Setup中Revit版本关联安装路径缺失年份的问题
问题原因
你的Inno Setup脚本中,DefaultDirName绑定的GetInstallPath函数会在安装程序启动初期就执行,此时用户还未选择Revit版本,SelectedVersion为空字符串,导致最终路径缺失年份后缀。而原有的CurPageChanged逻辑仅在用户切换到版本选择页时赋值,此时安装路径已经初始化完成,不会自动更新。
解决方案
通过调整事件逻辑,确保用户选择版本后主动更新安装路径,同时设置合理的初始默认版本:
[Setup] AppName=AedasHomesAddin AppVersion=1.0 DefaultDirName={code:GetInstallPath} DefaultGroupName=AedasHomesAddin OutputDir=Output OutputBaseFilename=AedasHomesAddinSetup Compression=lzma SolidCompression=yes DisableDirPage=yes [Code] var SelectedVersion: String; Page: TInputOptionWizardPage; function GetInstallPath(Param: String): String; begin // 根据选中年份构建安装路径 Result := ExpandConstant('{commonappdata}\Autodesk\Revit\Addins\' + SelectedVersion); end; procedure InitializeWizard; begin // 创建版本选择自定义页面 Page := CreateInputOptionPage(wpWelcome, 'Select Revit Version', 'Choose the Revit version to install:', 'Select the version:', True, False); Page.Add('Revit 2019'); Page.Add('Revit 2020'); Page.Add('Revit 2021'); Page.Add('Revit 2022'); Page.Add('Revit 2023'); Page.Add('Revit 2024'); // 设置默认版本,避免初始路径缺失年份 SelectedVersion := '2023'; Page.SelectedValueIndex := 4; // 默认选中2023选项 end; function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; // 用户在版本选择页点击下一步时,更新选中版本并同步安装路径 if CurPageID = Page.ID then begin case Page.SelectedValueIndex of 0: SelectedVersion := '2019'; 1: SelectedVersion := '2020'; 2: SelectedVersion := '2021'; 3: SelectedVersion := '2022'; 4: SelectedVersion := '2023'; 5: SelectedVersion := '2024'; end; // 手动更新安装路径控件的值 WizardForm.DirEdit.Text := GetInstallPath(''); end; end; // 用户返回版本选择页时,自动选中之前选择的版本 procedure CurPageChanged(CurPageID: Integer); begin if CurPageID = Page.ID then begin case SelectedVersion of '2019': Page.SelectedValueIndex := 0; '2020': Page.SelectedValueIndex := 1; '2021': Page.SelectedValueIndex := 2; '2022': Page.SelectedValueIndex := 3; '2023': Page.SelectedValueIndex := 4; '2024': Page.SelectedValueIndex := 5; end; end; end; [Files] Source: "C:\Users\jmore\Documentos\Programacion REVIT\C# Jorge\AedasHomesAddin\bin\Debug\AedasHomesAddin.dll"; DestDir: "{code:GetInstallPath}" Source: "C:\Users\jmore\Documentos\Programacion REVIT\C# Jorge\AedasHomesAddin\bin\Debug\AedasManifest.addin"; DestDir: "{code:GetInstallPath}" Source: "C:\Users\jmore\Documentos\Programacion REVIT\C# Jorge\AedasHomesAddin\img\AedasHomes.png"; DestDir: "{code:GetInstallPath}"
修改说明
- 初始默认版本:在
InitializeWizard中设置默认版本并选中对应选项,确保安装程序启动时路径就包含年份,避免初始路径异常。 - NextButtonClick事件:替换原
CurPageChanged的赋值逻辑,在用户确认选择(点击下一步)时才更新版本号,并手动修改安装路径控件的显示值,确保路径同步更新。 - 返回页同步:添加返回版本选择页时的选中状态恢复逻辑,提升用户操作体验。
内容的提问来源于stack exchange,提问作者M0nchit0
相关产品推荐
相关产品推荐

