OSDN Git Service

WinGui: Re-checkin updated stylecop settings
[handbrake-jp/handbrake-jp-git.git] / win / C# / Installer / MakeNightly.nsi.tmpl
1 /*  Resources.Designer.cs $\r
2 \r
3            This file is part of the HandBrake source code.\r
4            Homepage: <http://handbrake.fr/>.\r
5            It may be used under the terms of the GNU General Public License. */\r
6 \r
7 ; Script generated by the HM NIS Edit Script Wizard.\r
8 \r
9 ; HM NIS Edit Wizard helper defines\r
10 !define PRODUCT_NAME "Handbrake"\r
11 !define PRODUCT_VERSION "$WCREV$ Nightly"\r
12 !define PRODUCT_VERSION_NUMBER "svn$WCREV$"\r
13 !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\Handbrake.exe"\r
14 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"\r
15 !define PRODUCT_UNINST_ROOT_KEY "HKLM"\r
16 \r
17 ;Required .NET framework\r
18 !define MIN_FRA_MAJOR "3"\r
19 !define MIN_FRA_MINOR "5"\r
20 !define MIN_FRA_BUILD "*"\r
21 \r
22 SetCompressor lzma\r
23 \r
24 ; MUI 1.67 compatible ------\r
25 !include "MUI.nsh"\r
26 \r
27 ; MUI Settings\r
28 !define MUI_ABORTWARNING\r
29 !define MUI_ICON "handbrakepineapple.ico"\r
30 !define MUI_UNICON "handbrakepineapple.ico"\r
31 \r
32 ; Welcome page\r
33 !insertmacro MUI_PAGE_WELCOME\r
34 ; License page\r
35 !insertmacro MUI_PAGE_LICENSE "doc\COPYING"\r
36 ; Directory page\r
37 !insertmacro MUI_PAGE_DIRECTORY\r
38 ; Instfiles page\r
39 !insertmacro MUI_PAGE_INSTFILES\r
40 ; Finish page\r
41 !define MUI_FINISHPAGE_RUN "$INSTDIR\Handbrake.exe"\r
42 !insertmacro MUI_PAGE_FINISH\r
43 \r
44 ; Uninstaller pages\r
45 !insertmacro MUI_UNPAGE_INSTFILES\r
46 \r
47 ; Language files\r
48 !insertmacro MUI_LANGUAGE "English"\r
49 \r
50 ; MUI end ------\r
51 \r
52 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"\r
53 OutFile "HandBrake-${PRODUCT_VERSION_NUMBER}-Win_GUI.exe"\r
54 \r
55 !include WordFunc.nsh\r
56 !insertmacro VersionCompare\r
57 !include LogicLib.nsh\r
58 \r
59 InstallDir "$PROGRAMFILES\Handbrake"\r
60 InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""\r
61 ShowInstDetails show\r
62 ShowUnInstDetails show\r
63 \r
64 Var InstallDotNET\r
65 \r
66 Function .onInit\r
67 \r
68   ; Begin Only allow one version\r
69   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "myMutex") i .r1 ?e'\r
70   Pop $R0\r
71 \r
72   StrCmp $R0 0 +3\r
73   MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running."\r
74   Abort\r
75 \r
76   ;Remove previous version\r
77   ReadRegStr $R0 HKLM \\r
78   "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}\" \\r
79   "UninstallString"\r
80   StrCmp $R0 "" done\r
81 \r
82   MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \\r
83   "${PRODUCT_NAME} is already installed. $\n$\nClick `OK` to remove the \\r
84   previous version or `Cancel` to continue." \\r
85   IDOK uninst\r
86   goto done\r
87 \r
88  ;Run the uninstaller\r
89   uninst:\r
90    Exec $INSTDIR\uninst.exe\r
91   done:\r
92 FunctionEnd\r
93 \r
94 Section "Handbrake" SEC01\r
95   SetOutPath "$INSTDIR"\r
96   SetOverwrite ifnewer\r
97 \r
98   ; Begin Check .NET version\r
99   StrCpy $InstallDotNET "No"\r
100   Call CheckFramework\r
101      StrCmp $0 "1" +3\r
102         StrCpy $InstallDotNET "Yes"\r
103       MessageBox MB_OK|MB_ICONINFORMATION "${PRODUCT_NAME} requires that the .NET Framework 3.5 SP1 is installed. The latest .NET Framework will be downloaded and installed automatically during installation of ${PRODUCT_NAME}."\r
104      Pop $0\r
105 \r
106   ; Get .NET if required\r
107   ${If} $InstallDotNET == "Yes"\r
108      SetDetailsView hide\r
109      inetc::get /caption "Downloading .NET Framework 3.5" /canceltext "Cancel" "http://www.microsoft.com/downloads/info.aspx?na=90&p=&SrcDisplayLang=en&SrcCategoryId=&SrcFamilyId=ab99342f-5d1a-413d-8319-81da479ab0d7&u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2f0%2f6%2f1%2f061f001c-8752-4600-a198-53214c69b51f%2fdotnetfx35setup.exe" "$INSTDIR\dotnetfx.exe" /end\r
110      Pop $1\r
111 \r
112      ${If} $1 != "OK"\r
113            Delete "$INSTDIR\dotnetfx.exe"\r
114            Abort "Installation cancelled, ${PRODUCT_NAME} requires the .NET 3.5 Framework"\r
115      ${EndIf}\r
116 \r
117      ExecWait "$INSTDIR\dotnetfx.exe"\r
118      Delete "$INSTDIR\dotnetfx.exe"\r
119 \r
120      SetDetailsView show\r
121   ${EndIf}\r
122   \r
123   \r
124   File "Handbrake.exe"\r
125   CreateDirectory "$SMPROGRAMS\Handbrake"\r
126   CreateShortCut "$SMPROGRAMS\Handbrake\Handbrake.lnk" "$INSTDIR\Handbrake.exe"\r
127   CreateShortCut "$DESKTOP\Handbrake.lnk" "$INSTDIR\Handbrake.exe"\r
128   File "Interop.QTOLibrary.dll"\r
129   File "Interop.QTOControlLib.dll"\r
130   File "AxInterop.QTOControlLib.dll"\r
131   File "Growl.Connector.dll"\r
132   File "Growl.CoreLibrary.dll"\r
133   File "Handbrake.exe.config"\r
134   File "HandBrake.ApplicationServices.dll"\r
135   File "Microsoft.WindowsAPICodePack.Shell.dll"\r
136   File "Microsoft.WindowsAPICodePack.dll"\r
137 SectionEnd\r
138 \r
139 Section -AdditionalIcons\r
140   CreateShortCut "$SMPROGRAMS\Handbrake\Uninstall.lnk" "$INSTDIR\uninst.exe"\r
141 SectionEnd\r
142 \r
143 Section -Post\r
144   WriteUninstaller "$INSTDIR\uninst.exe"\r
145   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Handbrake.exe"\r
146   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"\r
147   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"\r
148   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Handbrake.exe"\r
149   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"\r
150 SectionEnd\r
151 \r
152 \r
153 Function un.onUninstSuccess\r
154   HideWindow\r
155   MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer."\r
156 FunctionEnd\r
157 \r
158 Function un.onInit\r
159   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2\r
160   Abort\r
161 FunctionEnd\r
162 \r
163 Section Uninstall\r
164   Delete "$INSTDIR\uninst.exe"\r
165   \r
166   Delete "$INSTDIR\Interop.QTOLibrary.dll"\r
167   Delete "$INSTDIR\Interop.QTOControlLib.dll"\r
168   Delete "$INSTDIR\AxInterop.QTOControlLib.dll"\r
169   Delete "$INSTDIR\Handbrake.exe"\r
170   Delete "$INSTDIR\Handbrake.exe.config"\r
171   Delete "$INSTDIR\Growl.Connector.dll"\r
172   Delete "$INSTDIR\Growl.CoreLibrary.dll"\r
173   Delete "$INSTDIR\HandBrake.ApplicationServices.dll"\r
174   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.Shell.dll"\r
175   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.dll"\r
176   RMDir  "$INSTDIR"\r
177   Delete "$SMPROGRAMS\Handbrake\Uninstall.lnk"\r
178   Delete "$DESKTOP\Handbrake.lnk"\r
179   Delete "$SMPROGRAMS\Handbrake\Handbrake.lnk"\r
180   RMDir  "$SMPROGRAMS\Handbrake"\r
181   RMDir  "$INSTDIR"\r
182 \r
183   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"\r
184   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"\r
185   SetAutoClose true\r
186 SectionEnd\r
187 \r
188 ;Check for .NET framework\r
189 Function CheckFrameWork\r
190 \r
191    ;Save the variables in case something else is using them\r
192   Push $0\r
193   Push $1\r
194   Push $2\r
195   Push $3\r
196   Push $4\r
197   Push $R1\r
198   Push $R2\r
199   Push $R3\r
200   Push $R4\r
201   Push $R5\r
202   Push $R6\r
203   Push $R7\r
204   Push $R8\r
205 \r
206   StrCpy $R5 "0"\r
207   StrCpy $R6 "0"\r
208   StrCpy $R7 "0"\r
209   StrCpy $R8 "0.0.0"\r
210   StrCpy $0 0\r
211 \r
212   loop:\r
213 \r
214   ;Get each sub key under "SOFTWARE\Microsoft\NET Framework Setup\NDP"\r
215   EnumRegKey $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP" $0\r
216   StrCmp $1 "" done ;jump to end if no more registry keys\r
217   IntOp $0 $0 + 1\r
218   StrCpy $2 $1 1 ;Cut off the first character\r
219   StrCpy $3 $1 "" 1 ;Remainder of string\r
220 \r
221   ;Loop if first character is not a 'v'\r
222   StrCmpS $2 "v" start_parse loop\r
223 \r
224   ;Parse the string\r
225   start_parse:\r
226   StrCpy $R1 ""\r
227   StrCpy $R2 ""\r
228   StrCpy $R3 ""\r
229   StrCpy $R4 $3\r
230 \r
231   StrCpy $4 1\r
232 \r
233   parse:\r
234   StrCmp $3 "" parse_done ;If string is empty, we are finished\r
235   StrCpy $2 $3 1 ;Cut off the first character\r
236   StrCpy $3 $3 "" 1 ;Remainder of string\r
237   StrCmp $2 "." is_dot not_dot ;Move to next part if it's a dot\r
238 \r
239   is_dot:\r
240   IntOp $4 $4 + 1 ; Move to the next section\r
241   goto parse ;Carry on parsing\r
242 \r
243   not_dot:\r
244   IntCmp $4 1 major_ver\r
245   IntCmp $4 2 minor_ver\r
246   IntCmp $4 3 build_ver\r
247   IntCmp $4 4 parse_done\r
248 \r
249   major_ver:\r
250   StrCpy $R1 $R1$2\r
251   goto parse ;Carry on parsing\r
252 \r
253   minor_ver:\r
254   StrCpy $R2 $R2$2\r
255   goto parse ;Carry on parsing\r
256 \r
257   build_ver:\r
258   StrCpy $R3 $R3$2\r
259   goto parse ;Carry on parsing\r
260 \r
261   parse_done:\r
262 \r
263   IntCmp $R1 $R5 this_major_same loop this_major_more\r
264   this_major_more:\r
265   StrCpy $R5 $R1\r
266   StrCpy $R6 $R2\r
267   StrCpy $R7 $R3\r
268   StrCpy $R8 $R4\r
269 \r
270   goto loop\r
271 \r
272   this_major_same:\r
273   IntCmp $R2 $R6 this_minor_same loop this_minor_more\r
274   this_minor_more:\r
275   StrCpy $R6 $R2\r
276   StrCpy $R7 R3\r
277   StrCpy $R8 $R4\r
278   goto loop\r
279 \r
280   this_minor_same:\r
281   IntCmp $R3 $R7 loop loop this_build_more\r
282   this_build_more:\r
283   StrCpy $R7 $R3\r
284   StrCpy $R8 $R4\r
285   goto loop\r
286 \r
287   done:\r
288 \r
289   ;Have we got the framework we need?\r
290   IntCmp $R5 ${MIN_FRA_MAJOR} max_major_same fail OK\r
291   max_major_same:\r
292   IntCmp $R6 ${MIN_FRA_MINOR} max_minor_same fail OK\r
293   max_minor_same:\r
294   IntCmp $R7 ${MIN_FRA_BUILD} OK fail OK\r
295 \r
296   ;Version on machine is greater than what we need\r
297   OK:\r
298   StrCpy $0 "1"\r
299   goto end\r
300 \r
301   fail:\r
302   StrCmp $R8 "0.0.0" end\r
303 \r
304 \r
305   end:\r
306 \r
307   ;Pop the variables we pushed earlier\r
308   Pop $R8\r
309   Pop $R7\r
310   Pop $R6\r
311   Pop $R5\r
312   Pop $R4\r
313   Pop $R3\r
314   Pop $R2\r
315   Pop $R1\r
316   Pop $4\r
317   Pop $3\r
318   Pop $2\r
319   Pop $1\r
320 FunctionEnd