原文 轻狂写的桌面日历秀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. s有一天,教你开始truts2

    写在前面 他也是一个java和java web新秀.此前有过接触java web发展 我想一个小项目.要熟悉struts2开发过程 一个有趣的想法源于教研室项目上的一个功能实现–自己主动识别运营商,去 ...

  2. 编译gRPC

    编译gRPC 目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 无论通过哪种语言调用gRPC,都必须要编译gRPC,因为生成proto访问类时,除了产生标准的数据定义 ...

  3. Swift正在使用NSURLConnection异步下载同步(实例解析)

    原版的blog.转载请注明出处 http://blog.csdn.net/hello_hwc 一.同步异步两个概念 简单来讲.同步就是函数或者闭包(objective c中的block)运行完成才干返 ...

  4. Windows 8 应用开发 - 异步调用

    原文:Windows 8 应用开发 - 异步调用     不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使 ...

  5. 【夸QT在十五】ctkPluginFrameWork插件系统Windows编译器

    采用ctkPluginFramework作为一个插件系统开发框架确实有很多优点. 有些车站最近收到的一封信,每个人都想用ctkPluginFramework但我不知道如何建立,本教程对谈ctkPlug ...

  6. MySql模糊查询like通配符简介

    %代表随意多个字符  _代表一个字符 在 MySQL中.SQL的模式缺省是忽略大写和小写的 正则模式使用REGEXP和NOT REGEXP操作符. "."匹配不论什么单个的字符.一 ...

  7. 【原创】纯OO:从设计到编码写一个FlappyBird (二)

    第一部分请点这里. 续结前文,本文将实现Game类. 首先是实例变量.由上次的类图可以看出,Game类首先得具有如下实例变量: 0.Judge judge;1.SimpleDraw draw; // ...

  8. arch linux设备(请参考官方文档,桌面安装没有找到一个好工作后)

    首先,启动安装系统(一获得通过vmware虚拟机) 1.设置键盘布局 #loadkeys "us" #设置为美国的键盘布局.一般能够默认就可以 2.建立硬盘的分区 我採用的是fdi ...

  9. poj 3225 间隙(横截面和填充操作)

    http://poj.org/problem?id=3225 一道题又做了一天. .这道题对我来说起初有N多难点. 1:区间的开闭怎样解决. . 2:如何把区间的交并补.对称差转化为对线段树的操作. ...

  10. PHPSingleton模式的例子

    在这篇文章中PHPSingleton模式的解释不一定好!仅举它的一个例子.其目的是为了让自己通过一个例子来加深对Singleton模式的理解!这里,以供参考! 单例:能够简单的理解是通过一个类,仅仅能 ...