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