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

相关推荐
fruge3 分钟前
前端简历优化:如何突出项目亮点与技术深度(附示例)
前端
华仔啊6 分钟前
Vue3 + Element Plus 动态菜单实现:一套代码完美适配多角色权限系统
前端·vue.js
n***840711 分钟前
Springboot-配置文件中敏感信息的加密:三种加密保护方法比较
android·前端·后端
姜太公钓鲸23320 分钟前
Bootstrap是什么?作用是什么?使用场景是什么?如何使用?
前端·bootstrap·html
Aerelin25 分钟前
爬虫playwright中的等待机制
前端·爬虫·python
慧慧吖@30 分钟前
关于在本地去模拟生产环境检测页面内容注意事项
前端·javascript·vue.js
码农很忙38 分钟前
用SpreadJS实现分权限管理:前端技术栈的精准控制实践
前端
黄团团1 小时前
Vue2整合Electron开发桌面级应用以及打包发布(提供Gitee源码)
前端·javascript·vue.js·elementui·electron
勇气要爆发1 小时前
问:LocalStorage、Vuex、Pinia的区别和本质
前端
Aerelin1 小时前
iframe讲解(爬虫playwright的特殊应用)
前端·爬虫·python·html