提供修复界面的NSIS安装包

; 该脚本由邦畿千里制作,可自由传播使用 QQ:911377

 

 

下载源码

 

!include "LogicLib.nsh"

; 安装背景及文字
!define PRODUCT_TEXT_KEY "(邦畿千里)"
!define PRODUCT_TEXT_BACK "resource/back.bmp"
!define PRODUCT_TEXT_PROXCY "现无偿提供给NSIS爱好者使用!"
!define PRODUCT_TEXT_TEL "QQ:911137"
!define PRODUCT_TEXT_AREA "1.自动监测,修复,安装,删除!"
!define PRODUCT_TEXT_INTRUDUCE "2.自由替换图片、背景,注册动态库,执行Exe多种功能!"

; 安装程序初始定义常量
!define PRODUCT_PATH "邦畿千里系列软件"
!define PRODUCT_NAME "邦畿千里画图软件"
!define PRODUCT_MAINEXE "mspaint.exe"
!define PRODUCT_VERSION "2008"
!define PRODUCT_PUBLISHER "邦畿千里"
!define PRODUCT_WEB_SITE "http://www.baidu.com"
!define PRODUCT_REGRUN "Software/Microsoft/Windows/CurrentVersion/Run"
!define PRODUCT_DIR_REGKEY "Software/Microsoft/Windows/CurrentVersion/App Paths/${PRODUCT_PUBLISHER}/${PRODUCT_NAME}"
!define PRODUCT_UNINST_KEY "Software/Microsoft/Windows/CurrentVersion/Uninstall/${PRODUCT_TEXT_KEY}${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

SetCompressor lzma

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

; MUI 预定义常量
;--------------------------------
;Interface Configuration
!define MUI_ABORTWARNING
;安装图标
!define MUI_ICON "resource/install.ico"
;卸载图标
!define MUI_UNICON "resource/uninstall.ico"
;上部图片
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP "resource/header.bmp"
;左侧图片
!define MUI_WELCOMEFINISHPAGE_BITMAP "resource/left.bmp"
!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "resource/left.bmp"
!define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
;页面加载之前进行初始化
!define MUI_CUSTOMFUNCTION_GUIINIT ".onGUIBegin"

;-------------修复页面变量定义-----------------------
!include nsDialogs.nsh
Var UninstallFileName
Var RADIO_REPAIR
Var RADIO_REMOVE
Var Checkbox_State_REPAIR
Var Checkbox_State_REMOVE
Var Checkbox_State

;-------------页面定义---------------------------
; 欢迎页面
!insertmacro MUI_PAGE_WELCOME
; 修复页面
Page custom nsDialogsRepair nsDialogsRepairLeave
; 许可协议页面
!insertmacro MUI_PAGE_LICENSE "resource/licence.txt"
; 安装目录选择页面
!insertmacro MUI_PAGE_DIRECTORY
; 安装过程页面
!insertmacro MUI_PAGE_INSTFILES
; 安转完成后自动运行文件
!define MUI_FINISHPAGE_RUN "$INSTDIR/${PRODUCT_MAINEXE}"
; 安装完成页面
!insertmacro MUI_PAGE_FINISH
; 安装卸载确认页面
!insertmacro MUI_UNPAGE_CONFIRM
; 安装卸载过程页面
!insertmacro MUI_UNPAGE_INSTFILES
; 安装卸载完成页面
!insertmacro MUI_UNPAGE_FINISH
; 安装预释放文件
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; 安装界面包含的语言设置
!insertmacro MUI_LANGUAGE "SimpChinese"
; ------ MUI 现代界面定义结束 ------

Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${PRODUCT_NAME} ${PRODUCT_VERSION}.exe"
InstallDir "$PROGRAMFILES/${PRODUCT_PATH}/${PRODUCT_NAME}"
InstallDirRegKey HKLM "${PRODUCT_UNINST_KEY}" "UninstallString"
ShowInstDetails hide
ShowUnInstDetails hide
BrandingText ${PRODUCT_PUBLISHER}

; 激活安装日志记录,该日志文件将会作为卸载文件的依据(注意,本区段必须放置在所有区段之前)
Section "-LogSetOn"
  LogSet on
SectionEnd

Section "!主程序" SEC01
  SectionIn RO
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  CreateDirectory "$SMPROGRAMS/${PRODUCT_PATH}/${PRODUCT_NAME}"
  ; 创建开始菜单快捷方式
  CreateShortCut "$SMPROGRAMS/${PRODUCT_PATH}/${PRODUCT_NAME}/${PRODUCT_NAME}.lnk" "$INSTDIR/${PRODUCT_MAINEXE}"
  ; 创建桌面快捷方式
  CreateShortCut "$DESKTOP/${PRODUCT_NAME}.lnk" "$INSTDIR/${PRODUCT_MAINEXE}"
  File "Program/Main/mspaint.exe"
