You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:33:27