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安装过程中进行网络通信的方法。

相关推荐
凌览27 分钟前
别再死磕 Nginx!http-proxy-middleware 低配置起飞
前端·后端
EndingCoder1 小时前
类的继承和多态
linux·运维·前端·javascript·ubuntu·typescript
用户47949283569151 小时前
React 终于出手了:彻底终结 useEffect 的"闭包陷阱"
前端·javascript·react.js
程序员猫哥1 小时前
前端开发,一句话生成网站
前端
Younglina1 小时前
一个纯前端的网站集合管理工具
前端·vue.js·chrome
木头程序员2 小时前
前端(包含HTML/JavaScript/DOM/BOM/jQuery)基础-暴力复习篇
开发语言·前端·javascript·ecmascript·es6·jquery·html5
卖火箭的小男孩2 小时前
# Flutter Provider 状态管理完全指南
前端
小雨青年2 小时前
鸿蒙 HarmonyOS 6|ArkUI(01):从框架认知到项目骨架
前端
Null1552 小时前
浏览器唤起本地桌面应用(基础版)
前端·浏览器
pas1362 小时前
31-mini-vue 更新element的children
前端·javascript·vue.js