OSDN Git Service

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