NSIS实现安装前检测是否安装程序,程序是否运行,安装后关联程序默认打开方式,刷新文件图标

本文介绍了如何使用nullsoft NSIS来创建C#程序的安装包,包括安装前检查程序是否运行,检测并卸载旧版本,以及安装后关联程序默认打开方式和刷新文件图标。作者分享了遇到的困难和解决方法,并提供了相关脚本资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这段时间在公司研究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 `${
     
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值