如何让Inno Setup桌面图标显示用户选择的安装目录名称?
解决方案
要实现桌面图标名称自动包含{app}对应的目录名称,你可以通过Inno Setup的自定义脚本函数动态生成图标名称,具体修改如下:
1. 修改[Icons]段配置
将原硬编码的图标名称替换为调用自定义函数的动态值:
[Icons] Name: "{userdesktop}\{code:GetDesktopIconName}"; Filename: "{app}\program.exe"; Tasks: desktopicon
2. 在[Code]段添加自定义函数
添加用于提取{app}目录名并生成图标名称的函数:
[Code] function GetDesktopIconName(Param: string): string; var AppDirName: string; begin // 提取{app}路径的最后一级目录名称 AppDirName := ExtractFileName(ExpandConstant('{app}')); // 处理路径以反斜杠结尾的特殊情况 if AppDirName = '' then AppDirName := ExtractFileName(ExpandConstant('{app}\..')); // 拼接最终图标名称格式 Result := 'program - ' + AppDirName; end;
3. 冗余代码清理
原[Code]段中的NextButtonClick函数可以删除,因为Inno Setup默认会自动创建不存在的安装目录,无需手动处理目录创建逻辑。
修改后的完整代码
[Setup] AppName=Test AppVersion=1.0 DefaultDirName={userdocs}\Testprogramdir AlwaysShowDirOnReadyPage = yes DisableDirPage = no OutputDir=Output DefaultGroupName=Testgroup PrivilegesRequired = lowest OutputBaseFilename =Testsetupfile [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked [Files] Source: "program.exe"; DestDir: "{app}" Source: "readme.txt"; Flags: onlyifdoesntexist; DestDir: "{app}" [Icons] Name: "{userdesktop}\{code:GetDesktopIconName}"; Filename: "{app}\program.exe"; Tasks: desktopicon [Code] function GetDesktopIconName(Param: string): string; var AppDirName: string; begin AppDirName := ExtractFileName(ExpandConstant('{app}')); if AppDirName = '' then AppDirName := ExtractFileName(ExpandConstant('{app}\..')); Result := 'program - ' + AppDirName; end;
效果说明
- 当用户选择安装目录为
{userdocs}\Test-John时,桌面图标名称会自动变成program - Test-John - 若使用默认路径
{userdocs}\Testprogramdir,图标名称则为program - Testprogramdir - 完全支持多用户多次安装,每个不同的安装目录都会生成对应名称的桌面图标
内容的提问来源于stack exchange,提问作者tfv
相关产品推荐
相关产品推荐

