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

相关推荐
掘金安东尼1 天前
⏰前端周刊第 452 期(2026年2月2日-2月8日)
前端·javascript·github
古茗前端团队1 天前
业务方上压力了,前端仔速通RGB转CMYK
前端
广州华水科技1 天前
单北斗变形监测一体机在基础设施安全与地质灾害监测中的应用价值分析
前端
Dragon Wu1 天前
Electron Forge集成React Typescript完整步骤
前端·javascript·react.js·typescript·electron·reactjs
芳草萋萋鹦鹉洲哦1 天前
【Tailwind】动画解读:Tailwind CSS Animation Examples
前端·css
华仔啊1 天前
jQuery 4.0 发布,IE 终于被放弃了
前端·javascript
一心赚狗粮的宇叔1 天前
03.Node.js依赖包补充说明及React&Node.Js项目
前端·react.js·node.js
子春一1 天前
Flutter for OpenHarmony:音律尺 - 基于Flutter的Web友好型节拍器开发与节奏可视化实现
前端·flutter
JarvanMo1 天前
150万开发者“被偷家”!这两款浓眉大眼的 VS Code 插件竟然是间谍
前端
亿元程序员1 天前
大佬,现在AI游戏开发教程那么多,你不搞点卖给大学生吗?
前端