NSIS学习笔记

1:定义常量

!ifndef LIEYAN_DLL

!define LIEYAN_DLL "LieYan.dll"

!endif

2:定义变量

Var CHANNEL  ;渠道号

3:静默安装、卸载

SilentUninstall silent(normal)

SilentInstall silent(normal)

4:MUI_PAGE_DIRECTORY自定义文字

!insertmacro MUI_PAGE_DIRECTORY

DirText "安装程序将安装 $(^NameDA) 在下列文件夹。要安装到不同文件夹,单击 [浏览(B)] 并选择其他的文件夹。 $_CLICK"

5:Finish page运行程序

; Finish page

!define MUI_FINISHPAGE_RUN_TEXT "运行游戏"

!define MUI_FINISHPAGE_RUN   "$INSTDIR\Logger.exe" "$INSTDIR\LieYan.dll" 2

!define MUI_FINISHPAGE_RUN_FUNCTION .gamestarts

!insertmacro MUI_PAGE_FINISH  #都是完成页面,但写法不同

6:获取安装程序的文件名

!insertmacro GetExeName  ;获取安装程序的文件名

${GetExeName} $ExeAddr

Push "$ExeAddr"

7:往目标文件中写入字段

WriteINIStr "$INSTDIR\logger.ini" "Option" "Exename" "$ExeAddr"

8:从目标文件中读出字段

ReadINIStr "$ExeAddr" "$INSTDIR\logger.ini" "Option" "Exename"

9:获取系统时间

System::Alloc 16

System::Call kernel32::GetLocalTime(isR0)

System::Call *$R0(&i2.R1,&i2.R2,&i2,&i2.R4,&i2.R5,&i2.R6,&i2.R7,&i2.R8)

System::Free $R0

WriteINIStr "$INSTDIR\logger.ini" "Option" "Installtime" "$R1/$R2/$R4/$R5:$R6:$R7"

inetc::post "Uninstalltime=$R1/$R2/$R4/$R5:$R6:$R7"\

"http://www.9377.com/api/client_data_receive.php?Uninstalltime=$R1/$R2/$R4/$R5:$R6:$R7" \

"$INSTDIR\logger.htm"

11:字段获取保存

${GetExeName} $ExeAddr

Push "$ExeAddr"

StrCpy $CHANNEL $ExeAddr "4" "-8"  #获取字段后面八个字符的前4个字符

Push "$CHANNEL"

12:创建互斥防止重复运行

InitPluginsDir

System::Call 'kernel32::CreateMutexA(i 0, i 0, t "WinSnap_installer") i .r1 ?e'

Pop $R0

StrCmp $R0 0 +3

MessageBox MB_OK|MB_ICONEXCLAMATION|MB_OK "$(^Name) 安装程序已经在运行!"

Abort

13:判断文件是否已经存在,并相应作出处理

IfFileExists "$INSTDIR\uninstall.exe" 0 +4

MessageBox MB_OK "系统检测到您已经安装了烈焰,现会对原版本进行静默卸载,请点击确定后再运行安装程序。"

ExecWait '"$INSTDIR\uninstall.exe" /S '

Quit

Goto End

End:

14:程序正在运行

Function un.onInit

FindProcDLL::FindProc "$INSTDIR\logger.exe"

Pop $0

IntCmp $0 1 0 no_run

MessageBox MB_ICONSTOP "${RES_NAME}正在运行,请先关闭程序!"

Quit

no_run:

FunctionEnd

15:获取ip地址

Section

Call fip

WriteINIStr "$INSTDIR\logger.ini" "Option" "IP" "$findip"

SectionEnd

Function fip

inetc::get /SILENT "http://iframe.ip138.com/ic.asp" "$PLUGINSDIR\ip.txt"

${LineFind} "$PLUGINSDIR\ip.txt" "$PLUGINSDIR\ip.txt" "-1:-1" "getip"

FunctionEnd

Function getip

${WordFind2X} $R9 "[" "]" "-1" $R9

DetailPrint $R9

StrCpy $findip $R9

FunctionEnd

16:获取MAC

Section

Call .GetMacAddress

WriteINIStr "$INSTDIR\logger.ini" "Option" "MAC" "$MacAddress"

SectionEnd

Function .GetMacAddress

System::Call Iphlpapi::GetAdaptersInfo(i,*i.r0)

System::Alloc $0

Pop $1

System::Call Iphlpapi::GetAdaptersInfo(ir1r2,*ir0)i.r0

StrCmp $0 0 0 finish

loop:

StrCmp $2 0 finish

System::Call '*$2(i.r2,i,&t260.s,&t132.s,i.r5)i.r0'

IntOp $3 403 + $5

StrCpy $6 ""

${For} $4 404 $3

IntOp $7 $0 + $4

System::Call '*$7(&i1.r7)'

IntFmt $7 "%02X" $7

StrCpy $6 "$6$7"

StrCmp $4 $3 +2

StrCpy $6 "$6-"

${Next}

StrCpy $MacAddress $6

Goto loop

finish:

System::Free $1

FunctionEnd

17:安装完成,运行程序,刷新图标

Function .onInstSuccess

Exec '"$INSTDIR\Logger.exe" "$INSTDIR\LieYan.dll"'   #注意引号

${RefreshShellIcons}

FunctionEnd

18:桌面lnk,exe加dll运行的情况,注意引号和参数

