OSDN Git Service

WinGui:
[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   ; Install Files\r
124   File "Handbrake.exe"\r
125   File "HandBrakeCLI.exe"\r
126   CreateDirectory "$SMPROGRAMS\Handbrake"\r
127   CreateShortCut "$SMPROGRAMS\Handbrake\Handbrake.lnk" "$INSTDIR\Handbrake.exe"\r
128   CreateShortCut "$DESKTOP\Handbrake.lnk" "$INSTDIR\Handbrake.exe"\r
129   File "Interop.QTOLibrary.dll"\r
130   File "Interop.QTOControlLib.dll"\r
131   File "AxInterop.QTOControlLib.dll"\r
132   File "Growl.Connector.dll"\r
133   File "Growl.CoreLibrary.dll"\r
134   File "Handbrake.exe.config"\r
135   File "HandBrake.ApplicationServices.dll"\r
136   File "Microsoft.WindowsAPICodePack.Shell.dll"\r
137   File "Microsoft.WindowsAPICodePack.dll"\r
138 \r
139   ; Copy the standard doc set into the doc folder\r
140   SetOutPath "$INSTDIR\doc"\r
141   SetOverwrite ifnewer\r
142   File "doc\AUTHORS"\r
143   File "doc\COPYING"\r
144   File "doc\CREDITS"\r
145   File "doc\NEWS"\r
146   File "doc\THANKS"\r
147   File "doc\TRANSLATIONS"\r
148 SectionEnd\r
149 \r
150 Section -AdditionalIcons\r
151   CreateShortCut "$SMPROGRAMS\Handbrake\Uninstall.lnk" "$INSTDIR\uninst.exe"\r
152 SectionEnd\r
153 \r
154 Section -Post\r
155   WriteUninstaller "$INSTDIR\uninst.exe"\r
156   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Handbrake.exe"\r
157   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"\r
158   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"\r
159   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Handbrake.exe"\r
160   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"\r
161 SectionEnd\r
162 \r
163 \r
164 Function un.onUninstSuccess\r
165   HideWindow\r
166   MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer."\r
167 FunctionEnd\r
168 \r
169 Function un.onInit\r
170   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2\r
171   Abort\r
172 FunctionEnd\r
173 \r
174 Section Uninstall\r
175   Delete "$INSTDIR\uninst.exe"\r
176   \r
177   Delete "$INSTDIR\Interop.QTOLibrary.dll"\r
178   Delete "$INSTDIR\Interop.QTOControlLib.dll"\r
179   Delete "$INSTDIR\AxInterop.QTOControlLib.dll"\r
180   Delete "$INSTDIR\HandBrakeCLI.exe"\r
181   Delete "$INSTDIR\handbrakepineapple.ico"\r
182   Delete "$INSTDIR\Handbrake.exe"\r
183   Delete "$INSTDIR\Handbrake.exe.config"\r
184   Delete "$INSTDIR\Growl.Connector.dll"\r
185   Delete "$INSTDIR\Growl.CoreLibrary.dll"\r
186   Delete "$INSTDIR\libgcc_s_sjlj-1.dll"\r
187   Delete "$INSTDIR\HandBrake.ApplicationServices.dll"\r
188   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.Shell.dll"\r
189   Delete "$INSTDIR\Microsoft.WindowsAPICodePack.dll"\r
190   Delete "$INSTDIR\doc\AUTHORS"\r
191   Delete "$INSTDIR\doc\COPYING"\r
192   Delete "$INSTDIR\doc\CREDITS"\r
193   Delete "$INSTDIR\doc\NEWS"\r
194   Delete "$INSTDIR\doc\THANKS"\r
195   Delete "$INSTDIR\doc\TRANSLATIONS"\r
196   RMDir  "$INSTDIR"\r
197   Delete "$SMPROGRAMS\Handbrake\Uninstall.lnk"\r
198   Delete "$DESKTOP\Handbrake.lnk"\r
199   Delete "$SMPROGRAMS\Handbrake\Handbrake.lnk"\r
200   RMDir  "$SMPROGRAMS\Handbrake"\r
201   RMDir  "$INSTDIR"\r
202 \r
203   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"\r
204   DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"\r
205   SetAutoClose true\r
206 SectionEnd\r
207 \r
208 ;Check for .NET framework\r
209 Function CheckFrameWork\r
210 \r
211    ;Save the variables in case something else is using them\r
212   Push $0\r
213   Push $1\r
214   Push $2\r
215   Push $3\r
216   Push $4\r
217   Push $R1\r
218   Push $R2\r
219   Push $R3\r
220   Push $R4\r
221   Push $R5\r
222   Push $R6\r
223   Push $R7\r
224   Push $R8\r
225 \r
226   StrCpy $R5 "0"\r
227   StrCpy $R6 "0"\r
228   StrCpy $R7 "0"\r
229   StrCpy $R8 "0.0.0"\r
230   StrCpy $0 0\r
231 \r
232   loop:\r
233 \r
234   ;Get each sub key under "SOFTWARE\Microsoft\NET Framework Setup\NDP"\r
235   EnumRegKey $1 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP" $0\r
236   StrCmp $1 "" done ;jump to end if no more registry keys\r
237   IntOp $0 $0 + 1\r
238   StrCpy $2 $1 1 ;Cut off the first character\r
239   StrCpy $3 $1 "" 1 ;Remainder of string\r
240 \r
241   ;Loop if first character is not a 'v'\r
242   StrCmpS $2 "v" start_parse loop\r
243 \r
244   ;Parse the string\r
245   start_parse:\r
246   StrCpy $R1 ""\r
247   StrCpy $R2 ""\r
248   StrCpy $R3 ""\r
249   StrCpy $R4 $3\r
250 \r
251   StrCpy $4 1\r
252 \r
253   parse:\r
254   StrCmp $3 "" parse_done ;If string is empty, we are finished\r
255   StrCpy $2 $3 1 ;Cut off the first character\r
256   StrCpy $3 $3 "" 1 ;Remainder of string\r
257   StrCmp $2 "." is_dot not_dot ;Move to next part if it's a dot\r
258 \r
259   is_dot:\r
260   IntOp $4 $4 + 1 ; Move to the next section\r
261   goto parse ;Carry on parsing\r
262 \r
263   not_dot:\r
264   IntCmp $4 1 major_ver\r
265   IntCmp $4 2 minor_ver\r
266   IntCmp $4 3 build_ver\r
267   IntCmp $4 4 parse_done\r
268 \r
269   major_ver:\r
270   StrCpy $R1 $R1$2\r
271   goto parse ;Carry on parsing\r
272 \r
273   minor_ver:\r
274   StrCpy $R2 $R2$2\r
275   goto parse ;Carry on parsing\r
276 \r
277   build_ver:\r
278   StrCpy $R3 $R3$2\r
279   goto parse ;Carry on parsing\r
280 \r
281   parse_done:\r
282 \r
283   IntCmp $R1 $R5 this_major_same loop this_major_more\r
284   this_major_more:\r
285   StrCpy $R5 $R1\r
286   StrCpy $R6 $R2\r
287   StrCpy $R7 $R3\r
288   StrCpy $R8 $R4\r
289 \r
290   goto loop\r
291 \r
292   this_major_same:\r
293   IntCmp $R2 $R6 this_minor_same loop this_minor_more\r
294   this_minor_more:\r
295   StrCpy $R6 $R2\r
296   StrCpy $R7 R3\r
297   StrCpy $R8 $R4\r
298   goto loop\r
299 \r
300   this_minor_same:\r
301   IntCmp $R3 $R7 loop loop this_build_more\r
302   this_build_more:\r
303   StrCpy $R7 $R3\r
304   StrCpy $R8 $R4\r
305   goto loop\r
306 \r
307   done:\r
308 \r
309   ;Have we got the framework we need?\r
310   IntCmp $R5 ${MIN_FRA_MAJOR} max_major_same fail OK\r
311   max_major_same:\r
312   IntCmp $R6 ${MIN_FRA_MINOR} max_minor_same fail OK\r
313   max_minor_same:\r
314   IntCmp $R7 ${MIN_FRA_BUILD} OK fail OK\r
315 \r
316   ;Version on machine is greater than what we need\r
317   OK:\r
318   StrCpy $0 "1"\r
319   goto end\r
320 \r
321   fail:\r
322   StrCmp $R8 "0.0.0" end\r
323 \r
324 \r
325   end:\r
326 \r
327   ;Pop the variables we pushed earlier\r
328   Pop $R8\r
329   Pop $R7\r
330   Pop $R6\r
331   Pop $R5\r
332   Pop $R4\r
333   Pop $R3\r
334   Pop $R2\r
335   Pop $R1\r
336   Pop $4\r
337   Pop $3\r
338   Pop $2\r
339   Pop $1\r
340 FunctionEnd