NSIS安装过程中实现网络通信的几种方法

使用NSIS自定义Windows安装包时,我们有可能会遇到安装过程中需要网络功能(通信或下载)的需求。NSIS本身是没有网络功能的,要想在安装过程中实现网络功能只能通过插件和第三方软件来实现。本篇文章提供了几种方案解决NSIS的网络通信问题。

1、inetc插件

插件官方链接:inetc

插件inetc可以实现网络通信功能,支持get、post、put三种请求,满足了大部分的网络功能需求。其中inetc插件有一个特点就是通信返回的数据不能直接在NSIS中读取,都要以文件的形式保存,然后读取文件来获取通信返回的数据。这个痛点贯穿于整个NSIS的网络通信部分,目前还没有找到NSIS可以直接读取通信返回数据的插件或第三方软件。

在使用inetc插件之前有一个问题需要注意:inetc最低支持 Windows版本为Win10,不支持Win7/8。如果有兼容性考虑的话要慎用此插件,如果没有低版本兼容考虑可以比较放心的使用inetc插件。

举几个网络通信的示例

arduino 复制代码
inetc::get "https://downloadUrl/xx.file" "$TEMP\xxx.file"
// 第一个参数是文件的下载地址,第二个参数是文件下载的位置
inetc::get "https://url/pack/info" "$TEMP\xxx.txt"
// 第一个参数是文件信息的接口地址,第二个是接口返回数据的保存文件

2、NSISdl插件

插件官方链接:NSISdl

插件NSISdl支持的网络功能很少,支持的功能有:文件下载和部分get请求(作者使用中发现该插件支持部分get请求,不保险要慎用)。因此只有下载需求的可以使用此插件。

官方文档中说,NSISdl插件支持http通信不支持https通信,作者使用中发现https通信NSISdl插件也支持。

举一个网络下载的例子

php 复制代码
NSISdl::download "https://downloadUrl/xx.file" "$TEMP\xxx.file"
// 第一个参数是文件的下载地址,第二个参数是文件下载的位置

3、第三方软件

NSIS既然没有网络功能,那么在安装过程中使用第三方软件去执行网络通信(这个第三方软件可以自行编写也是开源软件)。作者采用的是NsExec插件调用curl来实现网络通信功能。

NsExec插件链接:NsExec,curl官网链接:curl

curl是一个体积小、功能强大和稳定的网络通信软件,而NsExec插件可以让NSIS运行过程中执行Windows命令行。因此作者将NSIS中的网络需求交给curl来实现,NSIS只需要进行两个工作:1、NsExec来调用curl;2、监测curl执行结果。

此方案相比上面两种方案来说功能更丰富,运行更稳定,但是由于要使用第三方软件,安装包体积会更大,而且安装过程中需要将第三方软件安装/拷贝到用户电脑之后才可以使用网络通信功能。

举几个网络通信的示例

swift 复制代码
nsExec::ExecToStack '$INSTDIR\curl\curl.exe --connect-timeout 10 -s -o "$INSTDIR\xx.file" "https://downloadUrl/xx.file"'
// 下载文件,单引号内的字符串为执行curl下载的命令行命令
Pop $2
// $2如果为0说明执行成功,不为0则说明失败
arduino 复制代码
nsExec::ExecToStack '$INSTDIR\curl\curl.exe "https://logUrl?info=xxx"'
// 发送日志,单引号内的字符串为执行curl通信的命令行命令
rust 复制代码
nsExec::ExecToStack '$INSTDIR\curl\curl.exe --connect-timeout 10 -s -o "$TEMP\getUrl.txt" "https://getUrl"'
// 获取信息,单引号内的字符串为执行curl通信的命令行命令,接口返回值保存在来geturl.txt

上述就是作者总结的三种实现NSIS安装过程中进行网络通信的方法。

相关推荐
Mr_Mao2 小时前
Naive Ultra:中后台 Naive UI 增强组件库
前端
前端小趴菜054 小时前
React-React.memo-props比较机制
前端·javascript·react.js
摸鱼仙人~5 小时前
styled-components:现代React样式解决方案
前端·react.js·前端框架
sasaraku.5 小时前
serviceWorker缓存资源
前端
RadiumAg6 小时前
记一道有趣的面试题
前端·javascript
yangzhi_emo6 小时前
ES6笔记2
开发语言·前端·javascript
yanlele7 小时前
我用爬虫抓取了 25 年 5 月掘金热门面试文章
前端·javascript·面试
中微子8 小时前
React状态管理最佳实践
前端
烛阴8 小时前
void 0 的奥秘:解锁 JavaScript 中 undefined 的正确打开方式
前端·javascript
中微子8 小时前
JavaScript 事件与 React 合成事件完全指南:从入门到精通
前端