SectionEnd

Section "-系统文件" SEC02
  SectionIn RO
  ; 关闭日志,以保证不被卸载掉,主要用于公用文件
  LogSet off
  SetOutPath "$SYSDIR"
  SetOverwrite ifnewer
  File "Program/System/midas.dll"
  ; 注册动态库
  regdll $SYSDIR/midas.dll
  LogSet on
SectionEnd

/******************************
 *  创建卸载快捷方式  *
 ******************************/
Section -AdditionalIcons
  ; 创建开始菜单卸载快捷方式
  CreateShortCut "$SMPROGRAMS/${PRODUCT_PATH}/${PRODUCT_NAME}/Uninstall.lnk" "$INSTDIR/uninst.exe"
SectionEnd

/******************************
 *  写注册表  *
 ******************************/
Section -Post
  WriteUninstaller "$INSTDIR/uninst.exe"
  ; 系统启动自动运行软件
  WriteRegStr HKLM "${PRODUCT_REGRUN}" "${PRODUCT_NAME}" "$INSTDIR/${PRODUCT_MAINEXE}"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR/${PRODUCT_MAINEXE}"
  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}" "DisplayIcon" "$INSTDIR/${PRODUCT_MAINEXE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd

/******************************
 *  以下是安装程序的初始和结束部分  *
 ******************************/
 
; 页面加载之前进行初始化
Function .onInit
  ReadRegStr $UninstallFileName ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString"
FunctionEnd

; 启动背景
Function .onGUIBegin
  BgImage::SetBg /NOUNLOAD /FILLSCREEN ${PRODUCT_TEXT_BACK}
  CreateFont $R0 "Comic Sans MS" 30 400
  BgImage::AddText /NOUNLOAD "${PRODUCT_NAME}" $R0 0 0 255 48 18 798 198

  CreateFont $R3 "Comic Sans MS" 10 100
  BgImage::AddText /NOUNLOAD ${PRODUCT_TEXT_AREA} $R3 0 0 255 88 78 798 198
  CreateFont $R4 "Comic Sans MS" 10 100
  BgImage::AddText /NOUNLOAD ${PRODUCT_TEXT_INTRUDUCE} $R4 0 0 255 88 98 798 198

  CreateFont $R1 "Comic Sans MS" 20 200
  BgImage::AddText /NOUNLOAD ${PRODUCT_TEXT_PROXCY} $R1 0 0 255 68 118 798 198
  CreateFont $R2 "Comic Sans MS" 20 200
  BgImage::AddText /NOUNLOAD ${PRODUCT_TEXT_TEL} $R2 0 0 255 68 158 798 198

  BgImage::Redraw /NOUNLOAD
FunctionEnd

; 销毁启动背景
Function .onGUIEnd
  BgImage::Destroy
FunctionEnd

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

; 根据安装日志卸载文件的调用宏
!macro DelFileByLog LogFile
  ifFileExists `${LogFile}` 0 +4
    Push `${LogFile}`
    Call un.DelFileByLog
    Delete `${LogFile}`
!macroend

Section Uninstall

  ; 调用宏只根据安装日志卸载安装程序自己安装过的文件
  !insertmacro DelFileByLog "$INSTDIR/install.log"

  ; 清除安装程序创建的且在卸载时可能为空的子目录,对于递归添加的文件目录,请由最内层的子目录开始清除(注意,不要带 /r 参数,否则会失去 DelFileByLog 的意义)
  RMDir "$SMPROGRAMS/${PRODUCT_PATH}/${PRODUCT_NAME}"
  RMDir "$SMPROGRAMS/${PRODUCT_PATH}"

  RMDir "$INSTDIR"

  DeleteRegValue HKLM "${PRODUCT_REGRUN}" "${PRODUCT_NAME}"
  DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  SetAutoClose true
SectionEnd

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

; 以下是卸载程序通过安装日志卸载文件的专用函数,请不要随意修改
Function un.DelFileByLog
  Exch $R0
  Push $R1
  Push $R2
  Push $R3
  FileOpen $R0 $R0 r
  ${Do}
    FileRead $R0 $R1
    ${IfThen} $R1 == `` ${|} ${ExitDo} ${|}
    StrCpy $R1 $R1 -2
    StrCpy $R2 $R1 11
    StrCpy $R3 $R1 20
    ${If} $R2 == "File: wrote"
    ${OrIf} $R2 == "File: skipp"
    ${OrIf} $R3 == "CreateShortCut: out:"
    ${OrIf} $R3 == "created uninstaller:"
      Push $R1
      Push `"`
      Call un.DelFileByLog.StrLoc
      Pop $R2
      ${If} $R2 != ""
        IntOp $R2 $R2 + 1
        StrCpy $R3 $R1 "" $R2
        Push $R3
        Push `"`
        Call un.DelFileByLog.StrLoc
        Pop $R2
        ${If} $R2 != ""
          StrCpy $R3 $R3 $R2
          Delete /REBOOTOK $R3
        ${EndIf}
      ${EndIf}
    ${EndIf}
    StrCpy $R2 $R1 7
    ${If} $R2 == "Rename:"
      Push $R1
      Push "->"
      Call un.DelFileByLog.StrLoc
      Pop $R2
      ${If} $R2 != ""
        IntOp $R2 $R2 + 2
        StrCpy $R3 $R1 "" $R2
        Delete /REBOOTOK $R3
      ${EndIf}
    ${EndIf}
  ${Loop}
  FileClose $R0
  Pop $R3
  Pop $R2
  Pop $R1
  Pop $R0
FunctionEnd

Function un.DelFileByLog.StrLoc
  Exch $R0
  Exch
  Exch $R1
  Push $R2
  Push $R3
  Push $R4
  Push $R5
  StrLen $R2 $R0
  StrLen $R3 $R1
  StrCpy $R4 0
  ${Do}
    StrCpy $R5 $R1 $R2 $R4
    ${If} $R5 == $R0
    ${OrIf} $R4 = $R3
      ${ExitDo}
    ${EndIf}
    IntOp $R4 $R4 + 1
  ${Loop}
  ${If} $R4 = $R3
    StrCpy $R0 ""
  ${Else}
    StrCpy $R0 $R4
  ${EndIf}
  Pop $R5
  Pop $R4
  Pop $R3
  Pop $R2
  Pop $R1
  Exch $R0
FunctionEnd

/******************************
 *  以下是安装程序的修复部分  *
 ******************************/
 
Function nsDialogsRepairLeave
  ${NSD_GetState} $RADIO_REPAIR $Checkbox_State_REPAIR
  ${NSD_GetState} $RADIO_REMOVE $Checkbox_State_REMOVE
  ${If} $Checkbox_State_REMOVE == ${BST_CHECKED}
    Exec $UninstallFileName
    Quit
  ${EndIf}
FunctionEnd

Function nsDialogsRepair
  ${if} $UninstallFileName == ""
    Abort
  ${EndIf}
  !insertmacro MUI_HEADER_TEXT "已经安装" "选择您要执行的操作"

 nsDialogs::Create /NOUNLOAD 1018

  ${NSD_CreateLabel} 10u 0u 300u 30u "软件已经安装,请选择您要执行的操作,并点击『下一步(N)』继续"

 ${NSD_CreateRadioButton}  40u 30u 100u 30u "修复或重新安装"
 Pop $RADIO_REPAIR
 ${If} $Checkbox_State_REPAIR == ${BST_CHECKED}
  ${NSD_Check} $RADIO_REPAIR
  ${NSD_GetState} $RADIO_REPAIR $Checkbox_State
 ${EndIf}

  ${NSD_CreateRadioButton}  40u 60u 100u 30u "卸载"
  Pop $RADIO_REMOVE
 ${If} $Checkbox_State_REMOVE == ${BST_CHECKED}
  ${NSD_Check} $RADIO_REMOVE
  ${NSD_GetState} $RADIO_REMOVE $Checkbox_State
 ${EndIf}

  ${If} $Checkbox_State <> ${BST_CHECKED}
    ${NSD_Check} $RADIO_REPAIR
  ${EndIf}
 nsDialogs::Show
FunctionEnd

时间: 2024-09-19 08:52:23

提供修复界面的NSIS安装包的相关文章

已证实Au_.exe是NSIS安装包的一个组成部分与说明_病毒查杀

已证实Au_.exe是NSIS安装包的一个组成部分,不是病毒其卸载360safe时的确会连接如下地址的80端口 60.195.253.85 抓包如下: 源地址:10.1.5.189  端口:1214        目标地址:60.195.253.85  端口:80        TTL: 64        PacketSize:64 协议:TCP                TCP 标志:ACK|URG 0x02 0x04 0x05 0xAC 0x01 0x03 0x03 0x02 0x01

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

原文:NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版 nsis中文版(Nullsoft Scriptable Install System)是一个专业的开源的可以用来封闭Windows程序的实用工具,是一个开源的 Windows 系统下安装程序制作程序.nsis它功能强,源码是直接使用C语言编写而成,并且可以直接到nsis官网下载所有nsis版本,并且提供了详细的帮助文档,方便用户制作时使用.安装页面可以使用Page自定义界面.卸载页面可以配置让用户选择是否删除用户文件.系

建立大容量Web界面的Email系统

web 最近几年来,基于Web的免费Email系统非常流行,当前,几个著名的免费Email网站基本上已经成为大多数人的选择,建立单纯提供免费Email服务的站点不再像以前那样受到热烈欢迎,但是提供Web界面的Email服务已经成为了一个商业站点为其注册成员提供的基本服务之一. 一个Email系统可以分为服务器端和客户端,Web界面的Email系统则是将Email客户放在了Web服务器端,因此Email系统所需要实现的是一个Web界面的Email客户.然而,由于这个Email系统要求用户数量较大,

.net自带的安装工具不好用,第二次安装的时候要求修复,想自己写一个简单的安装包,就是把网站目录及文件进行复制,IIS配制及Sql数据库安装,请大给些思路

问题描述 如题 解决方案 解决方案二:自己顶一下吧,解决方案三:自己用winform或者使用installshell来实现解决方案四:这都自己写啊,有前途..解决方案五:我觉得自带的还可以呀,已经安装过一次了,第二次当然会提示修复了,不过就是卸载要到控制面板才行解决方案六:试一试InnoSetup,免费的.解决方案七:怎么不好用了?我觉得挺好用的啊.一些安装包不能实现的功能,就自己写程序完成,比如IIS配置,或是在SQLSERVER中创建数据库及表记录.解决方案八:自带的安装包好用,可以自己写代

NSIS:制作软件升级安装包

原文 NSIS:制作软件升级安装包 相信不是每个人写的软件都只发布一次就可以了,肯定要有修改和维护的情况发生.在这种情况下,您可能就需要一个软件的升级安装包了.   现在,我们就来一步步把这个安装包做出来.   前提:用户已经使用我们的完整安装包安装过了,且已经在注册表中记录了安装路径.   1 ;在注册表中写入安装路径 2 WriteRegStr HKCU "Software\轻狂的软件" "" $INSTDIR   我们要实现以下功能: 1.运行时检测注册表中是

MySQL 5.6.26几种安装包的区别

http://downloads.mysql.com/archives/community/   一.MySQL Installer 5.6.26 mysql-installer-community-5.6.26.0.msi, 364.2MBMySQL Installer 提供了简单易用.向导式的 MySQL 软件的安装体验过程(目前只支持 Windows),包含的产品有:MySQL Server,所有的 connectors,Workbench 和示例模型,示例数据库,文档.该安装包大而全.

在Visual Studio 2013/2015上使用C#开发Android/IOS安装包和操作步骤

原文:在Visual Studio 2013/2015上使用C#开发Android/IOS安装包和操作步骤 Xamarin 配置手册和离线包下载  http://pan.baidu.com/s/1eQ3qw8a 具体操作: 安装前提条件 1. 安装Visual Studio 2013,安装过程省略,我这里安装的windows10 + vs2013 with update 4. 2. 安装Java SDK,按照Next一步步安装,此处省略,如下图: 3. 安装Android SDK:因为在线安装的

基于InstallShield2013LimitedEdition的安装包制作

原文:基于InstallShield2013LimitedEdition的安装包制作 在VS2012之前,我们做安装包一般都是使用VS自带的安装包制作工具来创建安装包的,VS2012.VS2013以后,微软把这个去掉,集成使用了InstallShield进行安装包的制作了,虽然思路差不多,但是处理还是有很大的不同,本文主要基于VS2013的基础上,介绍使用InstallShield2013LimitedEdition的安装包制作. 1.安装使用InstallShield2013LimitedEd

安装包制作(请看清问题需求回答)

问题描述 安装包制作(请看清问题需求回答) 我想制作一个安装包,之前我用的innosetup,功能全部都能实现了. 但是我还需要修改安装包的界面,不仅仅是简单的换图片,我想整个界面都换掉,最好是能自己设计界面.(innosetup做出来的安装包是有默认窗口的那种蓝色标题的,都是默认的系统风格.) 我去找了下其他安装包,很多都是这种默认风格的,但是也有其他有自定义界面的,比如QQ,360卫士,chrome什么的.我试过(chrome)是能执行/S的静默安装指令的,我想知道有什么安装包制作工具能做这