zoukankan      html  css  js  c++  java
  • 使用 NSIS 制作安装包

    安装包下载地址 :

      链接:https://pan.baidu.com/s/1XluHOPgKDV3haZ07DNB2cw
      提取码:gsbw

    将 Debug 目录拷贝到E盘根目录

    制作步骤 :

    打开 NSIS 弹出框如下 , 点击 【可视化脚本编辑器(VNISEdit)】

     弹出页面如下 :

     选择【使用脚本向导创建新的脚本文件】,点击【确定】按钮

    点击【下一步】

     修改应用程序名称等参数 , 点击【下一步】

    点击【下一步】 

     (安装包不需要多么花哨,不需要修改)

    点击【下一步】

      授权文件输入框清空   

      (一般默认目录为 $PROGRAMFILES双录插件

    点击【下一步】 

     删除两个无效的安装路径

    点击AddDirTree 按钮

    选择要打包的文件,直接把要打包的目录内容全部添加进来,注意两处*.*,以及勾选“包含子目录”,不要勾选”单独添加每个文件“,编译的时候会把所有的文件打包进来的

    点击【确定按钮】

     

     点击【下一步】

     点击【下一步】

    点击【下一步】

    点击【下一步】

     

    勾选”保存脚本“,以及”转换文件路径到相对路径“

    点击【完成】

    保存脚本

     脚本如下 :

    ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
    
    ; 安装程序初始定义常量
    !define PRODUCT_NAME "双录插件"
    !define PRODUCT_VERSION "1.0"
    !define PRODUCT_PUBLISHER "gdl"
    !define PRODUCT_UNINST_KEY "SoftwareMicrosoftWindowsCurrentVersionUninstall${PRODUCT_NAME}"
    !define PRODUCT_UNINST_ROOT_KEY "HKLM"
    
    SetCompressor lzma
    
    ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
    !include "MUI.nsh"
    
    ; MUI 预定义常量
    !define MUI_ABORTWARNING
    !define MUI_ICON "${NSISDIR}ContribGraphicsIconsmodern-install.ico"
    !define MUI_UNICON "${NSISDIR}ContribGraphicsIconsmodern-uninstall.ico"
    
    ; 欢迎页面
    !insertmacro MUI_PAGE_WELCOME
    ; 安装目录选择页面
    !insertmacro MUI_PAGE_DIRECTORY
    ; 安装过程页面
    !insertmacro MUI_PAGE_INSTFILES
    ; 安装完成页面
    !insertmacro MUI_PAGE_FINISH
    
    ; 安装卸载过程页面
    !insertmacro MUI_UNPAGE_INSTFILES
    
    ; 安装界面包含的语言设置
    !insertmacro MUI_LANGUAGE "SimpChinese"
    
    ; 安装预释放文件
    !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
    ; ------ MUI 现代界面定义结束 ------
    
    Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
    OutFile "Setup.exe"
    InstallDir "C:双录插件"
    ShowInstDetails show
    ShowUnInstDetails show
    
    Section "MainSection" SEC01
      SetOutPath "$INSTDIR*.*"
      SetOverwrite ifnewer
      File /r "E:Debug*.*"
    SectionEnd
    
    Section -AdditionalIcons
      SetOutPath $INSTDIR
      CreateDirectory "$SMPROGRAMS双录插件"
      CreateShortCut "$SMPROGRAMS双录插件Uninstall.lnk" "$INSTDIRuninst.exe"
    SectionEnd
    
    Section -Post
      WriteUninstaller "$INSTDIRuninst.exe"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIRuninst.exe"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
    SectionEnd
    
    /******************************
     *  以下是安装程序的卸载部分  *
     ******************************/
    
    Section Uninstall
      Delete "$INSTDIRuninst.exe"
    
      Delete "$SMPROGRAMS双录插件Uninstall.lnk"
    
      RMDir "$SMPROGRAMS双录插件"
    
      RMDir /r "$INSTDIR*.*"
    
      RMDir "$INSTDIR"
    
      DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
      SetAutoClose true
    SectionEnd
    
    #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
    
    Function un.onInit
      MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
      Abort
    FunctionEnd
    
    Function un.onUninstSuccess
      HideWindow
      MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
    FunctionEnd

    点击 【编译脚本则生成Steup.exe安装包】

    ======================================================================

    完整代码 

    ; 该脚本使用 HM VNISEdit 脚本编辑器向导产生
    
    ; 安装程序初始定义常量
    !define PRODUCT_NAME "双录插件"
    !define PRODUCT_VERSION "1.0"
    !define PRODUCT_PUBLISHER "gdl"
    !define PRODUCT_UNINST_KEY "SoftwareMicrosoftWindowsCurrentVersionUninstall${PRODUCT_NAME}"
    !define PRODUCT_UNINST_ROOT_KEY "HKLM"
    
    SetCompressor lzma
    
    ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
    !include "MUI.nsh"
    
    ; MUI 预定义常量
    !define MUI_ABORTWARNING
    ; gdl : 修改安装文件和卸载文件的图标(暂未修改)
    !define MUI_ICON "${NSISDIR}ContribGraphicsIconsmodern-install.ico"
    !define MUI_UNICON "${NSISDIR}ContribGraphicsIconsmodern-uninstall.ico"
    
    
    ; 欢迎页面
    !insertmacro MUI_PAGE_WELCOME
    ; 安装目录选择页面
    !insertmacro MUI_PAGE_DIRECTORY
    ; 安装过程页面
    !insertmacro MUI_PAGE_INSTFILES
    
    ; gdl : 开机启动
    !define MUI_FINISHPAGE_SHOWREADME
    !define MUI_FINISHPAGE_SHOWREADME_Function AutoBoot
    !define MUI_FINISHPAGE_SHOWREADME_TEXT "开机自动启动"
    
    ; gdl : 安装后运行
    !define MUI_FINISHPAGE_RUN
    !define MUI_FINISHPAGE_RUN_NOTCHECKED
    !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink"
    !define MUI_FINISHPAGE_RUN_TEXT "安装后运行双录对媒体插件"
    
    ; 安装完成页面
    !insertmacro MUI_PAGE_FINISH
    
    ; 安装卸载过程页面
    !insertmacro MUI_UNPAGE_INSTFILES
    
    ; 安装界面包含的语言设置
    !insertmacro MUI_LANGUAGE "SimpChinese"
    
    ; 安装预释放文件
    !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
    ; ------ MUI 现代界面定义结束 ------
    
    Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
    OutFile "Setup.exe"
    InstallDir "D:qbsoft"
    ShowInstDetails show
    ShowUnInstDetails show
    ; gdl : 以管理员身份执行程序
    RequestExecutionLevel admin
    
    Section "MainSection" SEC01
      SetOutPath "$INSTDIR*.*"
      SetOverwrite ifnewer
      File /r "E:Debug*.*"
    
      ;CreateShortCut "$INSTDIR延迟启动双录插件.lnk" "$INSTDIR延迟启动双录插件.vbs"
      CreateShortCut "$DESKTOPQbBrowser.lnk" "$INSTDIRQbBrowser.exe"
      CreateShortCut "$DESKTOPQBRecords.lnk" "$INSTDIRQBRecords.exe"
    
      ;创建快捷方式  , 用于开机启动
      CreateShortCut "$INSTDIRQBRecords.lnk" "$INSTDIRQBRecords.exe" "-hide"
    
      ;CreateDirectory "$SMPROGRAMS双录插件"
    
      
    SectionEnd
    
    Section -AdditionalIcons
      SetOutPath $INSTDIR
      CreateDirectory "$SMPROGRAMS双录插件"
      CreateShortCut "$SMPROGRAMS双录插件Uninstall.lnk" "$INSTDIRuninst.exe"
      
      CreateShortCut "$SMPROGRAMS双录插件QbBrowser.lnk" "$INSTDIRQbBrowser.exe"
      CreateShortCut "$SMPROGRAMS双录插件QBRecords.lnk" "$INSTDIRQBRecords.exe"
      
    SectionEnd
    
    Section -Post
      WriteUninstaller "$INSTDIRuninst.exe"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIRuninst.exe"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
      WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
    SectionEnd
    
    /******************************
     *  以下是安装程序的卸载部分  *
     ******************************/
    
    Section Uninstall
    
      Delete "$SMPROGRAMS双录插件Uninstall.lnk"
      
      ; gdl : 删除快捷方式
      Delete "$DESKTOPQbBrowser.lnk"
      Delete "$DESKTOPQBRecords.lnk"
      Delete "$SMPROGRAMS双录插件*.lnk"
      Delete "$SMSTARTUP延迟启动双录插件.lnk"
      Delete "$SMSTARTUP延迟启动双录插件.vbs"
      
      Delete "$INSTDIRuninst.exe"
    
      RMDir "$SMPROGRAMS双录插件"
    
      RMDir /r "$INSTDIR*.*"
    
      RMDir "$INSTDIR"
    
      DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
      
      SetAutoClose true
    SectionEnd
    
    
    
    Section -.NET Framework
      ;检测是否是需要的.NET Framework版本
      Call GetNetFrameworkVersion
      Pop $R1
      ;${If} $R1 < '2.0.50727'
      ;${If} $R1 < '3.5.30729.4926'
      ${If} $R1 < '4.0.30319'
      ;${If} $R1 < '4.5.52747'
        MessageBox MB_YESNO|MB_ICONQUESTION "此软件运行需要.NET Framework 4.0运行环境,但您机器上似乎没有安装此环境。$
    $
    您有两个选择:$
    $
    1.您自己到互联网上下载.NET Framework 4.0安装,然后再运行此软件$
    $
    2.使用此安装程序在线下载并安装.NET Framework 4.0$
    $
    $
    $
    现在在线下载并安装.NET Framework 4.0,请确认您的机器已连接互联网.继续吗?" IDNO +2
          Call DownloadNetFramework4
        ${ENDIF}
    SectionEnd
    
    
    ; 安装前检查程序是否正在运行
    Function .onInit
    FindProcDLL::FindProc "QBRecords.exe"
       Pop $R0
       IntCmp $R0 1 0 no_run
       MessageBox MB_OKCANCEL|MB_ICONSTOP  "安装程序检测到 QBRecords.exe 正在运行。$
    $
    $
    $
    点击 “确定” 强制关闭 QBRecords.exe ,继续安装。$
    $
    点击 “取消” 退出安装程序。" IDCANCEL Exit
       KillProcDLL::KillProc "QBRecords.exe"
       Sleep 1000
       FindProcDLL::FindProc "QBRecords.exe"
       Pop $R0
       IntCmp $R0 1 0 no_run
       Exit:
       Quit
       no_run:
    FunctionEnd
    
    
    #-- 根据 NSIS 脚本编辑规则,所有 Function 区段必须放置在 Section 区段之后编写,以避免安装程序出现未可预知的问题。--#
    ; 卸载前检查程序是否正在运行
    Function un.onInit
      MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
      Abort
      ;检测程序是否运行
      FindProcDLL::FindProc "QBRecords.exe"
      Pop $R0
      IntCmp $R0 1 0 no_run
      KillProcDLL::KillProc "QBRecords.exe"
      Sleep 1000
      FindProcDLL::FindProc "QBRecords.exe"
      Pop $R0
      IntCmp $R0 1 0 no_run
      Quit
      no_run:
    FunctionEnd
    
    
    
    Function un.onUninstSuccess
      HideWindow
      MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功地从您的计算机移除。"
    FunctionEnd
    
    
    
    ; gdl : 开机启动
    Function AutoBoot
    
    ;修改延时启动文件
      FileOpen $1 "$INSTDIR延迟启动双录插件.vbs" w
      FileWrite $1 'Dim delayer$
    $
    '
      FileWrite $1 'Set delayer = CreateObject("WScript.Shell")$
    $
    '
      ; 等待 5 秒后执行
      FileWrite $1 'WScript.sleep 5000$
    $
    '
      ;delayer.Run 不能加参数 (-hide 启动后隐藏到后台运行) , 只能使用快捷方式的方式添加运行参数了
      FileWrite $1 'delayer.Run """$INSTDIRQBRecords.lnk""", 0, FALSE$
    $
    '
      FileWrite $1 'Set delayer = Nothing$
    $
    '
      FileWrite $1 'WScript.quit$
    $
    '
      FileClose $1
      
      ;堆栈模式移动延时启动文件
      Push "$SMSTARTUP延迟启动双录插件.vbs" ;目标文件
      Push "$INSTDIR延迟启动双录插件.vbs" ;来源文件
      System::Call "Kernel32::MoveFileExA(t s,t s,i 2)"
      
    FunctionEnd
    
    ; 安装后立即运行
    Function LaunchLink
      ExecShell "" "$INSTDIRQBRecords.exe"
    FunctionEnd
    
    
    Function GetNetFrameworkVersion
    ;获取.Net Framework版本支持
        Push $1
        Push $0
        ReadRegDWORD $0 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv4Full" "Install"
        ReadRegDWORD $1 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv4Full" "Version"
        StrCmp $0 1 KnowNetFrameworkVersion +1
        ReadRegDWORD $0 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv3.5" "Install"
        ReadRegDWORD $1 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv3.5" "Version"
        StrCmp $0 1 KnowNetFrameworkVersion +1
        ReadRegDWORD $0 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv3.0Setup" "InstallSuccess"
        ReadRegDWORD $1 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv3.0Setup" "Version"
        StrCmp $0 1 KnowNetFrameworkVersion +1
        ReadRegDWORD $0 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv2.0.50727" "Install"
        ReadRegDWORD $1 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv2.0.50727" "Version"
        StrCmp $1 "" +1 +2
        StrCpy $1 "2.0.50727.832"
        StrCmp $0 1 KnowNetFrameworkVersion +1
        ReadRegDWORD $0 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv1.1.4322" "Install"
        ReadRegDWORD $1 HKLM "SOFTWAREMicrosoftNET Framework SetupNDPv1.1.4322" "Version"
        StrCmp $1 "" +1 +2
        StrCpy $1 "1.1.4322.573"
        StrCmp $0 1 KnowNetFrameworkVersion +1
        ReadRegDWORD $0 HKLM "SOFTWAREMicrosoft.NETFrameworkpolicyv1.0" "Install"
        ReadRegDWORD $1 HKLM "SOFTWAREMicrosoft.NETFrameworkpolicyv1.0" "Version"
        StrCmp $1 "" +1 +2
        StrCpy $1 "1.0.3705.0"
        StrCmp $0 1 KnowNetFrameworkVersion +1
        StrCpy $1 "not .NetFramework"
        KnowNetFrameworkVersion:
        Pop $0
        Exch $1
    FunctionEnd
    
    Function DownloadNetFramework2
    ;下载 .NET Framework 2.0 SP2
      NSISdl::download /TRANSLATE2 '正在下载 %s' '正在连接...' '(剩余 1 秒)' '(剩余 1 分钟)' '(剩余 1 小时)' '(剩余 %u 秒)' '(剩余 %u 分钟)' '(剩余 %u 小时)' '已完成:%skB(%d%%) 大小:%skB 速度:%u.%01ukB/s' /TIMEOUT=7500 /NOIEPROXY 'http://download.microsoft.com/download/c/6/e/c6e88215-0178-4c6c-b5f3-158ff77b1f38/NetFx20SP2_x86.exe' '$TEMPNetFx20SP2_x86.exe'
      Pop $R0
      StrCmp $R0 "success" 0 +3
    
      SetDetailsPrint textonly
      DetailPrint "正在安装 .NET Framework 2.0 SP2..."
      SetDetailsPrint listonly
      ExecWait '$TEMPNetFx20SP2_x86.exe /quiet /norestart' $R1
      Delete "$TEMPNetFx20SP2_x86.exe"
    
    FunctionEnd
    
    Function DownloadNetFramework35
    ;下载 .NET Framework 3.5 SP1
      NSISdl::download /TRANSLATE2 '正在下载 %s' '正在连接...' '(剩余 1 秒)' '(剩余 1 分钟)' '(剩余 1 小时)' '(剩余 %u 秒)' '(剩余 %u 分钟)' '(剩余 %u 小时)' '已完成:%skB(%d%%) 大小:%skB 速度:%u.%01ukB/s' /TIMEOUT=7500 /NOIEPROXY 'http://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe' '$TEMPdotnetfx35.exe'
      Pop $R0
      StrCmp $R0 "success" 0 +2
    
      SetDetailsPrint textonly
      DetailPrint "正在安装 .NET Framework 3.5 SP1..."
      SetDetailsPrint listonly
      ExecWait '$TEMPdotnetfx35.exe /quiet /norestart' $R1
      Delete "$TEMPdotnetfx35.exe"
    
    FunctionEnd
    
    Function DownloadNetFramework4
    ;下载 .NET Framework 4.0
      NSISdl::download /TRANSLATE2 '正在下载 %s' '正在连接...' '(剩余 1 秒)' '(剩余 1 分钟)' '(剩余 1 小时)' '(剩余 %u 秒)' '(剩余 %u 分钟)' '(剩余 %u 小时)' '已完成:%skB(%d%%) 大小:%skB 速度:%u.%01ukB/s' /TIMEOUT=7500 /NOIEPROXY 'http://download.microsoft.com/download/9/5/A/95A9616B-7A37-4AF6-BC36-D6EA96C8DAAE/dotNetFx40_Full_x86_x64.exe' '$TEMPdotNetFx40_Full_x86_x64.exe'
      Pop $R0
      StrCmp $R0 "success" 0 +2
    
      SetDetailsPrint textonly
      DetailPrint "正在安装 .NET Framework 4.0 Full..."
      SetDetailsPrint listonly
      ExecWait '$TEMPdotNetFx40_Full_x86_x64.exe /quiet /norestart' $R1
      Delete "$TEMPdotNetFx40_Full_x86_x64.exe"
    
    FunctionEnd
    
    Function DownloadNetFramework45
    ;下载 .NET Framework 4.5
      NSISdl::download /TRANSLATE2 '正在下载 %s' '正在连接...' '(剩余 1 秒)' '(剩余 1 分钟)' '(剩余 1 小时)' '(剩余 %u 秒)' '(剩余 %u 分钟)' '(剩余 %u 小时)' '已完成:%skB(%d%%) 大小:%skB 速度:%u.%01ukB/s' /TIMEOUT=7500 /NOIEPROXY 'http://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe' '$TEMPNDP452-KB2901907-x86-x64-AllOS-ENU.exe'
      Pop $R0
      StrCmp $R0 "success" 0 +2
    
      SetDetailsPrint textonly
      DetailPrint "正在安装 .NET Framework 4.5.2 ..."
      SetDetailsPrint listonly
      ExecWait '$TEMPNDP452-KB2901907-x86-x64-AllOS-ENU.exe /quiet /norestart' $R1
      Delete "$TEMPNDP452-KB2901907-x86-x64-AllOS-ENU.exe"
    
    FunctionEnd
  • 相关阅读:
    flume sink两种类型 file_rool 自定义sing com.mycomm.MySink even if there is only one event, the event has to be sent in an array
    为什么引入进程20年后,又引入线程?
    As of Flume 1.4.0, Avro is the default RPC protocol.
    Google Protocol Buffer 的使用和原理
    Log4j 2
    统一日志 统一订单
    网站行为跟踪 Website Activity Tracking Log Aggregation 日志聚合 In comparison to log-centric systems like Scribe or Flume
    Percolator
    友盟吴磊:移动大数据平台的架构、实践与数据增值
    Twitter的RPC框架Finagle简介
  • 原文地址:https://www.cnblogs.com/hi-gdl/p/12449912.html
Copyright © 2011-2022 走看看