原文 轻狂写的桌面日历秀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' |
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" |
012 |
RequestExecutionLevel admin |
014 |
; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------ |
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" |
027 |
!define MUI_FINISHPAGE_RUN_TEXT "运行桌面日历秀" |
030 |
!insertmacro MUI_PAGE_WELCOME |
032 |
!define MUI_LICENSEPAGE_CHECKBOX |
033 |
!insertmacro MUI_PAGE_LICENSE "license.rtf" |
035 |
!insertmacro MUI_PAGE_COMPONENTS |
037 |
!define MUI_PAGE_CUSTOMFUNCTION_show Pageshow |
038 |
!insertmacro MUI_PAGE_DIRECTORY |
040 |
!insertmacro MUI_PAGE_INSTFILES |
042 |
!define MUI_FINISHPAGE_RUN "$INSTDIR\XDeskCal.exe" |
043 |
!insertmacro MUI_PAGE_FINISH |
046 |
!insertmacro MUI_UNPAGE_INSTFILES |
049 |
!insertmacro MUI_LANGUAGE "SimpChinese" |
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" |
062 |
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS |
063 |
; ------ MUI 现代界面定义结束 ------ |
065 |
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" |
066 |
OutFile "XDeskCal_Free.exe" |
067 |
InstallDir "D:\Program Files\XDeskCal\" |
068 |
;读取注册中的键值,如果没有,就按默认路径。 |
069 |
InstallDirRegKey HKCU "Software\XDeskCal" "" |
071 |
ShowUnInstDetails show |
072 |
ShowInstDetails hide ;该项默认为show,hide表示不显示安装信息,点击显示按钮后显示。 |
073 |
ShowUnInstDetails hide ;该项同上,卸载过程 |
074 |
BrandingText "轻狂志www.flighty.cn - 编译日期${VER_BUILD}" |
078 |
SetOutPath "$INSTDIR" |
083 |
SectionGroup "快捷方式" SEC02 |
085 |
Section "开始菜单" SEC0201 |
087 |
CreateDirectory "$SMPROGRAMS\桌面日历秀" |
088 |
CreateShortCut "$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk" "$INSTDIR\XDeskCal.exe" |
089 |
CreateShortCut "$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk" "$INSTDIR\卸载程序.exe" |
094 |
CreateShortCut "$DESKTOP\桌面日历秀.lnk" "$INSTDIR\XDeskCal.exe" |
100 |
WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "XDeskCal" "$INSTDIR\XDeskCal.exe" |
104 |
WriteUninstaller "$INSTDIR\卸载程序.exe" |
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}" |
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 |
121 |
/****************************** |
123 |
******************************/ |
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" |
134 |
Delete "$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk" |
135 |
Delete "$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk" |
136 |
Delete "$SMSTARTUP\桌面日历秀.lnk" |
137 |
Delete "$DESKTOP\桌面日历秀.lnk" |
139 |
RMDir "$SMPROGRAMS\桌面日历秀" |
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" |
150 |
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" |
152 |
DeleteRegKey /ifempty HKCU "Software\XDeskCal" |
154 |
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "XDeskCal" |
159 |
ReadRegStr $0 HKCU "Software\XDeskCal" "" |
163 |
FindWindow $0 "#32770" "" $HWNDPARENT |
164 |
GetDlgItem $0 $0 1001 |
167 |
FindWindow $0 "#32770" "" $HWNDPARENT |
168 |
GetDlgItem $0 $0 1019 |
170 |
FindWindow $0 "#32770" "" $HWNDPARENT |
171 |
GetDlgItem $0 $0 1006 |
172 |
SendMessage $0 ${WM_SETTEXT} 0 "STR:您已经安装过 ${PRODUCT_NAME} ,现在进行的覆盖安装不能更改安装目录,如果您需要更改安装目录,请先卸载已经安装的版本之后再运行此安装程序!" |
177 |
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2 |
181 |
Function un.onUninstSuccess |
183 |
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功卸载,您的用户配置和数据文件需要手工删除!" |
|
- 关于NSIS脚本的Demo
这个NSIS脚本是打包公司的整个Release项目工程. 用NSIS编译器编译下就可以了. ; Script generated by the HM NIS Edit Script Wizard. ! ...
- 全方位掌握nsis脚本
NSIS 确实是一个不错的安装程序制作软件.新版本 2.0a7 真正实现了中文支持和支持 WinXP 的安装对话框. 不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本. 而 NSIS 的 ...
- NSIS脚本入门和进阶方法
NSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序.它提供了安装.卸载.系统设置.文件解压缩等功能.对于新手来说,它有 ...
- NSIS脚本:在卸载页面收集信息
原文 NSIS脚本:在卸载页面收集信息 此功能用于在软件卸载时收集相关信息,以便进行后续改进.实现功能如图: 以下为实现代码: 01 !include nsDialogs.nsh 02 !includ ...
- 基于NSIS脚本开发的安装程序制作软件:易量安装
原文 基于NSIS脚本开发的安装程序制作软件:易量安装 前几天“萝卜”给我推荐了一款安装程序制作工具——易量安装. 易量安装是一款安装程序制作软件,基于著名的NSIS(Nullsoft Scripta ...
- 使用NSIS脚本制作一个安装包
大部分人第一次看到NSIS脚本都是一脸懵逼的.因为它这个脚本的结构乍一看上去就非常奇怪,不作说明的话是看不懂的. 编写脚本命令的时候要非常注意,命令要按照规定写在脚本中不同的段落里,也就是说,命令的先 ...
- 桌面上嵌入窗口(桌面日历)原理探索(将该窗口的Owner设置成桌面的Shell 窗口,可使用SetWindowLong更改窗口的GWL_HWNDPARENT,还要使用SetWindowPos设置Z-Order)
今天在QQ群里有人问怎样实现将自己的窗口嵌入桌面,让它和桌面融为一体,就像很多桌面日历软件那样. 我当时想到的就是建立一个Child Window,将他的父窗口设置成桌面Shell窗口就可以了.但是 ...
- Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究
技术经理说,可以用Cmake当中的add_custom_command,add_custom_target命令来使用. 我初次研究了下,add_custom_command应该用官方文档中说明的第二种 ...
- NSIS脚本:更改壁纸
原文 NSIS脚本:更改壁纸 我们在制作主题安装包的时候,经常要进行自动更改壁纸的操作,其实用NSIS实现这一点非常简单.示例代码如下: 01 Name "更改壁纸" 02 Out ...
随机推荐
- s有一天,教你开始truts2
写在前面 他也是一个java和java web新秀.此前有过接触java web发展 我想一个小项目.要熟悉struts2开发过程 一个有趣的想法源于教研室项目上的一个功能实现–自己主动识别运营商,去 ...
- 编译gRPC
编译gRPC 目录 一.概述 二.编译gRPC 三.C#中使用gRPC 四.C++中使用gRPC 无论通过哪种语言调用gRPC,都必须要编译gRPC,因为生成proto访问类时,除了产生标准的数据定义 ...
- Swift正在使用NSURLConnection异步下载同步(实例解析)
原版的blog.转载请注明出处 http://blog.csdn.net/hello_hwc 一.同步异步两个概念 简单来讲.同步就是函数或者闭包(objective c中的block)运行完成才干返 ...
- Windows 8 应用开发 - 异步调用
原文:Windows 8 应用开发 - 异步调用 不论是桌面客户端还是Web应用通常会出现处理时间较长的操作,为了在这段时间内不影响用户与应用之间的交互体验,开发人员通常会使用异步调用技术,使 ...
- 【夸QT在十五】ctkPluginFrameWork插件系统Windows编译器
采用ctkPluginFramework作为一个插件系统开发框架确实有很多优点. 有些车站最近收到的一封信,每个人都想用ctkPluginFramework但我不知道如何建立,本教程对谈ctkPlug ...
- MySql模糊查询like通配符简介
%代表随意多个字符 _代表一个字符 在 MySQL中.SQL的模式缺省是忽略大写和小写的 正则模式使用REGEXP和NOT REGEXP操作符. "."匹配不论什么单个的字符.一 ...
- 【原创】纯OO:从设计到编码写一个FlappyBird (二)
第一部分请点这里. 续结前文,本文将实现Game类. 首先是实例变量.由上次的类图可以看出,Game类首先得具有如下实例变量: 0.Judge judge;1.SimpleDraw draw; // ...
- arch linux设备(请参考官方文档,桌面安装没有找到一个好工作后)
首先,启动安装系统(一获得通过vmware虚拟机) 1.设置键盘布局 #loadkeys "us" #设置为美国的键盘布局.一般能够默认就可以 2.建立硬盘的分区 我採用的是fdi ...
- poj 3225 间隙(横截面和填充操作)
http://poj.org/problem?id=3225 一道题又做了一天. .这道题对我来说起初有N多难点. 1:区间的开闭怎样解决. . 2:如何把区间的交并补.对称差转化为对线段树的操作. ...
- PHPSingleton模式的例子
在这篇文章中PHPSingleton模式的解释不一定好!仅举它的一个例子.其目的是为了让自己通过一个例子来加深对Singleton模式的理解!这里,以供参考! 单例:能够简单的理解是通过一个类,仅仅能 ...