天天看点

轻狂写的桌面日历秀NSIS脚本供大家参考学习

现在共享桌面日历秀的NSIS脚本,以便交流学习。此脚本实现的功能如下:

7-Zip打开看不到内容。

自动读取原安装路径,如果有则不允许更改。

取得编译日期。

自定义欢迎页面文字。

自定义图标。

文件版本声明。

多区段可选安装。

……

安装效果参考http://www.flighty.cn/html/soft/20101001_101.html

代码如下:

<code>001</code>

<code>;增加一个包含链接内容的7z压缩包到可执行文件头部,使7-Zip打开看不到其他内容。</code>

<code>002</code>

<code>!packhdr temp.dat </code><code>'cmd /c Copy /B temp.dat /B +轻狂志.7z temp.dat'</code>

<code>003</code>

<code>004</code>

<code>; 安装程序初始定义常量</code>

<code>005</code>

<code>!define PRODUCT_NAME </code><code>"桌面日历秀"</code>

<code>006</code>

<code>!define PRODUCT_VERSION </code><code>"3.1.0 免费版"</code>

<code>007</code>

<code>!define PRODUCT_UNINST_KEY</code><code>"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"</code>

<code>008</code>

<code>!define PRODUCT_UNINST_ROOT_KEY </code><code>"HKLM"</code>

<code>009</code>

<code>!define /</code><code>date</code> <code>VER_BUILD </code><code>"%Y.%m.%d"</code>

<code>010</code>

<code>011</code>

<code>SetCompressor lzma</code>

<code>012</code>

<code>RequestExecutionLevel admin</code>

<code>013</code>

<code>014</code>

<code>; ------ MUI 现代界面定义 (1.67 版本以上兼容) ------</code>

<code>015</code>

<code>!include </code><code>"MUI.nsh"</code>

<code>016</code>

<code>017</code>

<code>; MUI 预定义常量</code>

<code>018</code>

<code>!define MUI_ABORTWARNING</code>

<code>019</code>

<code>!define MUI_HEADERIMAGE</code>

<code>020</code>

<code>!define MUI_HEADERIMAGE_BITMAP </code><code>"modern-header.bmp"</code>

<code>021</code>

<code>!define MUI_ICON </code><code>"ico.ico"</code>

<code>022</code>

<code>!define MUI_UNICON </code><code>"unico.ico"</code>

<code>023</code>

<code>!define MUI_WELCOMEFINISHPAGE_BITMAP </code><code>"modern-wizard.bmp"</code>

<code>024</code>

<code>!define MUI_WELCOMEPAGE_TITLE </code><code>"\r\n    桌面日历秀 3.1.0 免费版"</code>

<code>025</code>

<code>!define MUI_WELCOMEPAGE_TEXT </code><code>"\r\n    桌面日历秀是一款优秀的桌面日历和个人信息管理软件。\r\n\r\n    此版本已经剔除了原安装包中的haozip和百度搜霸,安装过程中可以自动进行软件注册而无任何功能或时间限制,所以命名为“免费版”。\r\n\r\n    桌面日历秀原始文件收集于网络,您使用该软件时所享受到的主要功能,皆为原始作者的开发成果。使用此软件是您的自由选择,轻狂志(www.flighty.cn)并不对可能由此给您带来的任何损失负责。如果您认为该软件具有实用价值,请从正式渠道获得授权许可。\r\n\r\n    $_CLICK"</code>

<code>026</code>

<code>027</code>

<code>!define MUI_FINISHPAGE_RUN_TEXT </code><code>"运行桌面日历秀"</code>

<code>028</code>

<code>029</code>

<code>; 欢迎页面</code>

<code>030</code>

<code>!insertmacro MUI_PAGE_WELCOME</code>

<code>031</code>

<code>; 许可协议页面</code>

<code>032</code>

<code>!define MUI_LICENSEPAGE_CHECKBOX</code>

<code>033</code>

<code>!insertmacro MUI_PAGE_LICENSE </code><code>"license.rtf"</code>

<code>034</code>

<code>; 组件选择页面</code>

<code>035</code>

<code>!insertmacro MUI_PAGE_COMPONENTS</code>

<code>036</code>

<code>; 安装目录选择页面</code>

<code>037</code>

<code>!define MUI_PAGE_CUSTOMFUNCTION_show Pageshow</code>

<code>038</code>

<code>!insertmacro MUI_PAGE_DIRECTORY</code>

<code>039</code>

<code>; 安装过程页面</code>

<code>040</code>

