]> git.lyx.org Git - lyx.git/blob - development/Win32/packaging/AltInstaller/LyXInstaller-update.nsi
32db32e263c1ab63b342dfc04691c44f41ca04ce
[lyx.git] / development / Win32 / packaging / AltInstaller / LyXInstaller-update.nsi
1 # Lyx for Windows, NSIS v2 series installer script
2
3 # File LyXInstaller-update.nsi
4 # This file is part of LyX, the document processor.
5 # http://www.lyx.org/
6 # Licence details can be found in the file COPYING or copy at
7 # http://www.lyx.org/about/license.php3
8
9 # Author Uwe Stöhr
10 # Full author contact details are available in file CREDITS or copy at
11 # http://www.lyx.org/about/credits.php
12
13 # This script requires NSIS 2.30 or newer
14 # http://nsis.sourceforge.net/
15 #--------------------------------
16
17 # Do a Cyclic Redundancy Check to make sure the installer
18 # was not corrupted by the download.
19 CRCCheck force
20
21 # Make the installer as small as possible.
22 SetCompressor lzma
23
24 #--------------------------------
25 # You should need to change only these macros...
26
27 !define INSTALLER_VERSION "Update"
28 !define INSTALLER2_VERSION "Small"
29 !define INSTALLER3_VERSION "Complete"
30 !define INSTALLER_TYPE "Update"
31
32 # load the settings
33 !include "Settings.nsh"
34
35 #--------------------------------
36 # variables only used in this installer version
37
38 Var INSTDIR_NEW
39 Var INSTDIR_OLD
40 # Variables used by all installer versions
41 Var AspellInstallYes
42 Var AspellBaseReg
43 Var AspellMessage
44 Var ImageMagickPath
45 Var JabRefInstalled
46 Var LatexPath
47 Var MiKTeXInstalled
48 Var PythonPath
49 Var Answer
50 Var AppPre
51 Var AppSuff
52 Var AppPath
53 Var CreateDesktopIcon
54 Var CreateFileAssociations
55 Var DictCode
56 Var FileName
57 Var LangCode
58 Var LangCodeSys
59 Var LangName
60 Var LangNameSys
61 Var NewString
62 Var OldString
63 Var PathPrefix
64 Var Pointer
65 Var ProductRootKey
66 Var RunNumber
67 Var StartmenuFolder
68 Var String
69 Var Search
70 Var UserList
71 Var UserName
72
73 #--------------------------------
74 # load some NSIS libraries
75 !include "MUI.nsh"
76 !include "LogicLib.nsh"
77 !include "FileFunc.nsh"
78 !include "StrFunc.nsh"
79 !include "TextFunc.nsh"
80 !insertmacro LineFind
81 !include "WordFunc.nsh"
82 !insertmacro WordReplace
83 !include "registry.nsh"
84 !insertmacro COPY_REGISTRY_KEY
85
86 # Set of various macros and functions
87 !include "LyXUtils.nsh"
88
89 # list with modified files
90 !include "Updated.nsh"
91
92 # list with deleted files
93 !include "Deleted.nsh"
94
95 # Function for page to install Aspell dictionaries
96 !include "Aspell.nsh"
97
98 #--------------------------------
99
100 # Remember the installer language
101 !define MUI_LANGDLL_REGISTRY_ROOT "HKCU"
102 !define MUI_LANGDLL_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
103 !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
104
105 !define MUI_ABORTWARNING
106 !define MUI_HEADERIMAGE
107 !define MUI_HEADERIMAGE_BITMAP "${PRODUCT_DIR}\icons\lyx_logo_hi.bmp"
108 !define MUI_ICON "${PRODUCT_DIR}\icons\lyx.ico"
109 !define MUI_UNICON "${PRODUCT_DIR}\icons\lyx.ico"
110 !define MUI_WELCOMEFINISHPAGE_BITMAP "${VERSION_BITMAP}"
111
112 # Welcome page
113 !define MUI_WELCOMEPAGE_TEXT "$(WelcomePageText)"
114 !insertmacro MUI_PAGE_WELCOME
115
116 # Show the license.
117 !insertmacro MUI_PAGE_LICENSE "${PRODUCT_LICENSE_FILE}"
118
119 # Define which components to install.
120 !insertmacro MUI_PAGE_COMPONENTS
121
122 # Specify where to install program shortcuts.
123 !define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
124 !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
125 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
126 !define MUI_STARTMENUPAGE_DEFAULTFOLDER "LyX ${PRODUCT_VERSION}"
127 !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} $StartmenuFolder
128
129 # Watch the components being installed.
130 !insertmacro MUI_PAGE_INSTFILES
131
132 # Finish page
133 !define MUI_FINISHPAGE_RUN 
134 !define MUI_FINISHPAGE_TEXT "$(FinishPageMessage)"
135 !define MUI_FINISHPAGE_RUN_TEXT "$(FinishPageRun)"
136 !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchProduct"
137 !insertmacro MUI_PAGE_FINISH
138
139 # The uninstaller.
140 !insertmacro MUI_UNPAGE_COMPONENTS
141 !insertmacro MUI_UNPAGE_INSTFILES
142
143 #--------------------------------
144 # Languages
145
146 !insertmacro MUI_LANGUAGE "English" # first language is the default language
147 !insertmacro MUI_LANGUAGE "Czech"
148 !insertmacro MUI_LANGUAGE "Danish"
149 !insertmacro MUI_LANGUAGE "Dutch"
150 !insertmacro MUI_LANGUAGE "French"
151 !insertmacro MUI_LANGUAGE "German"
152 !insertmacro MUI_LANGUAGE "Galician"
153 !insertmacro MUI_LANGUAGE "Hungarian"
154 !insertmacro MUI_LANGUAGE "Italian"
155 !insertmacro MUI_LANGUAGE "Norwegian"
156 !insertmacro MUI_LANGUAGE "Polish"
157 !insertmacro MUI_LANGUAGE "Portuguese"
158 !insertmacro MUI_LANGUAGE "Slovak"
159 !insertmacro MUI_LANGUAGE "Spanish"
160 !insertmacro MUI_LANGUAGE "Swedish"
161 !insertmacro MUI_LANGUAGE "Turkish"
162
163 !include "lyx_languages\english.nsh"
164 !include "lyx_languages\czech.nsh"
165 !include "lyx_languages\danish.nsh"
166 !include "lyx_languages\dutch.nsh"
167 !include "lyx_languages\french.nsh"
168 !include "lyx_languages\german.nsh"
169 !include "lyx_languages\galician.nsh"
170 !include "lyx_languages\hungarian.nsh"
171 !include "lyx_languages\italian.nsh"
172 !include "lyx_languages\norwegian.nsh"
173 !include "lyx_languages\polish.nsh"
174 !include "lyx_languages\portuguese.nsh"
175 !include "lyx_languages\slovak.nsh"
176 !include "lyx_languages\spanish.nsh"
177 !include "lyx_languages\swedish.nsh"
178 !include "lyx_languages\turkish.nsh"
179
180 LicenseData "$(LyXLicenseData)"
181
182 #--------------------------------
183 # Reserve Files
184
185 # These files are inserted before other files in the data block
186 !insertmacro MUI_RESERVEFILE_LANGDLL
187 !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
188
189 #--------------------------------
190 # Installer sections
191
192 Section "!${PRODUCT_NAME}" SecCore
193   SectionIn RO
194 SectionEnd
195 Section "$(SecFileAssocTitle)" SecFileAssoc
196   StrCpy $CreateFileAssociations "true"
197 SectionEnd
198 Section "$(SecDesktopTitle)" SecDesktop
199   StrCpy $CreateDesktopIcon "true"
200 SectionEnd
201
202 # Section descriptions
203 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
204 !insertmacro MUI_DESCRIPTION_TEXT ${SecCore} "$(SecCoreDescription)"
205 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktop} "$(SecDesktopDescription)"
206 !insertmacro MUI_FUNCTION_DESCRIPTION_END
207
208 # the installation section
209 !include "InstallActions-update.nsh"
210
211 #--------------------------------
212 # This hook function is called internally by NSIS on installer startup
213 Function .onInit
214
215   # Check that LyX is not currently running
216   FindProcDLL::FindProc "lyx.exe"
217   ${if} $R0 == "1"
218    MessageBox MB_OK|MB_ICONSTOP "$(UnInstallRunning)"
219    Abort
220   ${endif}
221   
222   # set the installer language to the Windows locale language
223   System::Call "kernel32::GetUserDefaultLangID()i.a"
224   
225   # Check that the installer is not currently running
226   System::Call 'kernel32::CreateMutexA(i 0, i 0, t "${INSTALLER_EXE}.Instance") i .r1 ?e'
227   Pop $R0
228   ${if} $R0 != "0"
229    MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)"
230    Abort
231   ${endif}
232   FindProcDLL::FindProc "${INSTALLER2_EXE}"
233   ${if} $R0 == "1"
234    MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)"
235    Abort
236   ${endif}
237   FindProcDLL::FindProc "${INSTALLER3_EXE}"
238   ${if} $R0 == "1"
239    MessageBox MB_OK|MB_ICONSTOP "$(InstallRunning)"
240    Abort
241   ${endif}
242   
243   # check where LyX is installed
244   ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY_OLD}" "DisplayIcon"
245   ${if} $0 != ""
246     SetShellVarContext all
247     StrCpy $ProductRootKey "HKLM"
248   ${endif}
249   ${if} $0 == ""
250    ReadRegStr $0 HKCU "${PRODUCT_UNINST_KEY_OLD}" "DisplayIcon"
251    ${if} $0 != ""
252     SetShellVarContext current
253     StrCpy $ProductRootKey "HKCU"
254    ${endif}
255    ${if} $0 == ""
256     MessageBox MB_OK|MB_ICONSTOP "$(UpdateNotAllowed)"
257     Abort
258    ${endif}
259   ${endif} # end if $0 == 0
260   ${if} $0 != "" # if it is found
261    StrCpy $INSTDIR $0
262    StrCpy $INSTDIR $INSTDIR -12 # delete the string "\bin\lyx.exe" or "\bin\lyx.bat"
263   ${endif}
264   
265   # abort if the user doesn't have administrator privileges but LyX was installed as admin
266   StrCpy $Answer ""
267   StrCpy $UserName ""
268   !insertmacro IsUserAdmin $Answer $UserName # macro from LyXUtils.nsh
269   ${if} $Answer != "yes"
270   ${andif} $ProductRootKey == "HKLM"
271     MessageBox MB_OK|MB_ICONSTOP "$(NotAdmin)"
272     Abort
273   ${endif}
274   
275   # This can be reset to "true" in section SecDesktop.
276   StrCpy $CreateDesktopIcon "false"
277   
278   ClearErrors
279 FunctionEnd
280
281 #--------------------------------
282
283 Function LaunchProduct
284   Exec ${PRODUCT_BAT}
285 FunctionEnd
286
287 #--------------------------------
288 # The Uninstaller
289
290  !include "Uninstall.nsh"
291   
292
293 # eof