NSIS 绑定文件后缀名完整介绍


NSIS是常用的制作软件安装程序的工具,因其功能强大而很受欢迎。但很多软件都有自己的文件,这些文件往往有独特的后缀名,而且往往需要支持双击文件即可打开。这时就需要对文件后缀名进行关联。

DOS 下关联文件后缀名

DOS下关联文件后缀名常用的指令是ASSOCFTYPE
我们可以看到这两个指令的帮助内容:
显示或修改文件扩展名关联

ASSOC [.ext[=[fileType]]]

  .ext      指定跟文件类型关联的文件扩展名
  fileType  指定跟文件扩展名关联的文件类型

键入 ASSOC 而不带参数,显示当前文件关联。如果只用文件扩展
名调用 ASSOC,则显示那个文件扩展名的当前文件关联。如果不为
文件类型指定任何参数,命令会删除文件扩展名的关联。

显示或修改用在文件扩展名关联中的文件类型

FTYPE [fileType[=[openCommandString]]]

  fileType  指定要检查或改变的文件类型
  openCommandString 指定调用这类文件时要使用的开放式命令。

键入 FTYPE 而不带参数来显示当前有定义的开放式命令字符串的
文件类型。FTYPE 仅用一个文件类型启用时,它显示那个文件类
型目前的开放式命令字符串。如果不为开放式命令字符串指定,
FTYPE 命令将删除那个文件类型的开放式命令字符串。在一个
开放式命令字符串之内,命令字符串 %0 或 %1 被通过关联调用
的文件名所代替。%* 得到所有的参数,%2 得到第一个参数,
%3 得到第二个,等等。%~n 得到其余所有以 nth 参数打头的
参数;n 可以是从 2 到 9 的数字。例如:

    ASSOC .pl=PerlScript
    FTYPE PerlScript=perl.exe %1 %*

允许你启用以下 Perl 脚本:

    script.pl 1 2 3

如果不想键入扩展名,则键入以下字符串:

    set PATHEXT=.pl;%PATHEXT%

被启动的脚本如下:

    script 1 2 3

比如,我们想让.abc这个后缀名在Windows 资源管理器里显示文件类型为“某软件的文件”,双击后打开软件C:\Program Files\abc\abc.exe,就可以执行:

ASSOC .abc=某软件的文件
FTYPE 某软件的文件="C:\Program Files\abc\abc.exe" "%1"

其中"%1"这一参数将会被系统替换成文件路径。
这一定要有管理员权限。
但是很快我们就会注意到问题:没法自定义图标,而且对其他软件的后缀名执行ASSOC查看内容,我们会发现关联的都是一串英文,可Windows资源管理器里看到的却是中文的类型。这需要通过系统注册表来实现。

NSIS 通过系统注册表关联文件后缀名

WriteRegStr HKCR ".abc" "" "Abc.File"
WriteRegStr HKCR "Abc.File" "" "某软件的文件"                         ; 文件类型名称
WriteRegStr HKCR "Abc.File\DefaultIcon" "" "$INSTDIR\abc.ico"       ; 图标
WriteRegStr HKCR "Abc.File\shell" "" ""
WriteRegStr HKCR "Abc.File\shell\open" "" ""
WriteRegStr HKCR "Abc.File\shell\open\command" "" '"$INSTDIR\abc.exe" "%0"' ; 运行时指令,单引号里的内容同前面FTYPE指令

注意不要漏掉最后一行外面的单引号
其中所有的Abc.File可以换成你自己想用的名称
卸载程序里只要用对应的DeleteRegKey HKCR ".abc"等指令就可以去除关联了

NSIS 刷新桌面图标缓存

修改完文件类型、图标、命令行,却发现桌面上的图标仍然没变。这是因为只有Windows 资源管理器被要求刷新图标的时候才会刷新,所以需要刷新桌面图标缓存。直接上代码:

!include "FileFunc.nsh"
${RefreshShellIcons}

第二行要放在Function或者Section里才能使用

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值