问题描述

Inno Setup 是一款十分强大的 Windows 安装程序制作软件,可以通过编写并编译 iss 脚本来创建安装包。之前都是直接将 Pyinstaller 生成的文件夹压缩为 zip 格式来发布,但是这样做存在一些问题,比如没有桌面和开始菜单快捷方式,没法关联支持的文件格式。而通过 Inno Setup 生成的安装包可以帮我们解决这些问题。

问题解决

关联文件格式

要想实现关联文件格式的功能,我们需要修改注册表,先来观察一下与 mp3 格式相关的注册表格式:

可以看到里面有一个名为 WMP11.AssocFile.MP3,这个键说明 Win11 的媒体播放器支持 mp3 格式,我们只需在这里面创建一个新的键,比如 Groove.AssocFile.mp3,就能向系统声明我们的软件也支持 mp3 格式。

当我们把光标移到 mp3 文件上时,工具提示上会显示一些文件信息,比如项目类型、大小和创建时间,我们同样可以通过操作注册表来修改项目类型信息。

由于我们先前声明的键名是 Groove.AssocFile.mp3,所以可以在 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes 下新建一个名为 Groove.AssocFile.mp3 的项,并创建一个键名为空,键值为 MP3 Audio File 的键值对,这样当我们把 mp3 文件关联到自己的软件上时,工具提示上的项目类型显示的就会是 MP3 Audio File 而非 MP3 文件

接下来在 Groove.AssocFile.mp3 中新建 DefaultIcon 项,新建一个值为 图标文件路径,0 的键值对,这样就能自定义文件图标了。

最后当我们双击文件时,系统会通过使用默认的关联程序来打开此文件。假设我们已经关联了 mp3 文件类型,要想让系统使用我们的程序打开这个文件,就需要向系统说明可执行文件的路径,同时这个可执行文件要接受一个被打开的文件路径参数。只需在 Groove.AssocFile.mp3 下新建 shell\open\command 项,添加值为 "可执行文件路径" "%1" 的键值对即可。

可以在 iss 脚本中添加下述代码来实现上述过程:

#define MyAppAssocName "Groove.AssocFile"

[Registry]
; .mp3 format
Root: HKA; Subkey: "Software\Classes\.mp3\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocName}.mp3"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.mp3"; ValueType: string; ValueName: ""; ValueData: "MP3 Audio File"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.mp3\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyFileExtensionIcon},0"
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.mp3\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1""" Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}\SupportedTypes"; ValueType: string; ValueName: ".myp"; ValueData: ""

如果想要添加更多的关联文件格式,只需重复 [Registry]mp3 的写法即可,比如关联 flac 格式:

; .flac format
Root: HKA; Subkey: "Software\Classes\.flac\OpenWithProgids"; ValueType: string; ValueName: "{#MyAppAssocName}.flac"; ValueData: ""; Flags: uninsdeletevalue
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.flac"; ValueType: string; ValueName: ""; ValueData: "Free Lossless Audio Codec File"; Flags: uninsdeletekey
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.flac\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\{#MyFileExtensionIcon},0"
Root: HKA; Subkey: "Software\Classes\{#MyAppAssocName}.flac\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExeName}"" ""%1"""

修改打开方式菜单中的名字

如果只完成了上述步骤,会发现打开方式菜单中显示的是可执行文件的文件名,比如 Groove.exe,如果想改为下图所示的 Groove Music Player,仍需要修改注册表。

可执行文件名.exe 项中添加键名为 FriendlyAppName,值为 Groove Music Player 的键值对即可。

上述过程对应的 iss 代码是:

Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}"; ValueType: string; ValueName: ""; ValueData: "Groove Music Player"
Root: HKA; Subkey: "Software\Classes\Applications\{#MyAppExeName}"; ValueType: string; ValueName: "FriendlyAppName"; ValueData: "Groove Music Player"

后记

至此,在 Inno Setup 中添加文件关联的方式就介绍完毕了,上述过程提及的安装包可以从 https://github.com/zhiyiYo/Groove/releases/latest 下载,以上~

