NSIS实现安装前检测是否安装程序,程序是否运行,安装后关联程序默认打开方式,刷新文件图标
这段时间在公司研究C#程序的安装包尝试了vs自带的setup项目,效果不尽如意跟直接压缩没太大区别。老大让我试试用nullsoft做着试试…在这期间踩了好多好多坑…主要是网上找到的nullsoft教程都不太适合初学者。整理发布下我拼凑的这篇脚本。本人研究有限,仅为了项目开发而研究。高手勿喷。
正文开始,首先是nullsoft的官网,可以在下载页下载nsis。nsis仅是一个编译器
点击compile nsi scripts后把.nsi脚本文件扔进去就可以编译了。
这里是第一个坑…尼玛我才懒得学脚本语言。那好,再下载一个HM NIS Edit,其实嘛脚本文件拿什么文件编辑器打开都可以,但是这个HM NIS Edit自带向导,这就很友好了。这里提醒跟我一样c#的初学者一下打包的文件除了一些.txt文件和.pdb文件外几乎都是需要的…然后可以把需要打包的文件夹(release)先复制一份丢到其他文件夹中像这样
后面跟着向导弄完基本你的安装包就能正常工作了…
然后头疼的地方来了,定制化安装包,实现检测安装时是否在运行本软件,若运行则弹窗终止进程。检测是否安装旧版本,若安装则卸载旧版本。安装后自动关联文件默认打开方式,刷新文件图标。
还是那句话懒得学脚本语言。就白嫖呗。东拼西凑的可以用,有什么需要修改的自己看着办吧。上代码。
; Script generated by the HM NIS Edit Script Wizard.
!include "WordFunc.nsh"
!include "FileAssociation.nsh"
!include "FileFunc.nsh"
!include "nsProcess.nsh"
!include LogicLib.nsh
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "你的产品名字"
!define PRODUCT_VERSION "版本号"
!define PRODUCT_PUBLISHER "公司名"
!define PRODUCT_WEB_SITE "公司网址"
;定义注册表方便验证是否已安装,以及安装的版本
!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\你的软件名.exe"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
;你产品的唯一标识号
!define UninstId "{BDB7DC98-77FE-4859-8B49-C66132185719}"
;定义打包方式,lzma追求最小体积
SetCompressor lzma
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
;定义安装程序图标
!define MUI_ICON "Install2.ico"
;定义卸载程序图标
!define MUI_UNICON "uninstall.ico"
; Language Selection Dialog Settings
!define MUI_LANGDLL_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
!define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
!define MUI_LANGDLL_REGISTRY_VALUENAME "NSIS:Language"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!define MUI_LICENSEPAGE_CHECKBOX
;读取授权文件
!insertmacro MUI_PAGE_LICENSE "D:\repos\你的软件名\bin\x64\打包发布\授权文件.txt"
; Directory page
!insertmacro MUI_PAGE_DIRECTORY
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$INSTDIR\你的软件名.exe"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "SimpChinese"
; Reserve files
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "你的软件名.exe"
;不知道咋回事nsis一直默认写在x86下就干脆写死
InstallDir "C:\Program Files\你的产品名"
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
ShowInstDetails show
ShowUnInstDetails show
;这个必须在调用前(.onit前)定义
!macro UninstallExisting exitcode uninstcommand
Push `${