轻狂写的桌面日历秀NSIS脚本供大家参考学习
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
只回答业务咨询
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
现在共享桌面日历秀的NSIS脚本,以便交流学习。此脚本实现的功能如下:
7-Zip打开看不到内容。
自动读取原安装路径,如果有则不允许更改。
取得编译日期。
自定义欢迎页面文字。
自定义图标。
文件版本声明。
多区段可选安装。
……
安装效果参考http://www.flighty.cn/html/soft/20101001_101.html
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
;增加一个包含链接内容的7z压缩包到可执行文件头部,使7-Zip打开看不到其他内容。 !packhdr temp.dat 'cmd /c Copy /B temp.dat /B +轻狂志.7z temp.dat' ; 安装程序初始定义常量 !define PRODUCT_NAME "桌面日历秀" !define PRODUCT_VERSION "3.1.0 免费版" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" !define /date VER_BUILD "%Y.%m.%d" SetCompressor lzma RequestExecutionLevel admin ; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------ !include "MUI.nsh" ; MUI 预定义常量 !define MUI_ABORTWARNING !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "modern-header.bmp" !define MUI_ICON "ico.ico" !define MUI_UNICON "unico.ico" !define MUI_WELCOMEFINISHPAGE_BITMAP "modern-wizard.bmp" !define MUI_WELCOMEPAGE_TITLE "\r\n 桌面日历秀 3.1.0 免费版" !define MUI_WELCOMEPAGE_TEXT "\r\n 桌面日历秀是一款优秀的桌面日历和个人信息管理软件。\r\n\r\n 此版本已经剔除了原安装包中的haozip和百度搜霸,安装过程中可以自动进行软件注册而无任何功能或时间限制,所以命名为“免费版”。\r\n\r\n 桌面日历秀原始文件收集于网络,您使用该软件时所享受到的主要功能,皆为原始作者的开发成果。使用此软件是您的自由选择,轻狂志(www.flighty.cn)并不对可能由此给您带来的任何损失负责。如果您认为该软件具有实用价值,请从正式渠道获得授权许可。\r\n\r\n $_CLICK" !define MUI_FINISHPAGE_RUN_TEXT "运行桌面日历秀" ; 欢迎页面 !insertmacro MUI_PAGE_WELCOME ; 许可协议页面 !define MUI_LICENSEPAGE_CHECKBOX !insertmacro MUI_PAGE_LICENSE "license.rtf" ; 组件选择页面 !insertmacro MUI_PAGE_COMPONENTS ; 安装目录选择页面 !define MUI_PAGE_CUSTOMFUNCTION_show Pageshow !insertmacro MUI_PAGE_DIRECTORY ; 安装过程页面 !insertmacro MUI_PAGE_INSTFILES ; 安装完成页面 !define MUI_FINISHPAGE_RUN "$INSTDIR\XDeskCal.exe" !insertmacro MUI_PAGE_FINISH ; 安装卸载过程页面 !insertmacro MUI_UNPAGE_INSTFILES ; 安装界面包含的语言设置 !insertmacro MUI_LANGUAGE "SimpChinese" ;文件版本声明 VIProductVersion "3.1.0.1225" VIAddVersionKey /LANG=2052 "ProductName" "桌面日历秀免费版" VIAddVersionKey /LANG=2052 "Comments" "免费使用,不限分发。" VIAddVersionKey /LANG=2052 "CompanyName" "www.flighty.cn" VIAddVersionKey /LANG=2052 "LegalTrademarks" "flighty" VIAddVersionKey /LANG=2052 "LegalCopyright" "轻狂志" VIAddVersionKey /LANG=2052 "FileDescription" "桌面日历秀免费版" VIAddVersionKey /LANG=2052 "FileVersion" "3.1.0.1225" ; 安装预释放文件 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; ------ MUI 现代界面定义结束 ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "XDeskCal_Free.exe" InstallDir "D:\Program Files\XDeskCal\" ;读取注册中的键值,如果没有,就按默认路径。 InstallDirRegKey HKCU "Software\XDeskCal" "" ShowInstDetails show ShowUnInstDetails show ShowInstDetails hide ;该项默认为show,hide表示不显示安装信息,点击显示按钮后显示。 ShowUnInstDetails hide ;该项同上,卸载过程 BrandingText "轻狂志www.flighty.cn - 编译日期${VER_BUILD}" Section "主程序" SEC01 SectionIn RO SetOutPath "$INSTDIR" SetOverwrite ifnewer File /r "桌面日历秀\*.*" SectionEnd SectionGroup "快捷方式" SEC02 Section "开始菜单" SEC0201 SectionIn 1 CreateDirectory "$SMPROGRAMS\桌面日历秀" CreateShortCut "$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk" "$INSTDIR\XDeskCal.exe" CreateShortCut "$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk" "$INSTDIR\卸载程序.exe" SectionEnd Section "桌面" SEC0202 SectionIn 1 CreateShortCut "$DESKTOP\桌面日历秀.lnk" "$INSTDIR\XDeskCal.exe" SectionEnd SectionGroupEnd Section "自动运行" SEC03 WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "XDeskCal" "$INSTDIR\XDeskCal.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\卸载程序.exe" ;把用户选择的安装路径写入注册表中 WriteRegStr HKCU "Software\XDeskCal" "" $INSTDIR WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" SectionEnd ; 区段组件描述 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "桌面日历秀的主程序,必选!" !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "快捷方式可选安装。" !insertmacro MUI_DESCRIPTION_TEXT ${SEC0201} "开始菜单快捷方式。" !insertmacro MUI_DESCRIPTION_TEXT ${SEC0202} "桌面快捷方式。" !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "选择操作系统启动时是否自动运行桌面日历秀。" !insertmacro MUI_FUNCTION_DESCRIPTION_END /****************************** * 以下是安装程序的卸载部分 * ******************************/ Section Uninstall Delete "$INSTDIR\config.ini" Delete "$INSTDIR\GdiPlus.dll" Delete "$INSTDIR\Update.exe" Delete "$INSTDIR\update.URS" Delete "$INSTDIR\UpdateLang.ini" Delete "$INSTDIR\XDeskCal.exe" Delete "$INSTDIR\卸载程序.exe" Delete "$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk" Delete "$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk" Delete "$SMSTARTUP\桌面日历秀.lnk" Delete "$DESKTOP\桌面日历秀.lnk" RMDir "$SMPROGRAMS\桌面日历秀" RMDir /r "$INSTDIR\Res" RMDir /r "$INSTDIR\PluginSkins" RMDir /r "$INSTDIR\mainskins" RMDir /r "$INSTDIR\icon" RMDir "$INSTDIR\DataBackup" RMDir "$INSTDIR\Data" RMDir "$INSTDIR" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" ;卸载注册表中安装路径的键值 DeleteRegKey /ifempty HKCU "Software\XDeskCal" ;卸载注册表中自动运行的键值 DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Run" "XDeskCal" SetAutoClose true SectionEnd Function Pageshow ReadRegStr $0 HKCU "Software\XDeskCal" "" ${If} $0 == "" ${Else} ;禁用浏览按钮 FindWindow $0 "#32770" "" $HWNDPARENT GetDlgItem $0 $0 1001 EnableWindow $0 0 ;禁用编辑的目录 FindWindow $0 "#32770" "" $HWNDPARENT GetDlgItem $0 $0 1019 EnableWindow $0 0 FindWindow $0 "#32770" "" $HWNDPARENT GetDlgItem $0 $0 1006 SendMessage $0 ${WM_SETTEXT} 0 "STR:您已经安装过 ${PRODUCT_NAME} ,现在进行的覆盖安装不能更改安装目录,如果您需要更改安装目录,请先卸载已经安装的版本之后再运行此安装程序!" ${EndIf} FunctionEnd Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "您确实要完全移除 $(^Name) ,及其所有的组件?" IDYES +2 Abort FunctionEnd Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 已成功卸载,您的用户配置和数据文件需要手工删除!" FunctionEnd |
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=1002