如何在 Inno Setup 中关联多种文件格式的更多相关文章

  1. 如何在 Inno Setup 中执行命令行的命令

    Pascal Scripting: Exec Prototype: function Exec(const Filename, Params, WorkingDir: String; const Sh ...

  2. 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤

    原文 http://www.cnblogs.com/2356/archive/2009/10/27/1590565.html 在Unicode版Inno Setup中使用ISSkin给安装程序添加皮肤 ...

  3. Inno setup中定制安装路径

    我的程序修改了安装界面,所以我的界面中提供了更改安装路径的方法. 用户修改后的路径会被传回inno setup脚本,脚本中需要做的事情如下: 1,写一个函数,来返回新的安装路径,如: function ...

  4. 在Unicode版Inno Setup中使用ISSkin

    ISSkin是Code jock 公司出品的Inno Setup 皮肤插件,用于为Inno制作的安装程序提供皮肤功能. 自Delphi发布2009之后,Inno Setup 开始出现支持Unicode ...

  5. Inno setup 中 执行参数传递注意的地方

    Inno setup编译器编译使用pascal脚本编写的打包代码,其中Run段可以执行某些特定的程序,遇到一个bat批处理文件传递参数的问题,记录如下 1: [Run] 2: Filename: &q ...

  6. 在 Inno Setup 中实现倒数N秒后激活按钮

    原文 http://restools.hanzify.org/article.asp?id=67 timectrl.dll 为一个 6.5 KB 的按钮激活时间控制插件.  引用来自 Example1 ...

  7. Inno Setup中多语言时,使用占位符填充

    如在: [CustomMessages] CreateDesktopIcon=Create a Desktop icon NameAndVersion=%1 version %2 普通的获取Custo ...

  8. Inno Setup中做补丁通过注册表获取原程序安装目录

    今天找VM补丁看到的,是个innosetup封装的,所以习惯性的喜欢去看人家的iss文件是怎么编写的. DefaultDirName={reg:HKLM\SOFTWARE\VMware%2c%20In ...

  9. Inno Setup使用上的几个问题

    Inno Setup使用上的几个问题 分类: Install Setup 2013-02-02 15:48 1781人阅读 评论(0) 收藏 举报 Inno Setup使用上的几个问题: [问题一:I ...

随机推荐

  1. C/C++内存泄漏检测方法

    1. 内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果. 2. 检测代码 使用链 ...

  2. Python数据科学手册-机器学习之模型验证

    模型验证 model validation 就是在选择 模型 和 超参数 之后.通过对训练数据进行学习.对比模型对 已知 数据的预测值和实际值 的差异. 错误的模型验证方法. 用同一套数据训练 和 评 ...

  3. Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析

    一.SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程. 使用了 Spring 框架后已经简化了我 ...

  4. 关于使用kubeoperator搭建k8s集群使用containerd作为容器运行时,从自己搭建的habor仓库拉取镜像的有关说明

    1.kubepi界面添加habor仓库信息,并授权给k8s集群 这一步的操作是当在工作负载选择从harbor仓库拉取镜像时会自动创建有关的secrets信息,从而不用事先手动创建了(有别于kuboar ...

  5. Elasticsearch 8.X 节点角色划分深入详解

    文章转载自: https://mp.weixin.qq.com/s/3486iH3VH7TV6lza-a7adQ 0.问题引出 如果你的 Elasticsearch 集群是 7.9 之前的版本,在配置 ...

  6. 使用二进制文件部署Etcd集群

    Etcd 是一个分布式键值存储系统,Kubernetes使用Etcd进行数据存储,所以先准备一个Etcd数据库,为解决Etcd单点故障,应采用集群方式部署,这里使用3台组建集群,可容忍1台机器故障,当 ...

  7. Docker Compose的安装及命令补全

    安装Compose Compose的安装有多种方式,例如通过shell安装.通过pip安装.以及将compose作为容器安装等等.本文讲解通过shell安装的方式.其他安装方式如有兴趣,可以查看Doc ...

  8. 使用 kubectl 执行 Rolling Update(滚动更新)

    Rolling Update滚动更新 通过使用新版本的 Pod 逐步替代旧版本的 Pod 来实现 Deployment 的更新,从而实现零停机.新的 Pod 将在具有可用资源的 Node(节点)上进行 ...

  9. Java导出带格式的Excel数据到Word表格

    前言 在Word中创建报告时,我们经常会遇到这样的情况:我们需要将数据从Excel中复制和粘贴到Word中,这样读者就可以直接在Word中浏览数据,而不用打开Excel文档.在本文中,您将学习如何使用 ...

  10. SQL语句——为什么分组函数(多行处理函数)不能用在where语句之后?

    在SQL语句中,常见的分组查询函数为: sum()求和 avg()求平均值 min()求最小值 max()求最大值 count()求数目 在分组函数中有几个重要的特征: 1.分组函数进行时自动忽略nu ...