原文 轻狂写的桌面日历秀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

轻狂写的桌面日历秀NSIS脚本供大家参考学习的更多相关文章

  1. 关于NSIS脚本的Demo

    这个NSIS脚本是打包公司的整个Release项目工程. 用NSIS编译器编译下就可以了. ; Script generated by the HM NIS Edit Script Wizard. ! ...

  2. 全方位掌握nsis脚本

    NSIS 确实是一个不错的安装程序制作软件.新版本 2.0a7 真正实现了中文支持和支持 WinXP 的安装对话框. 不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本. 而 NSIS 的 ...

  3. NSIS脚本入门和进阶方法

    NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能.对于新手来说,它有 ...

  4. NSIS脚本:在卸载页面收集信息

    原文 NSIS脚本:在卸载页面收集信息 此功能用于在软件卸载时收集相关信息,以便进行后续改进.实现功能如图: 以下为实现代码: 01 !include nsDialogs.nsh 02 !includ ...

  5. 基于NSIS脚本开发的安装程序制作软件:易量安装

    原文 基于NSIS脚本开发的安装程序制作软件:易量安装 前几天“萝卜”给我推荐了一款安装程序制作工具——易量安装. 易量安装是一款安装程序制作软件,基于著名的NSIS(Nullsoft Scripta ...

  6. 使用NSIS脚本制作一个安装包

    大部分人第一次看到NSIS脚本都是一脸懵逼的.因为它这个脚本的结构乍一看上去就非常奇怪,不作说明的话是看不懂的. 编写脚本命令的时候要非常注意,命令要按照规定写在脚本中不同的段落里,也就是说,命令的先 ...

  7. 桌面上嵌入窗口(桌面日历)原理探索(将该窗口的Owner设置成桌面的Shell 窗口,可使用SetWindowLong更改窗口的GWL_HWNDPARENT,还要使用SetWindowPos设置Z-Order)

    今天在QQ群里有人问怎样实现将自己的窗口嵌入桌面,让它和桌面融为一体,就像很多桌面日历软件那样. 我当时想到的就是建立一个Child  Window,将他的父窗口设置成桌面Shell窗口就可以了.但是 ...

  8. Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究

    技术经理说,可以用Cmake当中的add_custom_command,add_custom_target命令来使用. 我初次研究了下,add_custom_command应该用官方文档中说明的第二种 ...

  9. NSIS脚本:更改壁纸

    原文 NSIS脚本:更改壁纸 我们在制作主题安装包的时候,经常要进行自动更改壁纸的操作,其实用NSIS实现这一点非常简单.示例代码如下: 01 Name "更改壁纸" 02 Out ...

随机推荐

  1. Android Wear 数据类型和接口的发送和同步数据概述

    Android Wear数据层API,这是google play service部分,通信信道,以你的手持设备和耐磨应用. Api它包含一系列数据对象,可以让系统通过监控和通知行app重要的事件数据层 ...

  2. java线程例子登山

    Through its implementation, this project will familiarize you with the creation and execution of thr ...

  3. jdk并发包 CopyOnWriteArrayList源代码分析

    CopyOnWriteArrayList是jdk1.5并法包里面用于处理高并发下.读多写少的情况下.减少锁等待的集合类.以下对该类实现做一个简要的分析 1,首先CopyOnWriteArrayList ...

  4. Debug with Eclipse

    In this post we are going to see how to develop applications using Eclipse and Portofino 4. The trad ...

  5. Java 中泛型的全面解析(转)

    Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...

  6. 怎么样Eclipse IDE for C/C++ Developers正确编译GTK规划?(解决)

    <span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 25.99 ...

  7. 使用crontab创建 linux 系统定时任务#

    任务1: 每隔1分钟,运行一次 /home/sn/yeelink.sh文件 ,用于上传数据到www.yeelink.net 1. 先在当时目录里面创建一个cronfile文件 vim cronfile ...

  8. Android使用的开发MediaRecorder录制声音

    至 Android 录制声音的应用,Android提供 MediaRecorder 类别.大约MediaRecorder可以参考一个特定的解释<Android开发之MediaRecorder类具 ...

  9. Unity 捕获IronPython脚本错误

    using System; using System.Collections.Generic; using System.IO; using System.Reflection; using Syst ...

  10. opencv2使用形态学滤波对图像进行边缘及角点检測

    #if !defined MORPHOF #define MORPHOF #include <opencv2/core/core.hpp> #include <opencv2/img ...