OSDN Git Service

WinGui:
[handbrake-jp/handbrake-jp-git.git] / win / C# / Installer / Installer.nsi
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 "SVN 3191 Snapshot"\r
12 !define PRODUCT_VERSION_NUMBER "svn3191"\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 \r
95 Section "Handbrake" SEC01\r
96   SetOutPath "$INSTDIR"\r
97   SetOverwrite ifnewer\r
98   \r
99   ; Begin Check .NET version\r
100   StrCpy $InstallDotNET "No"\r
101   Call CheckFramework\r
102      StrCmp $0 "1" +3\r
103         StrCpy $InstallDotNET "Yes"\r
104       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
105      Pop $0\r
106 \r
107   ; Get .NET if required\r
108   ${If} $InstallDotNET == "Yes"\r
109      SetDetailsView hide\r
110      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
111      Pop $1\r
112 \r
113      ${If} $1 != "OK"\r
114            Delete "$INSTDIR\dotnetfx.exe"\r
115            Abort "Installation cancelled, ${PRODUCT_NAME} requires the .NET 3.5 Framework"\r
116      ${EndIf}\r
117 \r
118      ExecWait "$INSTDIR\dotnetfx.exe"\r
119      Delete "$INSTDIR\dotnetfx.exe"\r
120 \r
121      SetDetailsView show\r
122   ${EndIf}\r
123 \r
124   ; Install Files\r
125   File "Handbrake.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 "HandBrakeCLI.exe"\r
135   File "Handbrake.exe.config"\r
136   File "handbrakepineapple.ico"\r
137   File "HandBrake.ApplicationServices.dll"\r
138   File "Microsoft.WindowsAPICodePack.Shell.dll"\r
139   File "Microsoft.WindowsAPICodePack.dll"\r
140 \r
141   SetOutPath "$INSTDIR\doc"\r
142   SetOverwrite ifnewer\r
143   File "doc\AUTHORS"\r
144   File "doc\COPYING"\r
145   File "doc\CREDITS"\r
146   File "doc\NEWS"\r
147   File "doc\THANKS"\r
148   File "doc\TRANSLATIONS"\r
149 SectionEnd\r
150 \r
151 Section -AdditionalIcons\r
152   CreateShortCut "$SMPROGRAMS\Handbrake\Uninstall.lnk" "$INSTDIR\uninst.exe"\r
153 SectionEnd\r
154 \r
155 Section -Post\r
156   WriteUninstaller "$INSTDIR\uninst.exe"\r
157   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\Handbrake.exe"\r
158   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"\r
159   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"\r
160   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\Handbrake.exe"\r
161   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"\r
162 SectionEnd\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