原文 轻狂写的桌面日历秀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. 初识google多语言通信框架gRPC系列(一)概述

    gRPC概述 3/26/2016 9:16:08 AM 目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 一直在寻找多平台多语言的通信框架,微软的WCF框架很强大和灵 ...

  2. Matlab绘图-很详细,很全面

    强大的绘图功能是Matlab的特点之一,Matlab提供了一系列的绘图函数,用户不需要过多的考虑绘图的细节,只需要给出一些基本参数就能得到 所需图形,这类函数称为高层绘图函数.此外,Matlab还提供 ...

  3. Java进阶 创建和销毁对象

    最近准备写点Javase的东西,希望可以帮助大家写出更好的代码. 1.给不可实例化的类提供私有构造器 比如:每个项目中都有很多工具类,提供了很多static类型的方法供大家使用,谁也不希望看到下面的代 ...

  4. C++学习笔记9-运算符重载

    1. 重载运营商必须有一个类类型的操作数 对于内置类型运营商.它的意义不能改变. 例如,内置整数加法运算不能被重新定义: // error: cannotredefine built-in opera ...

  5. js jquery版本号 金额千分之一转换功能(非规范,高效率)

    没想到js将没有 金额千分之一格处理器类型(例子:1,234.01 这种格公式).互联网搜索圈,我们使用的是常规方式.常规效率受宠若惊啊.和资源密集型,速度慢(虽然处理起来会很直观). 因此专门写一个 ...

  6. IIS7构造Gzip压缩

    IIS7构造Gzip压缩 本文来自Kevin Yang博客 作者:Kevin Yang 开启配置HTTP压缩(GZip) 在IIS7中配置Gzip压缩相比IIS6来说实在easy了很多.并且默认情况下 ...

  7. 解决apache+tomcatserver环境中文乱码的问题

    在使用apache做转发服务器时,碰到了中文乱码的问题. 说说解决思路: 1.通常乱码是由于编码不统一造成的.所以要先推断是不是由于编码问题造成的,假设是的话,那统一编码就能够去解决. 2.tomca ...

  8. WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法

    原文:WMI 获取硬件信息的封装函数与获取联想台式机的出厂编号方法 今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取 某部分的 ...

  9. Linux 编程学习笔记----过程管理和项目发展(在)

    转载请注明出处,http://blog.csdn.net/suool/article/details/38406211,谢谢. Linux进程存储结构和进程结构 可运行文件结构 例如以下图: 能够看出 ...

  10. 新秀系列C/C++经典问题(六)

    类包含一个指向成员复制 称号:下面是类和执行的阵列的声明.题.并针对存在的问题提出几种解决方式. template<typename T> class Array { public: Ar ...