!include "LogicLib.nsh"

; 安装程序初始定义常量
!define PRODUCT_NAME "HelloWorld"
!define PRODUCT_VERSION "1.01"
!define PRODUCT_PUBLISHER "大彬出版社"
!define PRODUCT_WEB_SITE "http://www.jiayun.club"
!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"

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"

; 欢迎页面
!insertmacro MUI_PAGE_WELCOME
; 许可协议页面
;!insertmacro MUI_PAGE_LICENSE "..\..\..\..\path\to\licence\YourSoftwareLicence.txt"
; 安装目录选择页面
!define MUI_PAGE_CUSTOMFUNCTION_SHOW installPathCheck
!insertmacro MUI_PAGE_DIRECTORY
; 安装过程页面
!insertmacro MUI_PAGE_INSTFILES
; 安装完成页面
!define MUI_FINISHPAGE_RUN "$INSTDIR\计算器.exe"
!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"
; 读取注册表中的值(1)
InstallDirRegKey HKLM "Software\HelloWorld" "installPath"
InstallDir "$PROGRAMFILES\HelloWorld安装位置"

ShowInstDetails show
ShowUnInstDetails show
DirText "安装向导将把 ${PRODUCT_NAME} 安装在下列文件夹,如果要安装到其他文件夹请单击 [浏览(B)] 进行选择。"

Section "MainSection" SEC01
  ; 把安装路径写进注册表(2)
  WriteRegStr HKLM "Software\HelloWorld" "installPath" $INSTDIR
  SetOutPath "$INSTDIR"
  SetOverwrite ifnewer
  File "计算器.exe"
  CreateDirectory "$SMPROGRAMS\My application"
  CreateShortCut "$SMPROGRAMS\My application\My application.lnk" "$INSTDIR\计算器.exe"
  CreateShortCut "$DESKTOP\My application.lnk" "$INSTDIR\计算器.exe"
SectionEnd

Section -AdditionalIcons
  WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
  CreateShortCut "$SMPROGRAMS\My application\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url"
  CreateShortCut "$SMPROGRAMS\My application\Uninstall.lnk" "$INSTDIR\uninst.exe"
SectionEnd

Section -Post
  WriteUninstaller "$INSTDIR\uninst.exe"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\计算器.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}" "DisplayIcon" "$INSTDIR\计算器.exe"
  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

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

Section Uninstall

; 删除注册表中的值(3)
  DeleteRegKey /ifempty HKLM "Software\HelloWorld"
  Delete "$INSTDIR\${PRODUCT_NAME}.url"
  Delete "$INSTDIR\uninst.exe"
  Delete "$INSTDIR\计算器.exe"

Delete "$SMPROGRAMS\My application\Uninstall.lnk"
  Delete "$SMPROGRAMS\My application\Website.lnk"
  Delete "$DESKTOP\My application.lnk"
  Delete "$SMPROGRAMS\My application\My application.lnk"

RMDir "$SMPROGRAMS\My application"

RMDir "$INSTDIR"

DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"
  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

Function installPathCheck
StrCpy $0 ""
ReadRegStr $0 HKLM Software\HelloWorld "installPath"
StrCmp $0 "" +6
;禁用浏览按钮    
FindWindow $0 "#32770" "" $HWNDPARENT      
GetDlgItem $0 $0 1001    
EnableWindow $0 0    
;禁止编辑目录    
FindWindow $0 "#32770" "" $HWNDPARENT    
GetDlgItem $0 $0 1019    
EnableWindow $0 0   
StrCpy $0 ""
FunctionEnd

以上是脚本文件,逻辑需要添加的代码已经红色标出

本来希望定义个全局变量,在installPathCheck方法中为其赋值,InstallDir直接引用变量,结果不行。原因很多,我也不能断定

