NSIS 捆绑
来源:互联网 发布:淘宝店铺图片怎么换 编辑:程序博客网 时间:2024/04/27 14:19
最近要用nsis打包一个软件,大家都知道的,自由免费软件现在很难生存下去,只能靠捆绑其他cpa软件才能生存,这也是现实的无奈,谁都不想这样做,但是国内环境如此,谁都不想付费使用软件,那只能在安装的时候推荐一些有偿安装的软件了,闲话少说,直接上干货。
首先要制作定义cpa下载连接的远程ini文件,可能有些朋友想问,为什么不把第三方软件一起打包呢,非要用远程配置文件配置链接地址去下载吗?这个我稍微罗嗦一下,第三方的cpa也很坑爹的,不是说你打包进去,就永远会给你收益的,所以要通过远程配置文件去配置,远程ini文件如下:
- [Title]
- 1=安装xx软件1
- 2=安装xx软件2
- [IsCheckDefault]
- 1=1
- 2=1
- [Execute]
- 1=http://www.2dianying.net/setup_001.exe
- 2=http://www.2dianying.net/setup_002.exe
- [File]
- 1=001.exe
- 2=002.exe
解释一下,title,就是软件名称了,ischeckdefault是软件前面要放一个checkbox框,可以让安装的人勾选的,有人不喜欢,就可以取消掉,file就是下载到本机的文件名,这个也有讲究的,很多cpa,你的pid就在文件名上,比如setup_001.exe,你的pid就是001,如果你把这个001去掉,就不算你推广的安装了,当然也就拿不到佣金了。最重要的就是execute,就是软件的下载地址了,当然这里只是提供个例子,实际地址并没有这些文件。
然后就是nsis这边的代码了,我不打算把全部代码都贴出来,选几个重点讲一下,首先是读这个ini文件以及显示这个特别的安装页面。
要制作自定义的安装界面,就要用到nsdialogs,所以要在include区,你搜索include,就能找到这个区块,加上:
!include "nsdialogs.nsh"
然后定义自定义页面需要用的函数
Page custom 函数1 函数2 ...;函数名自己命名,多个函数按顺序定义,就会按顺序调用,用空格隔开
然后读取文件,下载文件要用inetc插件,这个搜nsis插件,到处都是
这两个前提条件准备好了,先读取远程ini文件,并下载到本地
- Function .onInit
- InitPluginsDir
- File /oname=$PLUGINSDIR\soft.ini "soft.ini"
- InitPluginsDir
- inetc::get /SILENT "http://www.2dianying.net/soft.ini" "$PLUGINSDIR\soft.ini"
- FunctionEnd
解释一下,inetc:get就是上面提到的inetc插件,把远程文件下载到本地,这个操作最好放到oninit函数里
接下来就根据这个ini文件的配置,去画这个自定义的安装页了
- nsDialogs::Create /NOUNLOAD 1018
- Pop $Dialog
- ${NSD_CreateLabel} 0 0u 100% 25u "感谢安装xx软件,欢迎安装下列为你推荐的附加组件。"
- ReadINIStr $R1 "$PLUGINSDIR\soft.ini" "Title" "1"
- ${NSD_CreateCheckbox} 0 30u 100% 10u "$R1"
- Pop $Checkbox1
- ReadINIStr $R1 "$PLUGINSDIR\soft.ini" "IsCheckDefault" "1"
- ${NSD_SetState} $Checkbox1 $R1
- ReadINIStr $R1 "$PLUGINSDIR\soft.ini" "Title" "2"
- ${NSD_CreateCheckbox} 0 45u 100% 10u "$R1"
- Pop $Checkbox2
- ReadINIStr $R1 "$PLUGINSDIR\soft.ini" "IsCheckDefault" "2"
- ${NSD_SetState} $Checkbox2 $R1
- nsDialogs::Show
一头一尾,都调用了nsdialogs的方法,这是重点,要不然没法做出自定义的安装页,中间代码比较好理解,不多解释,就是生成checkbox以及读取软件标题,还有就是是否默认勾选的选项
关键的一步到了,读取用户勾选的信息,并写到ini文件里,为后面判断是否要下载并安装cpa做准备。
- Push $R0
- ${NSD_GetState} $Checkbox1 $R0
- WriteINIStr "$PLUGINSDIR\soft.ini" "IsCheckDefault" "1" "$R0"
- Pop $R0
- ${NSD_GetState} $Checkbox2 $R0
- WriteINIStr "$PLUGINSDIR\soft.ini" "IsCheckDefault" "2" "$R0"
- Pop $R0
好像也不用解释了,代码非常清晰,就是读取checkbox勾选状态,然后写入到ischeckdefault字段区,这个字段复用了
最后就是下载勾选的软件并安装,这个步骤一定要放在.onInstSuccess函数里,并且在执行下载安装的操作前,使用HideWindow命令,要不然,整个安装界面会卡在那里,直到所有下载和安装都结束才会响应,这是非常糟糕的。
- Function .onInstSuccess
- HideWindow
- call download2setup
- FunctionEnd
然后就是download2setup函数了
- Push $R0
- Push $R1
- Push $R2
- ReadINIStr $R0 "$PLUGINSDIR\soft.ini" "IsCheckDefault" "1"
- StrCmp $R0 1 +1 NOCheck1 ;检查Checkbox有没选择
- ReadINIStr $R1 "$PLUGINSDIR\soft.ini" "Execute" "1" ;读需要下载执行的文件网址
- StrCmp $R1 "" NOCheck1 ;没有跳过下载打开程序
- ReadINIStr $R2 "$PLUGINSDIR\soft.ini" "File" "1"
- inetc::get /SILENT "$R1" "$PLUGINSDIR\$R2" ;下载程序
- Pop $R0
- ExecWait "$PLUGINSDIR\$R2"
- NOCheck1:
- ReadINIStr $R0 "$PLUGINSDIR\soft.ini" "IsCheckDefault" "2"
- StrCmp $R0 1 +1 NOCheck2
- ReadINIStr $R1 "$PLUGINSDIR\soft.ini" "Execute" "2"
- StrCmp $R1 "" NOCheck2
- ReadINIStr $R2 "$PLUGINSDIR\soft.ini" "File" "2"
- inetc::get /SILENT "$R1" "$PLUGINSDIR\$R2"
- Pop $R0
- ExecWait "$PLUGINSDIR\$R2"
- NOCheck2:
至此,就完成这个功能了,就不发那个捆绑了很多软件的安装界面的截图了,你痛恨,我也痛恨,要不是为了生存,谁没事捆什么浏览器播放器游戏加速器什么的,太讨厌了。
- NSIS 捆绑
- NSIS
- NSIS
- NSIS
- NSIS
- nsis
- NSIS
- 签入式捆绑
- 如此捆绑
- 文件捆绑
- NSIS 2.09
- NSIS使用
- nsis心得
- NSIS兼容性问题
- NSIS 使用指南
- NSIS 笔记
- 学习NSIS
- NSIS Unicode
- pdf file to txt file using pdfbox
- OCP-1Z0-052-V8.02-126题
- matlab用barweb画带误差线的柱状图实例
- seajs入门
- redis的配置
- NSIS 捆绑
- PE文件结构详解(五)延迟导入表
- 散点图中实现数据的线性回归分析
- 数组循环右移的算法
- android网络图片搜索——基于百度图片搜索引擎
- 软件安装的过程中都做了些什么?
- PHP生成和解析xml(SimpleXML版)
- NSUserDefaults的简单使用
- [Android] JNI 中传递字符串参数(String)的安全处理方式