轻狂写的桌面日历秀NSIS脚本供大家参考学习

简介: 原文 轻狂写的桌面日历秀NSIS脚本供大家参考学习 现在共享桌面日历秀的NSIS脚本,以便交流学习。此脚本实现的功能如下:7-Zip打开看不到内容。自动读取原安装路径,如果有则不允许更改。取得编译日期。

原文 轻狂写的桌面日历秀NSIS脚本供大家参考学习

现在共享桌面日历秀的NSIS脚本,以便交流学习。此脚本实现的功能如下:

7-Zip打开看不到内容。
自动读取原安装路径,如果有则不允许更改。
取得编译日期。
自定义欢迎页面文字。
自定义图标。
文件版本声明。
多区段可选安装。
……

安装效果参考http://www.flighty.cn/html/soft/20101001_101.html

代码如下:

001 ;增加一个包含链接内容的7z压缩包到可执行文件头部,使7-Zip打开看不到其他内容。
002 !packhdr temp.dat 'cmd /c Copy /B temp.dat /B +轻狂志.7z temp.dat'
003  
004 ; 安装程序初始定义常量
005 !define PRODUCT_NAME "桌面日历秀"
006 !define PRODUCT_VERSION "3.1.0 免费版"
007 !define PRODUCT_UNINST_KEY"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
008 !define PRODUCT_UNINST_ROOT_KEY "HKLM"
009 !define /date VER_BUILD "%Y.%m.%d"
010  
011 SetCompressor lzma
012 RequestExecutionLevel admin
013  
014 ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------
015 !include "MUI.nsh"
016  
017 ; MUI 预定义常量
018 !define MUI_ABORTWARNING
019 !define MUI_HEADERIMAGE
020 !define MUI_HEADERIMAGE_BITMAP "modern-header.bmp"
021 !define MUI_ICON "ico.ico"
022 !define MUI_UNICON "unico.ico"
023 !define MUI_WELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp"
024 !define MUI_WELCOMEPAGE_TITLE "\r\n    桌面日历秀 3.1.0 免费版"
025 !define MUI_WELCOMEPAGE_TEXT "\r\n    桌面日历秀是一款优秀的桌面日历和个人信息管理软件。\r\n\r\n    此版本已经剔除了原安装包中的haozip和百度搜霸,安装过程中可以自动进行软件注册而无任何功能或时间限制,所以命名为“免费版”。\r\n\r\n    桌面日历秀原始文件收集于网络,您使用该软件时所享受到的主要功能,皆为原始作者的开发成果。使用此软件是您的自由选择,轻狂志(www.flighty.cn)并不对可能由此给您带来的任何损失负责。如果您认为该软件具有实用价值,请从正式渠道获得授权许可。\r\n\r\n    $_CLICK"
026  
027 !define MUI_FINISHPAGE_RUN_TEXT "运行桌面日历秀"
028  
029 ; 欢迎页面
030 !insertmacro MUI_PAGE_WELCOME
031 ; 许可协议页面
032 !define MUI_LICENSEPAGE_CHECKBOX
033 !insertmacro MUI_PAGE_LICENSE "license.rtf"
034 ; 组件选择页面
035 !insertmacro MUI_PAGE_COMPONENTS
036 ; 安装目录选择页面
037 !define MUI_PAGE_CUSTOMFUNCTION_show Pageshow
038 !insertmacro MUI_PAGE_DIRECTORY
039 ; 安装过程页面
040 !insertmacro MUI_PAGE_INSTFILES
041 ; 安装完成页面
042 !define MUI_FINISHPAGE_RUN "$INSTDIR\XDeskCal.exe"
043 !insertmacro MUI_PAGE_FINISH
044  
045 ; 安装卸载过程页面
046 !insertmacro MUI_UNPAGE_INSTFILES
047  
048 ; 安装界面包含的语言设置
049 !insertmacro MUI_LANGUAGE "SimpChinese"
050  
051 ;文件版本声明
052   VIProductVersion "3.1.0.1225"
053   VIAddVersionKey /LANG=2052 "ProductName" "桌面日历秀免费版"
054   VIAddVersionKey /LANG=2052 "Comments" "免费使用,不限分发。"
055   VIAddVersionKey /LANG=2052 "CompanyName" "www.flighty.cn"
056   VIAddVersionKey /LANG=2052 "LegalTrademarks" "flighty"
057   VIAddVersionKey /LANG=2052 "LegalCopyright" "轻狂志"
058   VIAddVersionKey /LANG=2052 "FileDescription" "桌面日历秀免费版"
059   VIAddVersionKey /LANG=2052 "FileVersion" "3.1.0.1225"
060  
061 ; 安装预释放文件
062 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
063 ; ------ MUI 现代界面定义结束 ------
064  
065 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
066 OutFile "XDeskCal_Free.exe"
067 InstallDir "D:\Program Files\XDeskCal\"
068 ;读取注册中的键值,如果没有,就按默认路径。
069 InstallDirRegKey HKCU "Software\XDeskCal" ""
070 ShowInstDetails show
071 ShowUnInstDetails show
072 ShowInstDetails hide ;该项默认为show,hide表示不显示安装信息,点击显示按钮后显示。
073 ShowUnInstDetails hide ;该项同上,卸载过程
074 BrandingText "轻狂志www.flighty.cn - 编译日期${VER_BUILD}"
075  
076 Section "主程序" SEC01
077   SectionIn RO
078   SetOutPath "$INSTDIR"
079   SetOverwrite ifnewer
080   File /r "桌面日历秀\*.*"
081 SectionEnd
082  
083 SectionGroup "快捷方式" SEC02
084  
085   Section "开始菜单" SEC0201
086   SectionIn 1
087   CreateDirectory "$SMPROGRAMS\桌面日历秀"
088   CreateShortCut "$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk""$INSTDIR\XDeskCal.exe"
089   CreateShortCut "$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk" "$INSTDIR\卸载程序.exe"
090   SectionEnd
091  
092   Section "桌面" SEC0202
093    SectionIn 1
094   CreateShortCut "$DESKTOP\桌面日历秀.lnk" "$INSTDIR\XDeskCal.exe"
095   SectionEnd
096  
097 SectionGroupEnd
098  
099 Section "自动运行" SEC03
100 WriteRegStr   HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run""XDeskCal" "$INSTDIR\XDeskCal.exe"
101 SectionEnd
102  
103 Section -Post
104   WriteUninstaller "$INSTDIR\卸载程序.exe"
105 ;把用户选择的安装路径写入注册表中
106   WriteRegStr HKCU "Software\XDeskCal" "" $INSTDIR
107   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayName" "$(^Name)"
108   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""UninstallString" "$INSTDIR\uninst.exe"
109   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}""DisplayVersion" "${PRODUCT_VERSION}"
110 SectionEnd
111  
112 ; 区段组件描述
113 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
114   !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "桌面日历秀的主程序,必选!"
115   !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "快捷方式可选安装。"
116   !insertmacro MUI_DESCRIPTION_TEXT ${SEC0201} "开始菜单快捷方式。"
117   !insertmacro MUI_DESCRIPTION_TEXT ${SEC0202} "桌面快捷方式。"
118   !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "选择操作系统启动时是否自动运行桌面日历秀。"
119 !insertmacro MUI_FUNCTION_DESCRIPTION_END
120  
121 /******************************
122  *  以下是安装程序的卸载部分  *
123  ******************************/
124  
125 Section Uninstall
126   Delete "$INSTDIR\config.ini"
127   Delete "$INSTDIR\GdiPlus.dll"
128   Delete "$INSTDIR\Update.exe"
129   Delete "$INSTDIR\update.URS"
130   Delete "$INSTDIR\UpdateLang.ini"
131   Delete "$INSTDIR\XDeskCal.exe"
132   Delete "$INSTDIR\卸载程序.exe"
133  
134   Delete "$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk"
135   Delete "$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk"
136   Delete "$SMSTARTUP\桌面日历秀.lnk"
137   Delete "$DESKTOP\桌面日历秀.lnk"
138  
139   RMDir "$SMPROGRAMS\桌面日历秀"
140  
141   RMDir /r "$INSTDIR\Res"
142   RMDir /r "$INSTDIR\PluginSkins"
143   RMDir /r "$INSTDIR\mainskins"
144   RMDir /r "$INSTDIR\icon"
145   RMDir "$INSTDIR\DataBackup"
146   RMDir "$INSTDIR\Data"
147  
148   RMDir "$INSTDIR"
149  
150   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
151   ;卸载注册表中安装路径的键值
152   DeleteRegKey /ifempty HKCU "Software\XDeskCal"
153   ;卸载注册表中自动运行的键值
154   DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run""XDeskCal"
155   SetAutoClose true
156 SectionEnd
157  
158 Function Pageshow
159   ReadRegStr $0 HKCU "Software\XDeskCal" ""
160   ${If} $0 == ""
161   ${Else}
162   ;禁用浏览按钮
163   FindWindow $0 "#32770" "" $HWNDPARENT
164   GetDlgItem $0 $0 1001
165   EnableWindow $0 0
166   ;禁用编辑的目录
167   FindWindow $0 "#32770" "" $HWNDPARENT
168   GetDlgItem $0 $0 1019
169   EnableWindow $0 0
170   FindWindow $0 "#32770" "" $HWNDPARENT
171   GetDlgItem $0 $0 1006
172   SendMessage $0 ${WM_SETTEXT} 0 "STR:您已经安装过 ${PRODUCT_NAME} ,现在进行的覆盖安装不能更改安装目录,如果您需要更改安装目录,请先卸载已经安装的版本之后再运行此安装程序!"
173   ${EndIf}
174 FunctionEnd
175  
176 Function un.onInit
177   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2
178   Abort
179 FunctionEnd
180  
181 Function un.onUninstSuccess
182   HideWindow
183   MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功卸载,您的用户配置和数据文件需要手工删除!"
184 FunctionEnd
目录
相关文章
|
3月前
|
JSON 开发工具 数据格式
基于Python开发的火车票分析助手(源码+可执行程序+程序配置说明书+程序使用说明书)
基于Python开发的火车票分析助手(源码+可执行程序+程序配置说明书+程序使用说明书)
|
API
【工具推荐】 Obsidian 插件 Obsidian to Flomo 一键同步内容到 Flomo 插件
Obsidian to Flomo 是一款可以一键发送内容到 Flomo 的Obsidian 插件。
654 0
|
3月前
|
定位技术 开发工具 Python
基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的玛丽大冒险小游戏(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
|
3月前
|
开发工具 Python Windows
基于Python开发的飞机大战小游戏彩色版(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
基于Python开发的飞机大战小游戏彩色版(源码+可执行程序exe文件+程序配置说明书+程序使用说明书)
|
4月前
|
C# 数据库
C#桌面文案小工具 ,详细带解说图(带源码)
C#桌面文案小工具 ,详细带解说图(带源码)
|
10月前
|
前端开发 Python
Tkinter模块GUI界面化编程实战(六)——超级游戏盒子(含超详解及完整源码、完整程序免费下载链接)
Tkinter模块GUI界面化编程实战(六)——超级游戏盒子(含超详解及完整源码、完整程序免费下载链接)
114 0
|
11月前
|
开发工具 UED 开发者
在微信小游戏制作工具中实现各种效果和功能的按钮
在游戏设计中有一个名词叫“反馈”,大体就是指当玩家在进行游戏时,游戏所给予玩家的一些东西,比如常见的在点击按钮时,按钮会变换颜色,或进行缩放,或播放音效等等。总之,不论玩家在游戏中进行任何的操作,游戏都应该给予玩家一个合理的反馈。让玩家能够明白他的操作所获得的结果是什么。
256 0
|
11月前
|
存储 Serverless
微信小游戏制作工具中的函数应该如何使用
在微信小游戏制作工具中是没有私有函数这个概念的,也就是说所有的函数都是公共的,大家都可以使用,而且函数也没有返回值的概念,想拿到函数运行的结果只能通过设置一个全局变量,将结果存储在全局变量中,然后通过这个全局变量来使用。这种方法有很多的弊端,尤其是在有大量的克隆体存在时,每个克隆体都使用同一个函数,都去设置同一个全局变量,就会造成意想不到的结果。
211 0
|
安全 数据安全/隐私保护 图形学
想要保护程序?加密狗太麻烦,试试这个吧(Unity3D)
在使用Unity进行软件开发的时候,会遇到实现程序的使用次数限制,以及使用的时间区间限制,说白就是保护程序的一种措施。我们用的方法是,新建注册表,增加键值对,修改键值,完成对程序的使用权限控制。当然还有更加安全的方法,包括获取硬盘编号,还有电子狗加密等等,这些就以后讨论。