nsi学习之 软件重复安装不可以改路径相关推荐

  1. linux系统管理学习笔记之三----软件的安装

    linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  2. python编程需要什么软件-《》 学习python编程需要安装哪些软件?

    python安装教程有没有?最好是视频的 廖雪峰的python教程这里有教程,还是不错的. 学Python要安装哪些软件? 一. 安装python 1. 从python下载相应的python安装包,打 ...

  3. 学习自旋电子学的笔记00:杂谈(闲话) OOMMF软件的安装

    文章目录 前言 一.杂谈 二. OOMMF软件的安装 1.TK环境的安装 2.下载OOMMF资源包 总结 年年岁岁花相似,岁岁年年人不同.--刘希夷<代悲白头翁> 前言 时光飞逝,日月如梭 ...

  4. ubuntu系统vim常用命令学习以及ubuntu软件下载安装

    文章目录 一.ubuntu系统vim常用命令学习 (一)进入进入vim编辑器的方式 (二)vi的三种工作方式 (三)退出vi的命令 (四)命令模式下的各种命令 1.光标移动命令 2.插入命令 3.删除 ...

  5. DSP(TMSF280049C)学习笔记1:软件的安装与新工程的建立

    DSP(TMSF280049C)学习笔记1:软件的安装与新工程的建立 初次接触DSP(TMSF280049C)这款开发板,主要对学习的过程进行记录,因为是初次学习,可能有些地方存在错误,还请各位大神帮 ...

  6. Linux学习笔记4-三种不同类型的软件的安装(绿色软件、rpm软件、源代码软件)...

    在Linux下软件分三种: 1.绿色软件:即不用安装直接就能用的软件 2.rpm安装包:以rpm结尾的可执行文件  3.源码文件:没有进行过编译和打包的文件,需要编译后再进行安装 一.绿色软件的安装 ...

  7. Linux学习笔记——软件安装

    环境变量 当我们执行一个命令的时候,默认从当前路径开始查找.如果当前路径找不到对应的命令文件,从环境变量$PATH查找. $PATH的配置文件在/etc/profile window路径与路径之间用' ...

  8. Linux中你必须学习的软件安装工具yum(以及必须得安装的软件)

    目录 1. Linux下的软件安装方式 2.什么是yum 3.如何使用yum安装 3.1 查看yum中可下载软件 3.2* yum安装相应软件 3.3 yum卸载相应软件 4 配置yum源 4.1 为 ...

  9. Linux安全运维学习⑤ ---- yum工具进行软件的安装与卸载 (与依赖关系列表理解)

    需求:卸载vim编辑器工具 1.该软件的名称 rpm -qa | grep "vim" 一共发现了四个相关文件 2.卸载 rpm -e 卸载common 需要先卸载 enhance ...

最新文章

  1. php layui table,layui table 相关问题汇总
  2. 修改远程桌面连接端口
  3. 第一次搭建vue项目--安装vue-cli、初始化项目
  4. 发布一个实体类属性生成小工具,给开发加点料
  5. C++之抽象基类与纯虚函数
  6. bundlefusion论文阅读笔记
  7. Storm任务提交过程及目录树介绍
  8. socket编程五种模型
  9. 如何查找完全二叉树最后一层的最右边的结点
  10. torch运行错误libcudnn Unsupported HDF5 version: 1.10.2错误
  11. unity 插件uniwebview 内嵌H5游戏
  12. Hexo博客之速度优化
  13. 光继电器一体化控制实训系统
  14. 程序员工资高,到底程序员的工资有多高?你不了解的程序员!
  15. NDoc: How to Make Good Use of Your XML Comments?
  16. python携程怎么做数据同步_python协程中同步如何使用?
  17. Devops之制品库平台nexus实践
  18. zufe 2527问题 K: Jelly与狗头人的地下世界
  19. 目前最好用的云电脑排行有哪些?免费阿里云无影云电脑
  20. spring利用Druid实现sql监控界面

热门文章

  1. k8s系列08-负载均衡器之PureLB
  2. python检测屏幕亮点_使用Python和OpenCV检测图像中的多个亮点
  3. 职场办公居然不会打印?纸型、单双面及PPT打印设置,干货教程!
  4. 获取今天是今年的第几周
  5. windows故障转移群集和mysql_搭建Windows故障转移群集
  6. 功能安全标准ISO26262-1翻译
  7. 30、基于51单片机交通灯车流量管控数码管显示系统设计
  8. 从0开始搭建低代码平台系列(系统设计与规划)
  9. 解决方案|AttributeError: (module ‘scipy.sparse‘ has no attribute ‘coo_array‘)
  10. 瞩目!2019 Google Play Awards 提名名单揭晓!