<code>!insertmacro MUI_PAGE_INSTFILES</code>

<code>041</code>

<code>; 安装完成页面</code>

<code>042</code>

<code>!define MUI_FINISHPAGE_RUN </code><code>"$INSTDIR\XDeskCal.exe"</code>

<code>043</code>

<code>!insertmacro MUI_PAGE_FINISH</code>

<code>044</code>

<code>045</code>

<code>; 安装卸载过程页面</code>

<code>046</code>

<code>!insertmacro MUI_UNPAGE_INSTFILES</code>

<code>047</code>

<code>048</code>

<code>; 安装界面包含的语言设置</code>

<code>049</code>

<code>!insertmacro MUI_LANGUAGE </code><code>"SimpChinese"</code>

<code>050</code>

<code>051</code>

<code>;文件版本声明</code>

<code>052</code>

<code>  </code><code>VIProductVersion </code><code>"3.1.0.1225"</code>

<code>053</code>

<code>  </code><code>VIAddVersionKey /LANG=2052 </code><code>"ProductName"</code> <code>"桌面日历秀免费版"</code>

<code>054</code>

<code>  </code><code>VIAddVersionKey /LANG=2052 </code><code>"Comments"</code> <code>"免费使用,不限分发。"</code>

<code>055</code>

<code>  </code><code>VIAddVersionKey /LANG=2052 </code><code>"CompanyName"</code> <code>"www.flighty.cn"</code>

<code>056</code>

<code>  </code><code>VIAddVersionKey /LANG=2052 </code><code>"LegalTrademarks"</code> <code>"flighty"</code>

<code>057</code>

<code>  </code><code>VIAddVersionKey /LANG=2052 </code><code>"LegalCopyright"</code> <code>"轻狂志"</code>

<code>058</code>

<code>  </code><code>VIAddVersionKey /LANG=2052 </code><code>"FileDescription"</code> <code>"桌面日历秀免费版"</code>

<code>059</code>

<code>  </code><code>VIAddVersionKey /LANG=2052 </code><code>"FileVersion"</code> <code>"3.1.0.1225"</code>

<code>060</code>

<code>061</code>

<code>; 安装预释放文件</code>

<code>062</code>

<code>!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS</code>

<code>063</code>

<code>; ------ MUI 现代界面定义结束 ------</code>

<code>064</code>

<code>065</code>

<code>Name </code><code>"${PRODUCT_NAME} ${PRODUCT_VERSION}"</code>

<code>066</code>

<code>OutFile </code><code>"XDeskCal_Free.exe"</code>

<code>067</code>

<code>InstallDir "D:\Program Files\XDeskCal\"</code>

<code>068</code>

<code>;读取注册中的键值,如果没有,就按默认路径。</code>

<code>069</code>

<code>InstallDirRegKey HKCU </code><code>"Software\XDeskCal"</code> <code>""</code>

<code>070</code>

<code>ShowInstDetails show</code>

<code>071</code>

<code>ShowUnInstDetails show</code>

<code>072</code>

<code>ShowInstDetails hide ;该项默认为show,hide表示不显示安装信息,点击显示按钮后显示。</code>

<code>073</code>

<code>ShowUnInstDetails hide ;该项同上,卸载过程</code>

<code>074</code>

<code>BrandingText </code><code>"轻狂志www.flighty.cn - 编译日期${VER_BUILD}"</code>

<code>075</code>

<code>076</code>

<code>Section </code><code>"主程序"</code> <code>SEC01</code>

<code>077</code>

<code>  </code><code>SectionIn RO</code>

<code>078</code>

<code>  </code><code>SetOutPath </code><code>"$INSTDIR"</code>

<code>079</code>

<code>  </code><code>SetOverwrite ifnewer</code>

<code>080</code>

<code>  </code><code>File /r </code><code>"桌面日历秀\*.*"</code>

<code>081</code>

<code>SectionEnd</code>

<code>082</code>

<code>083</code>

<code>SectionGroup </code><code>"快捷方式"</code> <code>SEC02</code>

<code>084</code>

<code>085</code>

<code>  </code><code>Section </code><code>"开始菜单"</code> <code>SEC0201</code>

<code>086</code>

<code>  </code><code>SectionIn 1</code>

<code>087</code>

<code>  </code><code>CreateDirectory </code><code>"$SMPROGRAMS\桌面日历秀"</code>

<code>088</code>

<code>  </code><code>CreateShortCut </code><code>"$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk"</code><code>"$INSTDIR\XDeskCal.exe"</code>