CreateShortCut "$DESKTOP\${RES_NAME}.lnk" "$INSTDIR\logger.exe" '"$INSTDIR\${LIEYAN_DLL}"' "$INSTDIR\${LIEYAN_DLL}" 0

19:卸载程序卸载不完全问题

注意卸载的先后顺序,合理使用sleep

Delete "$DESKTOP\${RES_NAME}.lnk"  #桌面图标动画效果,需先删除才能删除exe和dll

Sleep 1000  #注意sleep,待删除完成再执行下一步动作

RMDir /r "$SMPROGRAMS\${RES_NAME}"

Delete "$SMPROGRAMS\${RES_NAME}\*.*"

Sleep 1000

Delete "$INSTDIR\*.*"

RMDir /r "$INSTDIR"

20:开始菜单启动图标

CreateShortCut "$SMPROGRAMS\${RES_NAME}\${RES_NAME}.lnk" "$INSTDIR\logger.exe" '"$INSTDIR\${LIEYAN_DLL}"' "$INSTDIR\${LIEYAN_DLL}" 0  #注意路径设置,否则无法实现功能

21:静默运行程序

ExecWait '"$INSTDIR\uninstall.exe" /S '  #/S  #Exec

nsis访问php,NSIS学习笔记相关推荐

  1. unity3D-游戏/AR/VR在线就业班 C#入门访问修饰符学习笔记

    unity3D-游戏/AR/VR在线就业班 C#入门访问修饰符学习笔记 点击观看视频学习:http://edu.csdn.NET/lecturer/107 访问修饰符 public --公共的,在哪里 ...

  2. android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...

    Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...

  3. c语言普通变量间接访问,C语言学习笔记-指针

    野指针问题 野指针是没有指向地址的指针,也就是该指针指向的地址是随机的. 因为指针的指向地址是随机的,所以很有可能指向不可访问的弟子,导致程序崩溃,或者访问了不该访问的地址,导致影响其他功能使用 为了 ...

  4. nginx 访问图片404_Nginx学习笔记(二、Nginx配置文件详解) - 被猪附身的人

    nginx的启停控制 1.Nginx信号控制: nginx中可以通过发送信号的方式来控制服务器的启停等,但要达成这些操作首先要知道nginx的PID. 获取pid的方式有两种: 利用linux的ps命 ...

  5. 高并发访问请求合并学习笔记

    用户请求 -- 网关 -- 微服务 -- db 这样的方式对高并发的请求的线程快速的相应,因为数据库的每秒执行的事务数有限,很容易出现慢查询,此时数据库就成为了第一个瓶颈 为了解决这个问题,有两种策略 ...

  6. 【信息安全案例】——身份与访问安全(学习笔记)

  7. 方舟编译器学习笔记分类与导读

    方舟学习笔记系列,从方舟开源到现在,已经写了50多篇,保证了每天一篇的更新频率.篇数增加之后,文章的分类以及文章之间的关系,逐渐变得复杂起来.本文将对已发表的学习笔记系列进行分类和导读,方便读者更好的 ...

  8. NSIS学习笔记(转)

    转自:http://blog.csdn.net/lee353086/article/details/45919901 NSIS学习笔记 Date:2015-05-20 Author:kagula En ...

  9. nsis 学习笔记(2)

    nsis 学习笔记(2) 空间 Delete "$SMPROGRAMS\裝箱大師企業版\裝箱大師官方網站.lnk" Delete "$SMPROGRAMS\裝箱大師企業版 ...

最新文章

  1. Android性能优化面试题,与性能优化相关面试题 - 与IPC机制相关面试题 - 《Android面试宝典》 - 书栈网 · BookStack...
  2. 【每日邮报】利物浦对阵阿森纳能走出牢狱要谢天谢地谢Peter
  3. GitHub如何下载单个文件夹
  4. Linux设备驱动之UART驱动结构
  5. 2015.5.28 面试题1:赋值运算符函数
  6. sudo rosdep init ERROR: cannot download default sources list from: https://raw.githubusercontent.com
  7. python中的类属性和实例属性
  8. 李善兰如何用汉字写公式 | 晚清高数课本长什么样?
  9. 二叉树遍历之先序遍历算法(非递归、递归)入门详解
  10. react小书没读完的记录
  11. 按键精灵手机助手之实战篇(三)通用方法
  12. 程序员的百宝箱:提升工作效率的七大神器
  13. 使用ImageIO压缩图片
  14. r语言html乱码,R语言:读入txt文件中文文本出现乱码解决方案
  15. vue调用手机扫描二维码
  16. web常见的屏幕尺寸
  17. Win32多线程之被激发的对象(Signaled Objects)
  18. Python报错:ImportError: attempted relative import with no known parent package
  19. 超级马里奥游戏开发一(游戏基本界面)
  20. char * const p; //常量指针,p的值不可以修改  char const * p;//指向常量的指针,指向的常量值不可以改 const char *p; //和char const *p

热门文章

  1. Linux查看系统日志
  2. 学习股票知识应该怎样开始
  3. influxdb时序数据库修改数据保存时间
  4. 爬取新浪微博用户信息及微博内容并进行可视化分析
  5. 重定向sendredirect(URL)和请求转发requestDispatcher(servlet).forword(req,resp)
  6. java的深浅拷贝_Java 深浅拷贝
  7. Java中inputStream转字符串
  8. 都市霓虹灯设计欣赏图鉴。
  9. 二级联动省市mysql数据库_「zxfy」jQuery+php+mysql,轻松实现ajax无刷新省市二级联动 - seo实验室...
  10. jquery validate 校验