|
1 # This Source Code Form is subject to the terms of the Mozilla Public |
|
2 # License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/. |
|
4 |
|
5 ; Set verbosity to 3 (e.g. no script) to lessen the noise in the build logs |
|
6 !verbose 3 |
|
7 |
|
8 ; 7-Zip provides better compression than the lzma from NSIS so we add the files |
|
9 ; uncompressed and use 7-Zip to create a SFX archive of it |
|
10 SetDatablockOptimize on |
|
11 SetCompress off |
|
12 CRCCheck on |
|
13 |
|
14 RequestExecutionLevel admin |
|
15 !addplugindir ./ |
|
16 |
|
17 ; Variables |
|
18 Var TempMaintServiceName |
|
19 Var BrandFullNameDA |
|
20 Var BrandFullName |
|
21 |
|
22 ; Other included files may depend upon these includes! |
|
23 ; The following includes are provided by NSIS. |
|
24 !include FileFunc.nsh |
|
25 !include LogicLib.nsh |
|
26 !include MUI.nsh |
|
27 !include WinMessages.nsh |
|
28 !include WinVer.nsh |
|
29 !include WordFunc.nsh |
|
30 |
|
31 !insertmacro GetOptions |
|
32 !insertmacro GetParameters |
|
33 !insertmacro GetSize |
|
34 |
|
35 ; The test slaves use this fallback key to run tests. |
|
36 ; And anyone that wants to run tests themselves should already have |
|
37 ; this installed. |
|
38 !define FallbackKey \ |
|
39 "SOFTWARE\Mozilla\MaintenanceService\3932ecacee736d366d6436db0f55bce4" |
|
40 |
|
41 !define CompanyName "Mozilla Corporation" |
|
42 !define BrandFullNameInternal "" |
|
43 |
|
44 ; The following includes are custom. |
|
45 !include defines.nsi |
|
46 ; We keep defines.nsi defined so that we get other things like |
|
47 ; the version number, but we redefine BrandFullName |
|
48 !define MaintFullName "Mozilla Maintenance Service" |
|
49 !undef BrandFullName |
|
50 !define BrandFullName "${MaintFullName}" |
|
51 |
|
52 !include common.nsh |
|
53 !include locales.nsi |
|
54 |
|
55 VIAddVersionKey "FileDescription" "${MaintFullName} Installer" |
|
56 VIAddVersionKey "OriginalFilename" "maintenanceservice_installer.exe" |
|
57 |
|
58 Name "${MaintFullName}" |
|
59 OutFile "maintenanceservice_installer.exe" |
|
60 |
|
61 ; Get installation folder from registry if available |
|
62 InstallDirRegKey HKLM "Software\Mozilla\MaintenanceService" "" |
|
63 |
|
64 SetOverwrite on |
|
65 |
|
66 !define MaintUninstallKey \ |
|
67 "Software\Microsoft\Windows\CurrentVersion\Uninstall\MozillaMaintenanceService" |
|
68 |
|
69 ; The HAVE_64BIT_OS define also means that we have an x64 build, |
|
70 ; not just an x64 OS. |
|
71 !ifdef HAVE_64BIT_OS |
|
72 ; See below, we actually abort the install for x64 builds currently. |
|
73 InstallDir "$PROGRAMFILES64\${MaintFullName}\" |
|
74 !else |
|
75 InstallDir "$PROGRAMFILES32\${MaintFullName}\" |
|
76 !endif |
|
77 ShowUnInstDetails nevershow |
|
78 |
|
79 ################################################################################ |
|
80 # Modern User Interface - MUI |
|
81 |
|
82 !define MUI_ICON setup.ico |
|
83 !define MUI_UNICON setup.ico |
|
84 !define MUI_WELCOMEPAGE_TITLE_3LINES |
|
85 !define MUI_UNWELCOMEFINISHPAGE_BITMAP wizWatermark.bmp |
|
86 |
|
87 ;Interface Settings |
|
88 !define MUI_ABORTWARNING |
|
89 |
|
90 ; Uninstaller Pages |
|
91 !insertmacro MUI_UNPAGE_CONFIRM |
|
92 !insertmacro MUI_UNPAGE_INSTFILES |
|
93 |
|
94 ################################################################################ |
|
95 # Language |
|
96 |
|
97 !insertmacro MOZ_MUI_LANGUAGE 'baseLocale' |
|
98 !verbose push |
|
99 !verbose 3 |
|
100 !include "overrideLocale.nsh" |
|
101 !include "customLocale.nsh" |
|
102 !verbose pop |
|
103 |
|
104 ; Set this after the locale files to override it if it is in the locale |
|
105 ; using " " for BrandingText will hide the "Nullsoft Install System..." branding |
|
106 BrandingText " " |
|
107 |
|
108 Function .onInit |
|
109 SetSilent silent |
|
110 !ifdef HAVE_64BIT_OS |
|
111 ; We plan to eventually enable 64bit native builds to use the maintenance |
|
112 ; service, but for the initial release, to reduce testing and development, |
|
113 ; 64-bit builds will not install the maintenanceservice. |
|
114 Abort |
|
115 !endif |
|
116 |
|
117 ; On Windows 2000 we do not install the maintenance service. |
|
118 ; We won't run this installer from the parent installer, but just in case |
|
119 ; someone tries to execute it on Windows 2000... |
|
120 ${Unless} ${AtLeastWinXP} |
|
121 Abort |
|
122 ${EndUnless} |
|
123 FunctionEnd |
|
124 |
|
125 Function un.onInit |
|
126 StrCpy $BrandFullNameDA "${MaintFullName}" |
|
127 StrCpy $BrandFullName "${MaintFullName}" |
|
128 FunctionEnd |
|
129 |
|
130 Section "MaintenanceService" |
|
131 AllowSkipFiles off |
|
132 |
|
133 CreateDirectory $INSTDIR |
|
134 SetOutPath $INSTDIR |
|
135 |
|
136 ; If the service already exists, then it will be stopped when upgrading it |
|
137 ; via the maintenanceservice_tmp.exe command executed below. |
|
138 ; The maintenanceservice_tmp.exe command will rename the file to |
|
139 ; maintenanceservice.exe if maintenanceservice_tmp.exe is newer. |
|
140 ; If the service does not exist yet, we install it and drop the file on |
|
141 ; disk as maintenanceservice.exe directly. |
|
142 StrCpy $TempMaintServiceName "maintenanceservice.exe" |
|
143 IfFileExists "$INSTDIR\maintenanceservice.exe" 0 skipAlreadyExists |
|
144 StrCpy $TempMaintServiceName "maintenanceservice_tmp.exe" |
|
145 skipAlreadyExists: |
|
146 |
|
147 ; We always write out a copy and then decide whether to install it or |
|
148 ; not via calling its 'install' cmdline which works by version comparison. |
|
149 CopyFiles "$EXEDIR\maintenanceservice.exe" "$INSTDIR\$TempMaintServiceName" |
|
150 |
|
151 ; The updater.ini file is only used when performing an install or upgrade, |
|
152 ; and only if that install or upgrade is successful. If an old updater.ini |
|
153 ; happened to be copied into the maintenance service installation directory |
|
154 ; but the service was not newer, the updater.ini file would be unused. |
|
155 ; It is used to fill the description of the service on success. |
|
156 CopyFiles "$EXEDIR\updater.ini" "$INSTDIR\updater.ini" |
|
157 |
|
158 ; Install the application maintenance service. |
|
159 ; If a service already exists, the command line parameter will stop the |
|
160 ; service and only install itself if it is newer than the already installed |
|
161 ; service. If successful it will remove the old maintenanceservice.exe |
|
162 ; and replace it with maintenanceservice_tmp.exe. |
|
163 ClearErrors |
|
164 ;${GetParameters} $0 |
|
165 ;${GetOptions} "$0" "/Upgrade" $0 |
|
166 ;${If} ${Errors} |
|
167 nsExec::Exec '"$INSTDIR\$TempMaintServiceName" forceinstall' |
|
168 ;${Else} |
|
169 ; The upgrade cmdline is the same as install except |
|
170 ; It will fail if the service isn't already installed. |
|
171 ; nsExec::Exec '"$INSTDIR\$TempMaintServiceName" upgrade' |
|
172 ;${EndIf} |
|
173 |
|
174 WriteUninstaller "$INSTDIR\Uninstall.exe" |
|
175 WriteRegStr HKLM "${MaintUninstallKey}" "DisplayName" "${MaintFullName}" |
|
176 WriteRegStr HKLM "${MaintUninstallKey}" "UninstallString" \ |
|
177 '"$INSTDIR\uninstall.exe"' |
|
178 WriteRegStr HKLM "${MaintUninstallKey}" "DisplayIcon" \ |
|
179 "$INSTDIR\Uninstall.exe,0" |
|
180 WriteRegStr HKLM "${MaintUninstallKey}" "DisplayVersion" "${AppVersion}" |
|
181 WriteRegStr HKLM "${MaintUninstallKey}" "Publisher" "Mozilla" |
|
182 WriteRegStr HKLM "${MaintUninstallKey}" "Comments" \ |
|
183 "${BrandFullName} ${AppVersion} (${ARCH} ${AB_CD})" |
|
184 WriteRegDWORD HKLM "${MaintUninstallKey}" "NoModify" 1 |
|
185 ${GetSize} "$INSTDIR" "/S=0K" $R2 $R3 $R4 |
|
186 WriteRegDWORD HKLM "${MaintUninstallKey}" "EstimatedSize" $R2 |
|
187 |
|
188 ; Write out that a maintenance service was attempted. |
|
189 ; We do this because on upgrades we will check this value and we only |
|
190 ; want to install once on the first upgrade to maintenance service. |
|
191 ; Also write out that we are currently installed, preferences will check |
|
192 ; this value to determine if we should show the service update pref. |
|
193 ; Since the Maintenance service can be installed either x86 or x64, |
|
194 ; always use the 64-bit registry for checking if an attempt was made. |
|
195 ${If} ${RunningX64} |
|
196 SetRegView 64 |
|
197 ${EndIf} |
|
198 WriteRegDWORD HKLM "Software\Mozilla\MaintenanceService" "Attempted" 1 |
|
199 WriteRegDWORD HKLM "Software\Mozilla\MaintenanceService" "Installed" 1 |
|
200 |
|
201 ; Included here for debug purposes only. |
|
202 ; These keys are used to bypass the installation dir is a valid installation |
|
203 ; check from the service so that tests can be run. |
|
204 WriteRegStr HKLM "${FallbackKey}\0" "name" "Mozilla Corporation" |
|
205 WriteRegStr HKLM "${FallbackKey}\0" "issuer" "DigiCert Assured ID Code Signing CA-1" |
|
206 WriteRegStr HKLM "${FallbackKey}\1" "name" "Mozilla Fake SPC" |
|
207 WriteRegStr HKLM "${FallbackKey}\1" "issuer" "Mozilla Fake CA" |
|
208 ${If} ${RunningX64} |
|
209 SetRegView lastused |
|
210 ${EndIf} |
|
211 SectionEnd |
|
212 |
|
213 ; By renaming before deleting we improve things slightly in case |
|
214 ; there is a file in use error. In this case a new install can happen. |
|
215 Function un.RenameDelete |
|
216 Pop $9 |
|
217 ; If the .moz-delete file already exists previously, delete it |
|
218 ; If it doesn't exist, the call is ignored. |
|
219 ; We don't need to pass /REBOOTOK here since it was already marked that way |
|
220 ; if it exists. |
|
221 Delete "$9.moz-delete" |
|
222 Rename "$9" "$9.moz-delete" |
|
223 ${If} ${Errors} |
|
224 Delete /REBOOTOK "$9" |
|
225 ${Else} |
|
226 Delete /REBOOTOK "$9.moz-delete" |
|
227 ${EndIf} |
|
228 ClearErrors |
|
229 FunctionEnd |
|
230 |
|
231 Section "Uninstall" |
|
232 ; Delete the service so that no updates will be attempted |
|
233 nsExec::Exec '"$INSTDIR\maintenanceservice.exe" uninstall' |
|
234 |
|
235 Push "$INSTDIR\updater.ini" |
|
236 Call un.RenameDelete |
|
237 Push "$INSTDIR\maintenanceservice.exe" |
|
238 Call un.RenameDelete |
|
239 Push "$INSTDIR\maintenanceservice_tmp.exe" |
|
240 Call un.RenameDelete |
|
241 Push "$INSTDIR\maintenanceservice.old" |
|
242 Call un.RenameDelete |
|
243 Push "$INSTDIR\Uninstall.exe" |
|
244 Call un.RenameDelete |
|
245 RMDir /REBOOTOK "$INSTDIR" |
|
246 |
|
247 DeleteRegKey HKLM "${MaintUninstallKey}" |
|
248 |
|
249 ${If} ${RunningX64} |
|
250 SetRegView 64 |
|
251 ${EndIf} |
|
252 DeleteRegValue HKLM "Software\Mozilla\MaintenanceService" "Installed" |
|
253 DeleteRegKey HKLM "${FallbackKey}\" |
|
254 ${If} ${RunningX64} |
|
255 SetRegView lastused |
|
256 ${EndIf} |
|
257 SectionEnd |
|
258 |