<code>089</code>

<code>  </code><code>CreateShortCut </code><code>"$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk"</code> <code>"$INSTDIR\卸载程序.exe"</code>

<code>090</code>

<code>  </code><code>SectionEnd</code>

<code>091</code>

<code>092</code>

<code>  </code><code>Section </code><code>"桌面"</code> <code>SEC0202</code>

<code>093</code>

<code>   </code><code>SectionIn 1</code>

<code>094</code>

<code>  </code><code>CreateShortCut </code><code>"$DESKTOP\桌面日历秀.lnk"</code> <code>"$INSTDIR\XDeskCal.exe"</code>

<code>095</code>

<code>096</code>

<code>097</code>

<code>SectionGroupEnd</code>

<code>098</code>

<code>099</code>

<code>Section </code><code>"自动运行"</code> <code>SEC03</code>

<code>100</code>

<code>WriteRegStr   HKLM </code><code>"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"</code><code>"XDeskCal"</code> <code>"$INSTDIR\XDeskCal.exe"</code>

<code>101</code>

<code>102</code>

<code>103</code>

<code>Section -Post</code>

<code>104</code>

<code>  </code><code>WriteUninstaller </code><code>"$INSTDIR\卸载程序.exe"</code>

<code>105</code>

<code>;把用户选择的安装路径写入注册表中</code>

<code>106</code>

<code>  </code><code>WriteRegStr HKCU </code><code>"Software\XDeskCal"</code> <code>""</code> <code>$INSTDIR</code>

<code>107</code>

<code>  </code><code>WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} </code><code>"${PRODUCT_UNINST_KEY}"</code><code>"DisplayName"</code> <code>"$(^Name)"</code>

<code>108</code>

<code>  </code><code>WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} </code><code>"${PRODUCT_UNINST_KEY}"</code><code>"UninstallString"</code> <code>"$INSTDIR\uninst.exe"</code>

<code>109</code>

<code>  </code><code>WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} </code><code>"${PRODUCT_UNINST_KEY}"</code><code>"DisplayVersion"</code> <code>"${PRODUCT_VERSION}"</code>

<code>110</code>

<code>111</code>

<code>112</code>

<code>; 区段组件描述</code>

<code>113</code>

<code>!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN</code>

<code>114</code>

<code>  </code><code>!insertmacro MUI_DESCRIPTION_TEXT ${SEC01} </code><code>"桌面日历秀的主程序,必选!"</code>

<code>115</code>

<code>  </code><code>!insertmacro MUI_DESCRIPTION_TEXT ${SEC02} </code><code>"快捷方式可选安装。"</code>

<code>116</code>

<code>  </code><code>!insertmacro MUI_DESCRIPTION_TEXT ${SEC0201} </code><code>"开始菜单快捷方式。"</code>

<code>117</code>

<code>  </code><code>!insertmacro MUI_DESCRIPTION_TEXT ${SEC0202} </code><code>"桌面快捷方式。"</code>

<code>118</code>

<code>  </code><code>!insertmacro MUI_DESCRIPTION_TEXT ${SEC03} </code><code>"选择操作系统启动时是否自动运行桌面日历秀。"</code>

<code>119</code>

<code>!insertmacro MUI_FUNCTION_DESCRIPTION_END</code>

<code>120</code>

<code>121</code>

<code>/******************************</code>

<code>122</code>

<code> </code><code>*  以下是安装程序的卸载部分  *</code>

<code>123</code>

<code> </code><code>******************************/</code>

<code>124</code>

<code>125</code>

<code>Section Uninstall</code>

<code>126</code>

<code>  </code><code>Delete </code><code>"$INSTDIR\config.ini"</code>

<code>127</code>

<code>  </code><code>Delete </code><code>"$INSTDIR\GdiPlus.dll"</code>

<code>128</code>

<code>  </code><code>Delete </code><code>"$INSTDIR\Update.exe"</code>

<code>129</code>

<code>  </code><code>Delete </code><code>"$INSTDIR\update.URS"</code>

<code>130</code>

<code>  </code><code>Delete </code><code>"$INSTDIR\UpdateLang.ini"</code>

<code>131</code>

<code>  </code><code>Delete </code><code>"$INSTDIR\XDeskCal.exe"</code>

<code>132</code>

<code>  </code><code>Delete </code><code>"$INSTDIR\卸载程序.exe"</code>

<code>133</code>

<code>134</code>

