; 该脚本使用 HM VNISEdit 脚本编辑器向导产生

; 安装程序初始定义常量
!define PRODUCT_NAME ""
!define PRODUCT_VERSION "1.0"
!define PRODUCT_PUBLISHER " Inc."
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

SetCompressor lzma

; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
!include "MUI.nsh"

; MUI 预定义常量
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"

; 语言选择窗口常量设置
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"

; 欢迎页面
!insertmacro MUI_PAGE_WELCOME
; 许可协议页面
;!insertmacro MUI_PAGE_LICENSE "Licence.txt"
; 安装过程页面
!insertmacro MUI_PAGE_INSTFILES
; 安装完成页面
!define MUI_FINISHPAGE_RUN "$INSTDIR\WPF.exe"
!insertmacro MUI_PAGE_FINISH

; 安装卸载过程页面
!insertmacro MUI_UNPAGE_INSTFILES

; 安装界面包含的语言设置
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"

; 安装预释放文件
!insertmacro MUI_RESERVEFILE_LANGDLL
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; ------ MUI 现代界面定义结束 ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "Lane.exe"
InstallDir "$PROGRAMFILES\Lane"
ShowInstDetails show
ShowUnInstDetails show
BrandingText " "

Section "MainSection" SEC01
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File /r "Release\*.*"
  SetOutPath "$INSTDIR\configs"
     ${If} $LANGUAGE == '
      File "configs\zh-CN\app-config.xml"
    ${Else}
      File "configs\en-US\app-config.xml"
  ${EndIf}

  CreateDirectory "$SMPROGRAMS\Lane" /*所有程序文件夹*/
  CreateShortCut "$SMPROGRAMS\Lane\Lane.lnk" "$INSTDIR\WPF.exe" /*所有程序--快捷方式*/
  CreateShortCut "$DESKTOP\Lane.lnk" "$INSTDIR\WPF.exe" /*桌面--快捷方式*/
  CreateShortCut "$SMSTARTUP\Lane.lnk" "$INSTDIR\WPF.exe" /*自启动--快捷方式*/
  Call GetNetFrameworkVersion
    Pop $R1
  ${If} $R1 < '2.0.50727'
  SetDetailsPrint textonly
  DetailPrint "正在安装 .NET Framework 2.0 SP2..."
  SetDetailsPrint listonly

  SetOutPath "$INSTDIR"
  SetOverwrite on
  File "Framwork2.0\dotnetfx.exe"
  ExecWait '"$INSTDIR\dotnetfx.exe"'
  Delete "$INSTDIR\dotnetfx.exe"
  ${ElseIf} $R1 < '3.0'
  File "Framwork2.0\dotnetfx.exe"
  ExecWait '"$INSTDIR\dotnetfx.exe"'
  Delete "$INSTDIR\dotnetfx.exe"
  ${ElseIf} $R1 < '3.5'
  File "Framwork2.0\dotnetfx.exe"
  ExecWait '"$INSTDIR\dotnetfx.exe"'
  Delete "$INSTDIR\dotnetfx.exe"
  ${ElseIf} $R1 < '4.0'
  File "Framwork2.0\dotnetfx.exe"
  ExecWait '"$INSTDIR\dotnetfx.exe"'
  Delete "$INSTDIR\dotnetfx.exe"
  ${ElseIf} $R1 < '4.5'
  File "Framwork2.0\dotnetfx.exe"
  ExecWait '"$INSTDIR\dotnetfx.exe"'
  Delete "$INSTDIR\dotnetfx.exe"
  ${EndIf}
SectionEnd

Section -AdditionalIcons
  CreateShortCut "$SMPROGRAMS\Lane\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd

Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd

#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#

Function GetNetFrameworkVersion
    ;获取.Net Framework版本,支持
    Push $
    Push $

    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install"
    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Version"
    StrCmp $  KnowNetFrameworkVersion +

    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client" "Install"
    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4.0\Client" "Version"
    StrCmp $  KnowNetFrameworkVersion +

    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Install"
    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5" "Version"
    StrCmp $  KnowNetFrameworkVersion +

    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "InstallSuccess"
    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.0\Setup" "Version"
    StrCmp $  KnowNetFrameworkVersion +

    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Install"
    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727" "Version"
    StrCmp $  +
    StrCpy $ "2.0.50727.832"
    StrCmp $  KnowNetFrameworkVersion +

    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Install"
    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322" "Version"
    StrCmp $  +
    StrCpy $ "1.1.4322.573"
    StrCmp $  KnowNetFrameworkVersion +

    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Install"
    ReadRegDWORD $ HKLM "SOFTWARE\Microsoft\.NETFramework\policy\v1.0" "Version"
    StrCmp $  +
    StrCpy $ "1.0.3705.0"
    StrCmp $  KnowNetFrameworkVersion +

    StrCpy $ "not .NetFramework"
    KnowNetFrameworkVersion:
    Pop $
    Exch $
FunctionEnd

Function .onInit
  !insertmacro MUI_LANGDLL_DISPLAY

FunctionEnd

/******************************
 *  以下是安装程序的卸载部分  *
 ******************************/

Section Uninstall
  Delete "$INSTDIR\uninst.exe"

  Delete "$SMPROGRAMS\Lane\Uninstall.lnk"
  Delete "$DESKTOP\Lane.lnk"
  Delete "$SMPROGRAMS\Lane\Lane.lnk"
  Delete "$SMSTARTUP\Lane.lnk"
  RMDir "$SMPROGRAMS\Lane"
  RMDir /r "$INSTDIR\zh-Hant"
  RMDir /r "$INSTDIR\zh-Hans"
  RMDir /r "$INSTDIR\Logs"
  RMDir /r "$INSTDIR\ko"
  RMDir /r "$INSTDIR\ja"
  RMDir /r "$INSTDIR\it"
  RMDir /r "$INSTDIR\fr"
  RMDir /r "$INSTDIR\es"
  RMDir /r "$INSTDIR\en"
  RMDir /r "$INSTDIR\de"
  RMDir /r "$INSTDIR\configs"
  RMDir /r "$INSTDIR"
  RMDir "$INSTDIR"

  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  SetAutoClose true