<code>  </code><code>Delete </code><code>"$SMPROGRAMS\桌面日历秀\卸载日历秀.lnk"</code>

<code>135</code>

<code>  </code><code>Delete </code><code>"$SMPROGRAMS\桌面日历秀\桌面日历秀.lnk"</code>

<code>136</code>

<code>  </code><code>Delete </code><code>"$SMSTARTUP\桌面日历秀.lnk"</code>

<code>137</code>

<code>  </code><code>Delete </code><code>"$DESKTOP\桌面日历秀.lnk"</code>

<code>138</code>

<code>139</code>

<code>  </code><code>RMDir </code><code>"$SMPROGRAMS\桌面日历秀"</code>

<code>140</code>

<code>141</code>

<code>  </code><code>RMDir /r </code><code>"$INSTDIR\Res"</code>

<code>142</code>

<code>  </code><code>RMDir /r </code><code>"$INSTDIR\PluginSkins"</code>

<code>143</code>

<code>  </code><code>RMDir /r </code><code>"$INSTDIR\mainskins"</code>

<code>144</code>

<code>  </code><code>RMDir /r </code><code>"$INSTDIR\icon"</code>

<code>145</code>

<code>  </code><code>RMDir </code><code>"$INSTDIR\DataBackup"</code>

<code>146</code>

<code>  </code><code>RMDir </code><code>"$INSTDIR\Data"</code>

<code>147</code>

<code>148</code>

<code>  </code><code>RMDir </code><code>"$INSTDIR"</code>

<code>149</code>

<code>150</code>

<code>  </code><code>DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} </code><code>"${PRODUCT_UNINST_KEY}"</code>

<code>151</code>

<code>  </code><code>;卸载注册表中安装路径的键值</code>

<code>152</code>

<code>  </code><code>DeleteRegKey /ifempty HKCU </code><code>"Software\XDeskCal"</code>

<code>153</code>

<code>  </code><code>;卸载注册表中自动运行的键值</code>

<code>154</code>

<code>  </code><code>DeleteRegValue HKLM </code><code>"SOFTWARE\Microsoft\Windows\CurrentVersion\Run"</code><code>"XDeskCal"</code>

<code>155</code>

<code>  </code><code>SetAutoClose </code><code>true</code>

<code>156</code>

<code>157</code>

<code>158</code>

<code>Function Pageshow</code>

<code>159</code>

<code>  </code><code>ReadRegStr $0 HKCU </code><code>"Software\XDeskCal"</code> <code>""</code>

<code>160</code>

<code>  </code><code>${If} $0 == </code><code>""</code>

<code>161</code>

<code>  </code><code>${Else}</code>

<code>162</code>

<code>  </code><code>;禁用浏览按钮</code>

<code>163</code>

<code>  </code><code>FindWindow $0 </code><code>"#32770"</code> <code>""</code> <code>$HWNDPARENT</code>

<code>164</code>

<code>  </code><code>GetDlgItem $0 $0 1001</code>

<code>165</code>

<code>  </code><code>EnableWindow $0 0</code>

<code>166</code>

<code>  </code><code>;禁用编辑的目录</code>

<code>167</code>

<code>168</code>

<code>  </code><code>GetDlgItem $0 $0 1019</code>

<code>169</code>

<code>170</code>

<code>171</code>

<code>  </code><code>GetDlgItem $0 $0 1006</code>

<code>172</code>

<code>  </code><code>SendMessage $0 ${WM_SETTEXT} 0 </code><code>"STR:您已经安装过 ${PRODUCT_NAME} ,现在进行的覆盖安装不能更改安装目录,如果您需要更改安装目录,请先卸载已经安装的版本之后再运行此安装程序!"</code>

<code>173</code>

<code>  </code><code>${EndIf}</code>

<code>174</code>

<code>FunctionEnd</code>

<code>175</code>

<code>176</code>

<code>Function un.onInit</code>

<code>177</code>

<code>  </code><code>MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 </code><code>"您确实要完全移除 $(^Name) ,及其所有的组件?"</code> <code>IDYES +2</code>

<code>178</code>

<code>  </code><code>Abort</code>

<code>179</code>

<code>180</code>

<code>181</code>

<code>Function un.onUninstSuccess</code>

<code>182</code>

<code>  </code><code>HideWindow</code>

<code>183</code>

<code>  </code><code>MessageBox MB_ICONINFORMATION|MB_OK </code><code>"$(^Name) 已成功卸载,您的用户配置和数据文件需要手工删除!"</code>

<code>184</code>

继续阅读