SectionEnd

#-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#

Function un.onInit
!insertmacro MUI_UNGETLANGUAGE
  MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2
  Abort
FunctionEnd

Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
FunctionEnd

NSIS使用记录的更多相关文章

  1. NSIS学习记录の----win8.1和win10对于NSIS创建的卸载快捷方式无法在开始目录下显示

    NSIS提供了很好的软件卸载功能编写的方法,但是针对win8.1和win10操作系统,由于开始目录的权限限制,我们有时候并不能完美的完成所需要的功能----卸载程序的快捷方式不能显示.话不多说,下面提 ...

  2. NSIS学习记录の----NSIS插件调用

    我们都知道NSIS可以和C或者C++混合编程,方法是NSIS调用C或C++的动态库,那么如何调用呢? 首先我们来创建动态库: // add.cpp : 定义 DLL 应用程序的导出函数. #inclu ...

  3. NSIS学习记录の----NSIS多语言安装以及详解

    NSIS多语言安装,很多教程提供了详细的代码,但是代码中某些语句的含义我还是不很明白,作为一个吃螃蟹的人,我做一个解释,避免很多小伙伴和我哟U一样的误区,以下结论都是自己根据实践得来,若发现理解错误, ...

  4. NSIS学习记录の----查找注册表某个键是否存在

    最近要做一个注册表的判断.以往都是注册表某个键的键值存在查找,但是如何判断一个空键值的键是否存在呢(很多大厂装逼不写键值,有默认就好)? 下面给出解决办法(要沟通请邮件联系:7-7-2-7-0-6-5 ...

  5. NSIS:在注册表中记录安装路径以便重装或升级时读取

    原文 NSIS:在注册表中记录安装路径以便重装或升级时读取 在NSIS中,这个功能是非常有用的,可以避免用户把程序安装到多个位置的尴尬. 第1步:在“安装目录选择页面”前面加入以下代码: 1 !def ...

  6. NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版

    nsis中文版(Nullsoft Scriptable Install System)是一个专业的开源的可以用来封闭Windows程序的实用工具,是一个开源的 Windows 系统下安装程序制作程序. ...

  7. NSIS 2.0界面快速入门

    NSIS 2.0 版本支持定制的用户界面.所谓的 Modern UI(下称 MUI) 就是一种模仿最新的 Windows 界面风格的界面系统.MUI 改变了 NSIS 脚本的编写习惯,它使用 NSIS ...

  8. 关于qt学习的一点小记录(2)

    嗯...这次接了个单 要求图形界面,刚好可以巩固并学习下QT.毫不犹豫的就接了 下面记录下出现的问题: 1. QWidget和QDialog QDialog下的槽函数有accept()与reject( ...

  9. NSIS:制作软件升级安装包

    原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了.   现在,我们就来一步步把这个安装包做 ...

随机推荐

  1. bzoj题解汇总(1052~1061)

    bzoj1052: 贪心 bzoj1053: DFS bzoj1054: 加深迭代搜索 bzoj1055:区间判定性dp bzoj1056: Treap bzoj1057: 二分,单调队列 / ST表 ...

  2. callee

    首先解释callee 参考网站 http://www.css88.com/archives/1706 callee是arguments的一个成员,仅当函数正在执行的时候才可用,so用于递归也行 代码示 ...

  3. 解决本机安装多版本jdk导致The type java.lang.Object cannot be resolved It is indirectly referenced ...

    本机开始安装了jdk1.6,然后安装了jdk1.8 当在调自动化的时候,发现传入函数传参String类型,报错The type java.lang.Object cannot be resolved ...

  4. OPencv1.0配置vs2010(介于OPencv的经典之作。都是OPencv1.0为基础的。)

    首先下载OPencv1.0 我在之前的博客中写了下载的资源http://www.cnblogs.com/xiaochige/p/5990858.html 把OPencv1.0中bin文件夹下的所有内容 ...

  5. PHP自动发邮件

    自动发邮件 使用了这个类http://bbs.php100.com/read-htm-tid-121431.html 因他用的php版本较老,用到了函数ereg_replace() 和 ereg() ...

  6. angularjs数据异步加载时的绑定事件

    // 顶级菜单项的鼠标移入和移出操作 $(document).on({ mouseover: function () { ; ; if (top + $(this).children('ul').ou ...

  7. 如何在CentOS 7上安装Percona服务器

    在这篇文章中我们将了解关于 Percona 服务器,一个开源的MySQL,MariaDB的替代品.InnoDB的数据库引擎使得Percona 服务器非常有吸引力,如果你需要的高性能,高可靠性和高性价比 ...

  8. pycharm 使用小结

    1.pycharm 自动换行,显示行号,缩进向导 在代码右侧右键 2.自动注释/取消注释 ctrl + /

  9. C#面向对象的三大特性

    下面是面向对象的本人解析的图片可以让你们更好的理解一下!!! 一,封装: 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了.那么封装是什么呢?封装就是这个人 ...

  10. jQuery--index() window.onhashchange

    index(): 1. 如果没有参数传给该函数,那么就返回一个整数,为其相对于其兄弟节点的位置. 2. 如果在一个元素集合上调用该函数,并且传入的参数为一个DOM元素或jQuery对象,那么返回一个整 ...