a2195d29fe77813c3495bebb7acc603c7759679e
[openafs.git] / src / WINNT / install / NSIS / OpenAFS.nsi
1 ;OpenAFS Install Script for NSIS
2 ;                             This version compiles with NSIS v2.0
3 ;
4 ; Originally written by Rob Murawski <rsm4@ieee.org>
5 ;
6 ;Redistribution and use in source and binary forms, with or without modification, are permitted
7 ;provided that the following conditions are met:
8 ;
9 ;  Redistributions of source code must retain the above copyright notice, this list of conditions
10 ;  and the following disclaimer. Redistributions in binary form must reproduce the above copyright
11 ;  notice, this list of conditions and the following disclaimer in the documentation and/or other
12 ;  materials provided with the distribution. The name of the author may not be used to endorse or
13 ;  promote products derived from this software without specific prior written permission.
14 ;
15 ;  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
16 ;  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
17 ;  PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
18 ;  INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19 ;  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
20 ;  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
21 ;  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
22 ;  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23 ;
24 ;
25 ;     Some code originally based on:
26 ;     NSIS Modern User Interface version 1.63
27 ;     MultiLanguage Example Script
28 ;     Written by Joost Verburg
29
30 ; Read in the environment information
31 !include ${INCLUDEDIR}\nsi-includes.nsi
32
33 !ifndef RELEASE
34 !ifndef DEBUG
35 Name "OpenAFS ${AFS_VERSION} ${__DATE__} ${__TIME__}"
36 !else
37 Name "OpenAFS ${AFS_VERSION} ${__DATE__} ${__TIME__} Checked/Debug"
38 !endif               ; End DEBUG/!DEBUG
39 !else
40 !ifndef DEBUG
41 Name "OpenAFS ${AFS_VERSION}"
42 !else                ; DEBUG
43 Name "OpenAFS ${AFS_VERSION} Checked/Debug"
44 !endif               ; End DEBUG/!DEBUG
45 !endif
46 VIProductVersion "${AFS_VERSION}.00"
47 VIAddVersionKey "ProductName" "OpenAFS"
48 VIAddVersionKey "CompanyName" "OpenAFS.org"
49 VIAddVersionKey "ProductVersion" ${AFS_VERSION}
50 VIAddVersionKey "FileVersion" ${AFS_VERSION}
51 VIAddVersionKey "FileDescription" "OpenAFS for Windows Installer"
52 VIAddVersionKey "LegalCopyright" "(C)2000-2004"
53 !ifdef DEBUG
54 VIAddVersionKey "PrivateBuild" "Checked/Debug"
55 !endif               ; End DEBUG
56
57
58 !include "MUI.nsh"
59 !include Sections.nsh
60
61 ;--------------------------------
62 ;Configuration
63
64 !define REPLACEDLL_NOREGISTER
65
66   ;General
67 !ifndef DEBUG
68   OutFile "${AFS_DESTDIR}\WinInstall\OpenAFSforWindows.exe"
69 !else
70   OutFile "${AFS_DESTDIR}\WinInstall\OpenAFSforWindows-DEBUG.exe"
71 !endif
72   SilentInstall normal
73   SetCompressor lzma
74   !define MUI_ICON "..\..\client_config\afs_config.ico"
75   !define MUI_UNICON "..\..\client_config\afs_config.ico"
76   !define AFS_COMPANY_NAME "OpenAFS"
77   !define AFS_PRODUCT_NAME "OpenAFS"
78   !define AFS_REGKEY_ROOT "Software\TransarcCorporation"
79   CRCCheck force
80
81   ;Folder selection page
82   InstallDir "$PROGRAMFILES\OpenAFS"      ; Install to shorter path
83   
84   ;Remember install folder
85   InstallDirRegKey HKCU ${AFS_REGKEY_ROOT} ""
86   
87   ;Remember the installer language
88   !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" 
89   !define MUI_LANGDLL_REGISTRY_KEY ${AFS_REGKEY_ROOT}
90   !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
91   
92   ;Where are the files?
93   !define AFS_CLIENT_BUILDDIR "${AFS_DESTDIR}\root.client\usr\vice\etc"
94   !define AFS_WININSTALL_DIR "${AFS_DESTDIR}\WinInstall\Config"
95   !define AFS_BUILD_INCDIR "${AFS_DESTDIR}\include"
96   !define AFS_CLIENT_LIBDIR "${AFS_DESTDIR}\lib"
97   !define AFS_SERVER_BUILDDIR "${AFS_DESTDIR}\root.server\usr\afs\bin"
98   !define AFS_ETC_BUILDDIR "${AFS_DESTDIR}\etc"
99   !define SYSTEMDIR   "$%SystemRoot%\System32" 
100   
101 ;--------------------------------
102 ;Modern UI Configuration
103
104   ;!define MUI_LICENSEPAGE
105   !define MUI_CUSTOMPAGECOMMANDS
106   !define MUI_WELCOMEPAGE
107   !define MUI_COMPONENTSPAGE
108   !define MUI_COMPONENTSPAGE_SMALLDESC
109   !define MUI_DIRECTORYPAGE
110
111   !define MUI_ABORTWARNING
112   !define MUI_FINISHPAGE
113   
114   !define MUI_UNINSTALLER
115   !define MUI_UNCONFIRMPAGE
116   
117   
118   !insertmacro MUI_PAGE_WELCOME
119   !insertmacro MUI_PAGE_COMPONENTS
120   !insertmacro MUI_PAGE_DIRECTORY
121   Page custom AFSPageGetCellServDB
122   Page custom AFSPageGetCellName
123   Page custom AFSPageConfigAFSCreds
124   !insertmacro MUI_PAGE_INSTFILES
125   !insertmacro MUI_PAGE_FINISH
126   
127   ;LicenseData "Licenses.rtf"
128 ;--------------------------------
129 ;Languages
130
131   !insertmacro MUI_LANGUAGE "English"
132   ;!insertmacro MUI_LANGUAGE "French"
133   !insertmacro MUI_LANGUAGE "German"
134   !insertmacro MUI_LANGUAGE "Spanish"
135   !insertmacro MUI_LANGUAGE "SimpChinese"
136   !insertmacro MUI_LANGUAGE "TradChinese"    
137   !insertmacro MUI_LANGUAGE "Japanese"
138   !insertmacro MUI_LANGUAGE "Korean"
139   ;!insertmacro MUI_LANGUAGE "Italian"
140   ;!insertmacro MUI_LANGUAGE "Dutch"
141   ;!insertmacro MUI_LANGUAGE "Danish"
142   ;!insertmacro MUI_LANGUAGE "Greek"
143   ;!insertmacro MUI_LANGUAGE "Russian"
144   !insertmacro MUI_LANGUAGE "PortugueseBR"
145   ;!insertmacro MUI_LANGUAGE "Polish"
146   ;!insertmacro MUI_LANGUAGE "Ukrainian"
147   ;!insertmacro MUI_LANGUAGE "Czech"
148   ;!insertmacro MUI_LANGUAGE "Slovak"
149   ;!insertmacro MUI_LANGUAGE "Croatian"
150   ;!insertmacro MUI_LANGUAGE "Bulgarian"
151   ;!insertmacro MUI_LANGUAGE "Hungarian"
152   ;!insertmacro MUI_LANGUAGE "Thai"
153   ;!insertmacro MUI_LANGUAGE "Romanian"
154   ;!insertmacro MUI_LANGUAGE "Macedonian"
155   ;!insertmacro MUI_LANGUAGE "Turkish"
156   
157 ;--------------------------------
158 ;Language Strings
159     
160   ;Descriptions
161   LangString DESC_SecCopyUI ${LANG_ENGLISH} "OpenAFS for Windows: English"
162   ;LangString DESC_SecCopyUI ${LANG_FRENCH} "OpenAFS for Windows: French"
163   LangString DESC_SecCopyUI ${LANG_GERMAN} "OpenAFS for Windows: German"
164   LangString DESC_SecCopyUI ${LANG_SPANISH} "OpenAFS for Windows: Spanish"
165   LangString DESC_SecCopyUI ${LANG_SIMPCHINESE} "OpenAFS for Windows: Simplified Chinese"
166   LangString DESC_SecCopyUI ${LANG_TRADCHINESE} "OpenAFS for Windows: Traditional Chinese description"
167   LangString DESC_SecCopyUI ${LANG_JAPANESE} "OpenAFS for Windows: Japanese description"
168   LangString DESC_SecCopyUI ${LANG_KOREAN} "OpenAFS for Windows: Korean description"
169   ;LangString DESC_SecCopyUI ${LANG_ITALIAN} "OpenAFS for Windows: Italian description"
170   ;LangString DESC_SecCopyUI ${LANG_DUTCH} "OpenAFS for Windows: Dutch description"
171   ;LangString DESC_SecCopyUI ${LANG_DANISH} "OpenAFS for Windows: Danish description"
172   ;LangString DESC_SecCopyUI ${LANG_GREEK} "OpenAFS for Windows: Greek description"
173   ;LangString DESC_SecCopyUI ${LANG_RUSSIAN} "OpenAFS for Windows: Russian description"
174   LangString DESC_SecCopyUI ${LANG_PORTUGUESEBR} "OpenAFS for Windows: Portuguese (Brasil) description"
175   ;LangString DESC_SecCopyUI ${LANG_POLISH} "OpenAFS for Windows: Polish description"
176   ;LangString DESC_SecCopyUI ${LANG_UKRAINIAN} "OpenAFS for Windows: Ukrainian description"
177   ;LangString DESC_SecCopyUI ${LANG_CZECH} "OpenAFS for Windows: Czechian description"
178   ;LangString DESC_SecCopyUI ${LANG_SLOVAK} "OpenAFS for Windows: Slovakian description"
179   ;LangString DESC_SecCopyUI ${LANG_CROATIAN} "OpenAFS for Windows: Slovakian description"
180   ;LangString DESC_SecCopyUI ${LANG_BULGARIAN} "OpenAFS for Windows: Bulgarian description"
181   ;LangString DESC_SecCopyUI ${LANG_HUNGARIAN} "OpenAFS for Windows: Hungarian description"
182   ;LangString DESC_SecCopyUI ${LANG_THAI} "OpenAFS for Windows: Thai description"
183   ;LangString DESC_SecCopyUI ${LANG_ROMANIAN} "OpenAFS for Windows: Romanian description"
184   ;LangString DESC_SecCopyUI ${LANG_MACEDONIAN} "OpenAFS for Windows: Macedonian description"
185   ;LangString DESC_SecCopyUI ${LANG_TURKISH} "OpenAFS for Windows: Turkish description"
186
187   LangString DESC_secClient ${LANG_ENGLISH} "OpenAFS Client: Allows you to access AFS from your Windows PC."
188   LangString DESC_secClient ${LANG_GERMAN} "OpenAFS Client: Allows you to access AFS from your Windows PC."
189   LangString DESC_secClient ${LANG_SPANISH} "OpenAFS Client: Allows you to access AFS from your Windows PC."
190   LangString DESC_secClient ${LANG_SIMPCHINESE} "OpenAFS Client: Allows you to access AFS from your Windows PC."
191   LangString DESC_secClient ${LANG_TRADCHINESE} "OpenAFS Client: Allows you to access AFS from your Windows PC."
192   LangString DESC_secClient ${LANG_JAPANESE} "OpenAFS Client: Allows you to access AFS from your Windows PC."
193   LangString DESC_secClient ${LANG_KOREAN} "OpenAFS Client: Allows you to access AFS from your Windows PC."
194   LangString DESC_secClient ${LANG_PORTUGUESEBR} "OpenAFS Client: Allows you to access AFS from your Windows PC."
195   
196   LangString DESC_secLoopback ${LANG_ENGLISH} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
197   LangString DESC_secLoopback ${LANG_GERMAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
198   LangString DESC_secLoopback ${LANG_SPANISH} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
199   LangString DESC_secLoopback ${LANG_SIMPCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
200   LangString DESC_secLoopback ${LANG_TRADCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
201   LangString DESC_secLoopback ${LANG_JAPANESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
202   LangString DESC_secLoopback ${LANG_KOREAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
203   LangString DESC_secLoopback ${LANG_PORTUGUESEBR} "MS Loopback adapter: Installs the adapter for a more reliable AFS client. Not recommended for Windows 2000"
204
205   LangString DESC_secServer ${LANG_ENGLISH} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
206   LangString DESC_secServer ${LANG_GERMAN} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
207   LangString DESC_secServer ${LANG_SPANISH} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
208   LangString DESC_secServer ${LANG_SIMPCHINESE} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
209   LangString DESC_secServer ${LANG_TRADCHINESE} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
210   LangString DESC_secServer ${LANG_JAPANESE} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
211   LangString DESC_secServer ${LANG_KOREAN} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
212   LangString DESC_secServer ${LANG_PORTUGUESEBR} "OpenAFS Server: Allows you to run an AFS file server. This option requires the AFS Client."
213   
214   LangString DESC_secControl ${LANG_ENGLISH} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
215   LangString DESC_secControl ${LANG_GERMAN} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
216   LangString DESC_secControl ${LANG_SPANISH} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
217   LangString DESC_secControl ${LANG_SIMPCHINESE} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
218   LangString DESC_secControl ${LANG_TRADCHINESE} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
219   LangString DESC_secControl ${LANG_JAPANESE} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
220   LangString DESC_secControl ${LANG_KOREAN} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
221   LangString DESC_secControl ${LANG_PORTUGUESEBR} "Control Center: GUI utilities for managing and configuring AFS servers.  This option requires the AFS Client."
222   
223   LangString DESC_secDocs ${LANG_ENGLISH} "Supplemental Documentation: Additional documentation for using OpenAFS."
224   LangString DESC_secDocs ${LANG_GERMAN} "Supplemental Documentation: Additional documentation for using OpenAFS."
225   LangString DESC_secDocs ${LANG_SPANISH} "Supplemental Documentation: Additional documentation for using OpenAFS."
226   LangString DESC_secDocs ${LANG_SIMPCHINESE} "Supplemental Documentation: Additional documentation for using OpenAFS."
227   LangString DESC_secDocs ${LANG_TRADCHINESE} "Supplemental Documentation: Additional documentation for using OpenAFS."
228   LangString DESC_secDocs ${LANG_JAPANESE} "Supplemental Documentation: Additional documentation for using OpenAFS."
229   LangString DESC_secDocs ${LANG_KOREAN} "Supplemental Documentation: Additional documentation for using OpenAFS."
230   LangString DESC_secDocs ${LANG_PORTUGUESEBR} "Supplemental Documentation: Additional documentation for using OpenAFS."
231   
232   LangString DESC_secSDK ${LANG_ENGLISH} "SDK: Header files and libraries for developing software with OpenAFS."
233   LangString DESC_secSDK ${LANG_GERMAN} "SDK: Header files and libraries for developing software with OpenAFS."
234   LangString DESC_secSDK ${LANG_SPANISH} "SDK: Header files and libraries for developing software with OpenAFS."
235   LangString DESC_secSDK ${LANG_SIMPCHINESE} "SDK: Header files and libraries for developing software with OpenAFS."
236   LangString DESC_secSDK ${LANG_TRADCHINESE} "SDK: Header files and libraries for developing software with OpenAFS."
237   LangString DESC_secSDK ${LANG_JAPANESE} "SDK: Header files and libraries for developing software with OpenAFS."
238   LangString DESC_secSDK ${LANG_KOREAN} "SDK: Header files and libraries for developing software with OpenAFS."
239   LangString DESC_secSDK ${LANG_PORTUGUESEBR} "SDK: Header files and libraries for developing software with OpenAFS."
240   
241   LangString DESC_secDEBUG ${LANG_ENGLISH} "Debug symbols: Used for debugging problems with OpenAFS."
242   LangString DESC_secDEBUG ${LANG_GERMAN} "Debug symbols: Used for debugging problems with OpenAFS."
243   LangString DESC_secDEBUG ${LANG_SPANISH} "Debug symbols: Used for debugging problems with OpenAFS."
244   LangString DESC_secDEBUG ${LANG_SIMPCHINESE} "Debug symbols: Used for debugging problems with OpenAFS."
245   LangString DESC_secDEBUG ${LANG_TRADCHINESE} "Debug symbols: Used for debugging problems with OpenAFS."
246   LangString DESC_secDEBUG ${LANG_JAPANESE} "Debug symbols: Used for debugging problems with OpenAFS."
247   LangString DESC_secDEBUG ${LANG_KOREAN} "Debug symbols: Used for debugging problems with OpenAFS."
248   LangString DESC_secDEBUG ${LANG_PORTUGUESEBR} "Debug symbols: Used for debugging problems with OpenAFS."
249
250 ; Popup error messages
251   LangString CellError ${LANG_ENGLISH} "You must specify a valid CellServDB file to copy during install"
252   LangString CellError ${LANG_GERMAN} "You must specify a valid CellServDB file to copy during the install"
253   LangString CellError ${LANG_SPANISH} "You must specify a valid CellServDB file to copy during the install"
254   LangString CellError ${LANG_SIMPCHINESE} "You must specify a valid CellServDB file to copy during the install"
255   LangString CellError ${LANG_TRADCHINESE} "You must specify a valid CellServDB file to copy during the install"
256   LangString CellError ${LANG_JAPANESE} "You must specify a valid CellServDB file to copy during the install"
257   LangString CellError ${LANG_KOREAN} "You must specify a valid CellServDB file to copy during the install"
258   LangString CellError ${LANG_PORTUGUESEBR} "You must specify a valid CellServDB file to copy during the install"
259   
260   LangString CellNameError ${LANG_ENGLISH} "You must specify a cell name for your client to use."
261   LangString CellNameError ${LANG_GERMAN} "You must specify a cell name for your client to use."
262   LangString CellNameError ${LANG_SPANISH} "You must specify a cell name for your client to use."
263   LangString CellNameError ${LANG_SIMPCHINESE} "You must specify a cell name for your client to use."
264   LangString CellNameError ${LANG_TRADCHINESE} "You must specify a cell name for your client to use."
265   LangString CellNameError ${LANG_JAPANESE} "You must specify a cell name for your client to use."
266   LangString CellNameError ${LANG_KOREAN} "You must specify a cell name for your client to use."
267   LangString CellNameError ${LANG_PORTUGUESEBR} "You must specify a cell name for your client to use."
268   
269   LangString URLError ${LANG_ENGLISH} "You must specify a URL if you choose the option to download the CellServDB."
270   LangString URLError ${LANG_GERMAN} "You must specify a URL if you choose the option to download the CellServDB."
271   LangString URLError ${LANG_SPANISH} "You must specify a URL if you choose the option to download the CellServDB."
272   LangString URLError ${LANG_SIMPCHINESE} "You must specify a URL if you choose the option to download the CellServDB."
273   LangString URLError ${LANG_TRADCHINESE} "You must specify a URL if you choose the option to download the CellServDB."
274   LangString URLError ${LANG_JAPANESE} "You must specify a URL if you choose the option to download the CellServDB."
275   LangString URLError ${LANG_KOREAN} "You must specify a URL if you choose the option to download the CellServDB."
276   LangString URLError ${LANG_PORTUGUESEBR} "You must specify a URL if you choose the option to download the CellServDB."
277
278   
279 ; Upgrade/re-install strings
280    LangString UPGRADE_CLIENT ${LANG_ENGLISH} "Upgrade AFS Client"
281    LangString UPGRADE_CLIENT ${LANG_GERMAN} "Upgrade AFS Client"
282    LangString UPGRADE_CLIENT ${LANG_SPANISH} "Upgrade AFS Client"
283    LangString UPGRADE_CLIENT ${LANG_SIMPCHINESE} "Upgrade AFS Client"
284    LangString UPGRADE_CLIENT ${LANG_TRADCHINESE} "Upgrade AFS Client"
285    LangString UPGRADE_CLIENT ${LANG_JAPANESE} "Upgrade AFS Client"
286    LangString UPGRADE_CLIENT ${LANG_KOREAN} "Upgrade AFS Client"
287    LangString UPGRADE_CLIENT ${LANG_PORTUGUESEBR} "Upgrade AFS Client"
288  
289    LangString REINSTALL_CLIENT ${LANG_ENGLISH} "Re-install AFS Client"
290    LangString REINSTALL_CLIENT ${LANG_GERMAN} "Re-install AFS Client"
291    LangString REINSTALL_CLIENT ${LANG_SPANISH} "Re-install AFS Client"
292    LangString REINSTALL_CLIENT ${LANG_SIMPCHINESE} "Re-install AFS Client"
293    LangString REINSTALL_CLIENT ${LANG_TRADCHINESE} "Re-install AFS Client"
294    LangString REINSTALL_CLIENT ${LANG_JAPANESE} "Re-install AFS Client"
295    LangString REINSTALL_CLIENT ${LANG_KOREAN} "Re-install AFS Client"
296    LangString REINSTALL_CLIENT ${LANG_PORTUGUESEBR} "Re-install AFS Client"
297   
298    LangString UPGRADE_SERVER ${LANG_ENGLISH} "Upgrade AFS Server"
299    LangString UPGRADE_SERVER ${LANG_GERMAN} "Upgrade AFS Server"
300    LangString UPGRADE_SERVER ${LANG_SPANISH} "Upgrade AFS Server"
301    LangString UPGRADE_SERVER ${LANG_SIMPCHINESE} "Upgrade AFS Server"
302    LangString UPGRADE_SERVER ${LANG_TRADCHINESE} "Upgrade AFS Server"
303    LangString UPGRADE_SERVER ${LANG_JAPANESE} "Upgrade AFS Server"
304    LangString UPGRADE_SERVER ${LANG_KOREAN} "Upgrade AFS Server"
305    LangString UPGRADE_SERVER ${LANG_PORTUGUESEBR} "Upgrade AFS Server"
306     
307    LangString REINSTALL_SERVER ${LANG_ENGLISH} "Re-install AFS Server"
308    LangString REINSTALL_SERVER ${LANG_GERMAN} "Re-install AFS Server"
309    LangString REINSTALL_SERVER ${LANG_SPANISH} "Re-install AFS Server"
310    LangString REINSTALL_SERVER ${LANG_SIMPCHINESE} "Re-install AFS Server"
311    LangString REINSTALL_SERVER ${LANG_TRADCHINESE} "Re-install AFS Server"
312    LangString REINSTALL_SERVER ${LANG_JAPANESE} "Re-install AFS Server"
313    LangString REINSTALL_SERVER ${LANG_KOREAN} "Re-install AFS Server"
314    LangString REINSTALL_SERVER ${LANG_PORTUGUESEBR} "Re-install AFS Server"
315   
316   ReserveFile "CellServPage.ini"
317   ReserveFile "AFSCell.ini"
318   !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ;InstallOptions plug-in
319   !insertmacro MUI_RESERVEFILE_LANGDLL ;Language selection dialog
320 ;--------------------------------
321 ; Macros
322 ; Macro - Upgrade DLL File
323 ; Written by Joost Verburg
324 ; ------------------------
325 ;
326 ; Parameters:
327 ; LOCALFILE   - Location of the new DLL file (on the compiler system)
328 ; DESTFILE    - Location of the DLL file that should be upgraded
329 ;              (on the user's system)
330 ; TEMPBASEDIR - Directory on the user's system to store a temporary file
331 ;               when the system has to be rebooted.
332 ;               For Win9x support, this should be on the same volume as the
333 ;               DESTFILE!
334 ;               The Windows temp directory could be located on any volume,
335 ;               so you cannot use  this directory.
336 ;
337 ; Define REPLACEDLL_NOREGISTER if you want to upgrade a DLL that does not
338 ; have to be registered.
339 ;
340 ; Note: If you want to support Win9x, you can only use
341 ;       short filenames (8.3).
342 ;
343 ; Example of usage:
344 ; !insertmacro ReplaceDLL "dllname.dll" "$SYSDIR\dllname.dll" "$SYSDIR"
345 ;
346
347 !macro ReplaceDLL LOCALFILE DESTFILE TEMPBASEDIR
348
349   Push $R0
350   Push $R1
351   Push $R2
352   Push $R3
353   Push $R4
354   Push $R5
355
356   ;------------------------
357   ;Unique number for labels
358
359   !define REPLACEDLL_UNIQUE ${__LINE__}
360
361   ;------------------------
362   ;Copy the parameters used on run-time to a variable
363   ;This allows the usage of variables as paramter
364
365   StrCpy $R4 "${DESTFILE}"
366   StrCpy $R5 "${TEMPBASEDIR}"
367
368   ;------------------------
369   ;Check file and version
370   ;
371   IfFileExists $R4 0 replacedll.copy_${REPLACEDLL_UNIQUE}
372   
373   ;ClearErrors
374   ;  GetDLLVersionLocal "${LOCALFILE}" $R0 $R1
375   ;  GetDLLVersion $R4 $R2 $R3
376   ;IfErrors replacedll.upgrade_${REPLACEDLL_UNIQUE}
377   ;
378   ;IntCmpU $R0 $R2 0 replacedll.done_${REPLACEDLL_UNIQUE} \
379   ;  replacedll.upgrade_${REPLACEDLL_UNIQUE}
380   ;IntCmpU $R1 $R3 replacedll.done_${REPLACEDLL_UNIQUE} \
381   ;  replacedll.done_${REPLACEDLL_UNIQUE} \
382   ;  replacedll.upgrade_${REPLACEDLL_UNIQUE}
383
384   ;------------------------
385   ;Let's replace the DLL!
386
387   SetOverwrite try
388
389   ;replacedll.upgrade_${REPLACEDLL_UNIQUE}:
390     !ifndef REPLACEDLL_NOREGISTER
391       ;Unregister the DLL
392       UnRegDLL $R4
393     !endif
394
395   ;------------------------
396   ;Try to copy the DLL directly
397
398   ClearErrors
399     StrCpy $R0 $R4
400     Call :replacedll.file_${REPLACEDLL_UNIQUE}
401   IfErrors 0 replacedll.noreboot_${REPLACEDLL_UNIQUE}
402
403   ;------------------------
404   ;DLL is in use. Copy it to a temp file and Rename it on reboot.
405
406   GetTempFileName $R0 $R5
407     Call :replacedll.file_${REPLACEDLL_UNIQUE}
408   Rename /REBOOTOK $R0 $R4
409
410   ;------------------------
411   ;Register the DLL on reboot
412
413   !ifndef REPLACEDLL_NOREGISTER
414     WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\RunOnce" \
415       "Register $R4" 'rundll32.exe "$R4",DllRegisterServer'
416   !endif
417
418   Goto replacedll.done_${REPLACEDLL_UNIQUE}
419
420   ;------------------------
421   ;DLL does not exist - just extract
422
423   replacedll.copy_${REPLACEDLL_UNIQUE}:
424     StrCpy $R0 $R4
425     Call :replacedll.file_${REPLACEDLL_UNIQUE}
426
427   ;------------------------
428   ;Register the DLL
429
430   replacedll.noreboot_${REPLACEDLL_UNIQUE}:
431     !ifndef REPLACEDLL_NOREGISTER
432       RegDLL $R4
433     !endif
434
435   ;------------------------
436   ;Done
437
438   replacedll.done_${REPLACEDLL_UNIQUE}:
439
440   Pop $R5
441   Pop $R4
442   Pop $R3
443   Pop $R2
444   Pop $R1
445   Pop $R0
446
447   ;------------------------
448   ;End
449
450   Goto replacedll.end_${REPLACEDLL_UNIQUE}
451
452   ;------------------------
453   ;Called to extract the DLL
454
455   replacedll.file_${REPLACEDLL_UNIQUE}:
456     File /oname=$R0 "${LOCALFILE}"
457     Return
458
459   replacedll.end_${REPLACEDLL_UNIQUE}:
460
461  ;------------------------
462  ;Restore settings
463
464  SetOverwrite lastused
465  
466  !undef REPLACEDLL_UNIQUE
467
468 !macroend
469
470
471 ;--------------------------------
472 ;Reserve Files
473   
474   ;Things that need to be extracted on first (keep these lines before any File command!)
475   ;Only useful for BZIP2 compression
476   !insertmacro MUI_RESERVEFILE_LANGDLL
477   
478 ;--------------------------------
479 ; User Variables
480
481 var REG_SUB_KEY
482 var REG_VALUE
483 var REG_DATA_1
484 var REG_DATA_2
485 var REG_DATA_3
486
487
488 ;--------------------------------
489 ;Installer Sections
490
491 ;----------------------
492 ; OpenAFS CLIENT
493 Section "AFS Client" secClient
494
495   SetShellVarContext all
496
497   ; Check for bad previous installation (if we are doing a new install)
498   Call IsAnyAFSInstalled
499   Pop $R0
500   StrCmp $R0 "0" +1 skipCheck
501   Call CheckPathForAFS
502   skipCheck:
503
504   ; Stop any running services or we can't replace the files
505   ; Stop the running processes
506   GetTempFileName $R0
507   File /oname=$R0 "${AFS_WININSTALL_DIR}\Killer.exe"   ; Might not have the MSVCR71.DLL file to run
508   nsExec::Exec '$R0 afsd_service.exe'
509   nsExec::Exec '$R0 afscreds.exe'
510   Exec "afscreds.exe -z"
511   ; in case we are upgrading an old version that does not support -z
512   nsExec::Exec '$R0 afscreds.exe'
513 !IFDEF INSTALL_KFW
514   ;nsExec::Exec '$R0 krbcc32s.exe'
515 !ENDIF
516
517   nsExec::Exec "net stop TransarcAFSDaemon"
518   nsExec::Exec "net stop TransarcAFSServer"
519   
520    ; Do client components
521   SetOutPath "$INSTDIR\Client\Program"
522   File "${AFS_CLIENT_BUILDDIR}\afsshare.exe"
523   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\libosi.dll" "$INSTDIR\Client\Program\libosi.dll" "$INSTDIR"
524   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\libafsconf.dll" "$INSTDIR\Client\Program\libafsconf.dll" "$INSTDIR"
525   File "${AFS_CLIENT_BUILDDIR}\klog.exe"
526   File "${AFS_CLIENT_BUILDDIR}\tokens.exe"
527   File "${AFS_CLIENT_BUILDDIR}\unlog.exe"
528   File "${AFS_CLIENT_BUILDDIR}\fs.exe"
529   File "${AFS_CLIENT_BUILDDIR}\aklog.exe"
530   File "${AFS_CLIENT_BUILDDIR}\afscreds.exe"
531   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext.dll" "$INSTDIR\Client\Program\afs_shl_ext.dll" "$INSTDIR"
532   File "${AFS_CLIENT_BUILDDIR}\afsd_service.exe"
533   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afslogon.dll" "$INSTDIR\Client\Program\afslogon.dll" "$INSTDIR"
534   File "${AFS_CLIENT_BUILDDIR}\symlink.exe"
535   File "${AFS_DESTDIR}\bin\kpasswd.exe"
536   File "${AFS_SERVER_BUILDDIR}\pts.exe"
537   File "${AFS_SERVER_BUILDDIR}\bos.exe"
538   File "${AFS_SERVER_BUILDDIR}\kas.exe"
539   File "${AFS_SERVER_BUILDDIR}\vos.exe"
540   File "${AFS_SERVER_BUILDDIR}\udebug.exe"
541   File "${AFS_DESTDIR}\bin\translate_et.exe"
542   File "${AFS_DESTDIR}\etc\rxdebug.exe"
543   File "${AFS_DESTDIR}\etc\backup.exe"
544   
545    Call AFSLangFiles
546    
547
548    
549   ; Do WINDOWSDIR components
550   
551   ; Do Windows SYSDIR (Control panel)
552   SetOutPath "$SYSDIR"
553   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa.cpl" "$SYSDIR\afs_cpa.cpl" "$INSTDIR"
554   
555   ; Get AFS CellServDB file
556   Call afs.GetCellServDB
557
558 !ifdef INSTALL_KFW
559   ; Include Kerberos for Windows files in the installer...
560   SetOutPath "$INSTDIR\kfw\bin\"
561   File "${KFW_SOURCE}\bin\*"
562   SetOutPath "$INSTDIR\kfw\doc"
563   File "${KFW_SOURCE}\doc\*"
564 !endif
565    
566   ;Store install folder
567   WriteRegStr HKCU "${AFS_REGKEY_ROOT}\Client" "" $INSTDIR
568   Call AFSCommon.Install
569   
570   ; Write registry entries
571   WriteRegStr HKCR "*\shellex\ContextMenuHandlers\AFS Client Shell Extension" "" "{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}"
572   WriteRegStr HKCR "CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}" "" "AFS Client Shell Extension"
573   WriteRegStr HKCR "CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}\InprocServer32" "" "$INSTDIR\Client\Program\afs_shl_ext.dll"
574   WriteRegStr HKCR "CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}\InprocServer32" "ThreadingModel" "Apartment"
575   WriteRegStr HKCR "FOLDER\shellex\ContextMenuHandlers\AFS Client Shell Extension" "" "{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}"
576   WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" "{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}" "AFS Client Shell Extension"
577   
578   ; AFS Reg entries
579   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion"
580   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "VersionString" ${AFS_VERSION}
581   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "Title" "AFS Client"
582   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "Description" "AFS Client"
583   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "PathName" "$INSTDIR\Client"
584   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "Software Type" "File System"
585   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
586   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
587   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
588   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
589   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "Title" "AFS Client"
590   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "Description" "AFS Client"
591   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "Software Type" "File System"
592   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "PathName" "$INSTDIR\Client\Program"
593   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
594   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
595   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
596 !ifdef DEBUG
597   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "Debug" 1
598   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "Debug" 1
599 !else
600    ; Delete the DEBUG string
601    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "Debug"
602    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Client\${AFS_VERSION}" "Debug"
603 !endif
604
605    ; On Windows 2000 work around KB301673.  This is fixed in Windows XP and 2003
606    Call GetWindowsVersion
607    Pop $R1
608    StrCmp $R1 "2000" +1 +2
609    WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\NetBT\Parameters" "SmbDeviceEnabled" 0
610   
611   ;Write start menu entries
612   CreateDirectory "$SMPROGRAMS\OpenAFS\Client"
613   CreateShortCut "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" "$INSTDIR\Uninstall.exe"
614   
615   ; Create command line options for AFSCreds...
616   StrCpy $R2 ""
617   ReadINIStr $R1 $2 "Field 3" "State"
618   StrCmp $R1 "1" +1 +2
619   StrCpy $R2 "-A "
620   ReadINIStr $R1 $2 "Field 5" "State"
621   StrCmp $R1 "1" +1 +2
622   StrCpy $R2 "$R2-M "
623   ReadINIStr $R1 $2 "Field 7" "State"
624   StrCmp $R1 "1" +1 +2
625   StrCpy $R2 "$R2-N "
626   ReadINIStr $R1 $2 "Field 9" "State"
627   StrCmp $R1 "1" +1 +2
628   StrCpy $R2 "$R2-Q "
629   ReadINIStr $R1 $2 "Field 13" "State"
630   StrCmp $R1 "1" +1 +2
631   StrCpy $R2 "$R2-S"
632   
633   CreateShortCut "$SMPROGRAMS\OpenAFS\Client\Authentication.lnk" "$INSTDIR\Client\Program\afscreds.exe" "$R2"
634   
635   ReadINIStr $R1 $2 "Field 1" "State"
636   StrCmp $R1 "1" +1 +2
637   CreateShortCut "$SMSTARTUP\AFS Credentials.lnk" "$INSTDIR\Client\Program\afscreds.exe" "$R2"
638
639   
640   
641   Push "$INSTDIR\Client\Program"
642   Call AddToUniquePath
643   Push "$INSTDIR\Common"
644   Call AddToUniquePath
645   
646 !ifdef INSTALL_KFW
647   ; Add kfw to path too
648   Push "$INSTDIR\kfw\bin"
649   Call AddToUniquePath
650 !endif
651    
652   ; Create the AFS service
653   SetOutPath "$INSTDIR\Common"
654   File "${AFS_WININSTALL_DIR}\Service.exe"
655   nsExec::Exec "net stop TransarcAFSDaemon"
656   ;IMPORTANT!  If we are not refreshing the config files, do NOT remove the service
657   ;Don't re-install because it must be present or we wouldn't have passed the Reg check
658  
659   ReadRegStr $R2 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "Cell"
660   StrCmp $R2 "" +1 skipremove
661   nsExec::Exec '$INSTDIR\Common\Service.exe u TransarcAFSDaemon'
662   nsExec::Exec '$INSTDIR\Common\Service.exe TransarcAFSDaemon "$INSTDIR\Client\Program\afsd_service.exe" "OpenAFS Client Service"'
663 skipremove:
664   Delete "$INSTDIR\Common\service.exe"
665
666   ; Daemon entries
667   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" "" ""
668   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "ProviderPath" "$INSTDIR\Client\Program\afslogon.dll"
669   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "AuthentProviderPath" "$INSTDIR\Client\Program\afslogon.dll"
670   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "AuthentProviderPath" "$INSTDIR\Client\Program\afslogon.dll"
671   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "Class" 2
672   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "VerboseLogging" 10
673
674   ; Must also add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\HwOrder
675   ; and HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order
676   ; to also include the service name.
677   Call AddProvider
678   ReadINIStr $R0 $1 "Field 7" "State"
679   ReadINIStr $R1 $1 "Field 9" "State"
680   ; Complicated way to do $R1 = ($R1 *2) + $R0
681   IntOp $R2 $R1 * 2
682   IntOp $R1 $R2 + $R0
683   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "LogonOptions" $R1
684   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "LogonScript" "$INSTDIR\Client\Program\afscreds.exe -:%s -x -a -m -n -q"
685   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\NetworkProvider" "Name" "OpenAFSDaemon"
686
687   ;Write cell name
688   ReadINIStr $R0 $1 "Field 2" "State"
689   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "Cell" $R0
690   ReadINIStr $R0 $1 "Field 3" "State"
691   WriteRegDWORD HKLM "SOFTWARE\OpenAFS\Client" "ShowTrayIcon" 1
692   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "SecurityLevel" $R0
693   ReadINIStr $R0 $1 "Field 5" "State"  
694   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "FreelanceClient" $R0
695   ReadINIStr $R0 $1 "Field 11" "State"
696   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "UseDNS" $R0
697   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "NetbiosName" "AFS"
698   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "MountRoot" "/afs"
699   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "RxMaxMTU" 1260
700   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "IsGateway" 0
701   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "HideDotFiles" 1
702   WriteRegStr HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "TruncateNetbios" "on"
703
704   ; Find Lana By Name appears to be causing grief for many people 
705   ; I do not have time to track this down so I am simply going to disable it
706   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "NoFindLanaByName" 1
707
708   strcpy $REG_SUB_KEY "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" 
709   strcpy $REG_VALUE   "DependOnGroup" 
710   strcpy $REG_DATA_1  "PNP_TDI"
711   strcpy $REG_DATA_2  ""
712   strcpy $REG_DATA_3  ""
713   Call RegWriteMultiStr
714   strcpy $REG_SUB_KEY "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" 
715   strcpy $REG_VALUE   "DependOnService" 
716   strcpy $REG_DATA_1  "Tcpip"
717   strcpy $REG_DATA_2  "NETBIOS"
718   strcpy $REG_DATA_3  "RpcSs"
719   Call RegWriteMultiStr
720
721   SetRebootFlag true
722   
723   WriteUninstaller "$INSTDIR\Uninstall.exe"
724   
725 SectionEnd
726
727
728
729 ; MS Loopback adapter
730 Section "MS Loopback Adapter" secLoopback
731
732 Call afs.InstallMSLoopback
733
734 SectionEnd
735
736
737 ;------------------------
738 ; OpenAFS SERVER  
739 Section "AFS Server" secServer
740
741   SetShellVarContext all
742
743   ; Check for bad previous installation (if we are doing a new install)
744   Call IsAnyAFSInstalled
745   Pop $R0
746   StrCmp $R0 "0" +1 skipCheck
747   Call CheckPathForAFS
748 skipCheck:
749
750   ; Stop any running services or we can't replace the files
751   ; Stop the running processes
752   GetTempFileName $R0
753   File /oname=$R0 "${AFS_WININSTALL_DIR}\Killer.exe"
754   nsExec::Exec '$R0 afscreds.exe'
755   Exec "afscreds.exe -z"
756   ; in case we are upgrading an old version that does not support -z
757   Sleep 2000
758   nsExec::Exec '$R0 afscreds.exe'
759 !IFDEF INSTALL_KFW
760   ;nsExec::Exec '$R0 krbcc32s.exe'
761 !ENDIF
762
763   Delete $R0
764   
765   nsExec::Exec "net stop TransarcAFSDaemon"
766   nsExec::Exec "net stop TransarcAFSServer"
767
768   CreateDirectory "$INSTDIR\Server\usr\afs\etc"
769   CreateDirectory "$INSTDIR\Server\usr\afs\local"
770   CreateDirectory "$INSTDIR\Server\usr\afs\etc\logs"
771   
772   SetOutPath "$INSTDIR\Server\usr\afs\bin"  
773   File "${AFS_SERVER_BUILDDIR}\afskill.exe"
774   File "${AFS_SERVER_BUILDDIR}\afssvrcfg.exe"
775   File "${AFS_SERVER_BUILDDIR}\bosctlsvc.exe"
776   File "${AFS_SERVER_BUILDDIR}\bosserver.exe"
777   File "${AFS_SERVER_BUILDDIR}\buserver.exe"
778   File "${AFS_ETC_BUILDDIR}\butc.exe"
779   File "${AFS_SERVER_BUILDDIR}\fileserver.exe"
780   File "${AFS_ETC_BUILDDIR}\fms.exe"
781   File "${AFS_SERVER_BUILDDIR}\kaserver.exe"
782   File "${AFS_SERVER_BUILDDIR}\ptserver.exe"
783   File "${AFS_SERVER_BUILDDIR}\salvager.exe"
784   File "${AFS_SERVER_BUILDDIR}\upclient.exe"
785   File "${AFS_SERVER_BUILDDIR}\upserver.exe"
786   File "${AFS_SERVER_BUILDDIR}\vlserver.exe"
787   File "${AFS_SERVER_BUILDDIR}\volinfo.exe"
788   File "${AFS_SERVER_BUILDDIR}\volserver.exe"
789  
790  ;AFS Server common files
791  SetOutPath "$INSTDIR\Common"
792  File "${AFS_SERVER_BUILDDIR}\afsvosadmin.dll"
793  File "${AFS_SERVER_BUILDDIR}\afsbosadmin.dll"
794  File "${AFS_SERVER_BUILDDIR}\afscfgadmin.dll"
795  File "${AFS_SERVER_BUILDDIR}\afskasadmin.dll"
796  File "${AFS_SERVER_BUILDDIR}\afsptsadmin.dll"
797
798 !ifdef DEBUG
799 !endif
800  SetOutPath "$INSTDIR\Common"
801    Call AFSLangFiles
802    
803    SetOutPath "$SYSDIR"
804   !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver.cpl" "$SYSDIR\afsserver.cpl" "$INSTDIR"
805    
806   ;Store install folder
807   WriteRegStr HKCU "${AFS_REGKEY_ROOT}\AFS Server" "" $INSTDIR
808   
809   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion"
810   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "VersionString" ${AFS_VERSION}
811   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Title" "AFS Server"
812   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Description" "AFS Server for Windows"
813   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "PathName" "$INSTDIR\Server"
814   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Software Type" "File System"
815   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
816   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
817   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
818   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
819   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Title" "AFS Server"
820   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Description" "AFS Server for Windows"
821   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Software Type" "File System"
822   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "PathName" "$INSTDIR\Server"
823   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
824   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
825   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
826 !ifdef DEBUG
827   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Debug" 1
828   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Debug" 1
829 !else
830    ; Delete the DEBUG string
831    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Debug"
832    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Debug"
833 !endif
834   ; Install the service
835   SetOutPath "$INSTDIR\Common"
836   File "${AFS_WININSTALL_DIR}\Service.exe"
837 !ifdef DEBUG
838   File "${AFS_WININSTALL_DIR}\Service.pdb"
839 !endif
840
841   ; Check if the service exists--if it does, this is an upgrade/re-install
842   ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSServer" "ImagePath"
843   StrCmp $R0 "$INSTDIR\Server\usr\afs\bin\bosctlsvc.exe" SkipStartup
844   
845   ; If an uninstall was done, but we kept the config files, also skip
846   IfFileExists "$INSTDIR\Server\usr\afs\etc\ThisCell" SkipStartup
847
848   ; Make the server config wizard auto-start on bootup if this is an install (not an upgrade)
849   WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" "AFS Server Wizard" '"$INSTDIR\Server\usr\afs\bin\afssvrcfg.exe" /wizard"'
850   
851   
852 SkipStartup:
853   ;Don't want to whack existing settings... Make users un-install and then re-install if they want that
854   ;nsExec::Exec '$INSTDIR\Common\service.exe u TransarcAFSServer'
855   nsExec::Exec '$INSTDIR\Common\service.exe TransarcAFSServer "$INSTDIR\Server\usr\afs\bin\bosctlsvc.exe" "OpenAFS AFS Server"'
856   Delete "$INSTDIR\Common\service.exe"
857   
858   CreateDirectory "$SMPROGRAMS\OpenAFS\Server"
859   CreateShortCut "$SMPROGRAMS\OpenAFS\Server\Server Configuration.lnk" "$INSTDIR\Server\usr\afs\bin\afssvrcfg.exe"
860   
861   
862   WriteUninstaller "$INSTDIR\Uninstall.exe"
863
864 SectionEnd
865
866
867 ;----------------------------
868 ; OpenAFS Control Center
869 Section "AFS Control Center" secControl
870
871   SetShellVarContext all
872
873    SetOutPath "$INSTDIR\Control Center"
874   File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.exe"
875   File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.exe"
876   File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.exe"
877    
878
879  ;AFS Server common files
880  Call AFSCommon.Install
881  Call AFSLangFiles
882  SetOutPath "$INSTDIR\Common"
883
884   SetOutPath "$INSTDIR\Common"
885 !IFDEF DEBUG
886 !IFDEF CL_1310
887    File "${SYSTEMDIR}\msvcr71d.dll"
888    File "${SYSTEMDIR}\msvcp71d.dll"
889    File "${SYSTEMDIR}\mfc71d.dll"
890    File "${SYSTEMDIR}\MFC71CHS.DLL"
891    File "${SYSTEMDIR}\MFC71CHT.DLL"
892    File "${SYSTEMDIR}\MFC71DEU.DLL"
893    File "${SYSTEMDIR}\MFC71ENU.DLL"
894    File "${SYSTEMDIR}\MFC71ESP.DLL"
895    File "${SYSTEMDIR}\MFC71FRA.DLL"
896    File "${SYSTEMDIR}\MFC71ITA.DLL"
897    File "${SYSTEMDIR}\MFC71JPN.DLL"
898    File "${SYSTEMDIR}\MFC71KOR.DLL"
899 !ELSE
900 !IFDEF CL_1300
901    File "${SYSTEMDIR}\msvcr70d.dll"
902    File "${SYSTEMDIR}\msvcp70d.dll"
903    File "${SYSTEMDIR}\mfc70d.dll"
904    File "${SYSTEMDIR}\MFC70CHS.DLL"
905    File "${SYSTEMDIR}\MFC70CHT.DLL"
906    File "${SYSTEMDIR}\MFC70DEU.DLL"
907    File "${SYSTEMDIR}\MFC70ENU.DLL"
908    File "${SYSTEMDIR}\MFC70ESP.DLL"
909    File "${SYSTEMDIR}\MFC70FRA.DLL"
910    File "${SYSTEMDIR}\MFC70ITA.DLL"
911    File "${SYSTEMDIR}\MFC70JPN.DLL"
912    File "${SYSTEMDIR}\MFC70KOR.DLL"
913 !ELSE
914    File "${SYSTEMDIR}\mfc42d.dll"
915    File "${SYSTEMDIR}\msvcp60d.dll"
916    File "${SYSTEMDIR}\msvcrtd.dll"
917 !ENDIF
918 !ENDIF
919 !ELSE
920 !IFDEF CL_1310
921    File "${SYSTEMDIR}\mfc71.dll"
922    File "${SYSTEMDIR}\msvcr71.dll"
923    File "${SYSTEMDIR}\msvcp71.dll"
924    File "${SYSTEMDIR}\MFC71CHS.DLL"
925    File "${SYSTEMDIR}\MFC71CHT.DLL"
926    File "${SYSTEMDIR}\MFC71DEU.DLL"
927    File "${SYSTEMDIR}\MFC71ENU.DLL"
928    File "${SYSTEMDIR}\MFC71ESP.DLL"
929    File "${SYSTEMDIR}\MFC71FRA.DLL"
930    File "${SYSTEMDIR}\MFC71ITA.DLL"
931    File "${SYSTEMDIR}\MFC71JPN.DLL"
932    File "${SYSTEMDIR}\MFC71KOR.DLL"
933 !ELSE
934 !IFDEF CL_1300
935    File "${SYSTEMDIR}\mfc70.dll"
936    File "${SYSTEMDIR}\msvcr70.dll"
937    File "${SYSTEMDIR}\msvcp70.dll"
938    File "${SYSTEMDIR}\MFC70CHS.DLL"
939    File "${SYSTEMDIR}\MFC70CHT.DLL"
940    File "${SYSTEMDIR}\MFC70DEU.DLL"
941    File "${SYSTEMDIR}\MFC70ENU.DLL"
942    File "${SYSTEMDIR}\MFC70ESP.DLL"
943    File "${SYSTEMDIR}\MFC70FRA.DLL"
944    File "${SYSTEMDIR}\MFC70ITA.DLL"
945    File "${SYSTEMDIR}\MFC70JPN.DLL"
946    File "${SYSTEMDIR}\MFC70KOR.DLL"
947 !ELSE
948    File "${SYSTEMDIR}\mfc42.dll"
949    File "${SYSTEMDIR}\msvcp60.dll"
950    File "${SYSTEMDIR}\msvcrt.dll"
951 !ENDIF
952 !ENDIF
953 !ENDIF   
954    ;Store install folder
955   WriteRegStr HKCU "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "PathName" $INSTDIR
956   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "VersionString" ${AFS_VERSION}
957   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
958   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
959   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
960   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
961   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
962   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
963   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
964 !ifdef DEBUG
965   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "Debug" 1
966   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "Debug" 1
967 !else
968    ; Delete the DEBUG string
969    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "Debug"
970    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "Debug"
971 !endif
972
973   ;Write start menu entries
974   CreateDirectory "$SMPROGRAMS\OpenAFS\Control Center"
975   CreateShortCut "$SMPROGRAMS\OpenAFS\Control Center\Account Manager.lnk" "$INSTDIR\Control Center\TaAfsAccountManager.exe"
976   CreateShortCut "$SMPROGRAMS\OpenAFS\Control Center\Server Manager.lnk" "$INSTDIR\Control Center\TaAfsServerManager.exe"
977   
978   WriteUninstaller "$INSTDIR\Uninstall.exe"
979
980 SectionEnd   
981
982
983 ;----------------------------
984 ; OpenAFS Supplemental Documentation
985 Section "Supplemental Documentation" secDocs
986   SetShellVarContext all
987
988    StrCmp $LANGUAGE ${LANG_ENGLISH} DoEnglish
989    StrCmp $LANGUAGE ${LANG_GERMAN} DoGerman
990    StrCmp $LANGUAGE ${LANG_SPANISH} DoSpanish
991    StrCmp $LANGUAGE ${LANG_JAPANESE} DoJapanese
992    StrCmp $LANGUAGE ${LANG_KOREAN} DoKorean
993    StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} DoPortugueseBR
994    StrCmp $LANGUAGE ${LANG_SIMPCHINESE} DoSimpChinese
995    StrCmp $LANGUAGE ${LANG_TRADCHINESE} DoTradChinese
996    
997    
998 DoEnglish:
999    SetOutPath "$INSTDIR\Documentation\html"
1000    File "..\..\doc\install\Documentation\en_US\html\*"
1001    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1002    File "..\..\doc\install\Documentation\en_US\html\CmdRef\*"
1003    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1004    File "..\..\doc\install\Documentation\en_US\html\InstallGd\*"
1005    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1006    File "..\..\doc\install\Documentation\en_US\html\ReleaseNotes\*"
1007    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1008    File "..\..\doc\install\Documentation\en_US\html\SysAdminGd\*"
1009    goto DoneLanguage
1010    
1011 DoGerman:
1012    SetOutPath "$INSTDIR\Documentation"
1013    File "..\..\doc\install\Documentation\de_DE\README.TXT"
1014    SetOutPath "$INSTDIR\Documentation\html"
1015    File "..\..\doc\install\Documentation\de_DE\html\*"
1016    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1017    ;File "..\..\doc\install\Documentation\de_DE\html\CmdRef\*"
1018    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1019    File "..\..\doc\install\Documentation\de_DE\html\InstallGd\*"
1020    ;SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1021    ;File "..\..\doc\install\Documentation\de_DE\html\ReleaseNotes\*"
1022    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1023    ;File "..\..\doc\install\Documentation\de_DE\html\SysAdminGd\*"
1024    goto DoneLanguage
1025    
1026 DoSpanish:
1027    SetOutPath "$INSTDIR\Documentation"
1028    File "..\..\doc\install\Documentation\es_ES\README.TXT"
1029    SetOutPath "$INSTDIR\Documentation\html"
1030    File "..\..\doc\install\Documentation\es_ES\html\*"
1031    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1032    ;File "..\..\doc\install\Documentation\es_ES\html\CmdRef\*"
1033    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1034    ;File "..\..\doc\install\Documentation\es_ES\html\InstallGd\*"
1035    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1036    ;File "..\..\doc\install\Documentation\es_ES\html\ReleaseNotes\*"
1037    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1038    ;File "..\..\doc\install\Documentation\es_ES\html\SysAdminGd\*"
1039    goto DoneLanguage
1040
1041 DoJapanese:
1042    SetOutPath "$INSTDIR\Documentation"
1043    File "..\..\doc\install\Documentation\ja_JP\README.TXT"
1044    SetOutPath "$INSTDIR\Documentation\html"
1045    File "..\..\doc\install\Documentation\ja_JP\html\*"
1046    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1047    File "..\..\doc\install\Documentation\ja_JP\html\CmdRef\*"
1048    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1049    File "..\..\doc\install\Documentation\ja_JP\html\InstallGd\*"
1050    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1051    ;File "..\..\doc\install\Documentation\ja_JP\html\ReleaseNotes\*"
1052    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1053    ;File "..\..\doc\install\Documentation\ja_JP\html\SysAdminGd\*"
1054    goto DoneLanguage
1055    
1056 DoKorean:
1057    SetOutPath "$INSTDIR\Documentation"
1058    File "..\..\doc\install\Documentation\ko_KR\README.TXT"
1059    SetOutPath "$INSTDIR\Documentation\html"
1060    File "..\..\doc\install\Documentation\ko_KR\html\*"
1061    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1062    ;File "..\..\doc\install\Documentation\ko_KR\html\CmdRef\*"
1063    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1064    File "..\..\doc\install\Documentation\ko_KR\html\InstallGd\*"
1065    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1066    File "..\..\doc\install\Documentation\ko_KR\html\ReleaseNotes\*"
1067    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1068    File "..\..\doc\install\Documentation\ko_KR\html\SysAdminGd\*"
1069    goto DoneLanguage
1070    
1071 DoPortugueseBR:
1072    SetOutPath "$INSTDIR\Documentation"
1073    File "..\..\doc\install\Documentation\pt_BR\README.TXT"
1074    SetOutPath "$INSTDIR\Documentation\html"
1075    File "..\..\doc\install\Documentation\pt_BR\html\*"
1076    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1077    ;File "..\..\doc\install\Documentation\pt_BR\html\CmdRef\*"
1078    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1079    File "..\..\doc\install\Documentation\pt_BR\html\InstallGd\*"
1080    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1081    File "..\..\doc\install\Documentation\pt_BR\html\ReleaseNotes\*"
1082    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1083    ;File "..\..\doc\install\Documentation\pt_BR\html\SysAdminGd\*"
1084    goto DoneLanguage
1085
1086 DoSimpChinese:
1087    SetOutPath "$INSTDIR\Documentation"
1088    File "..\..\doc\install\Documentation\zh_CN\README.TXT"
1089    SetOutPath "$INSTDIR\Documentation\html"
1090    File "..\..\doc\install\Documentation\zh_CN\html\*"
1091    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1092    ;File "..\..\doc\install\Documentation\zh_CN\html\CmdRef\*"
1093    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1094    File "..\..\doc\install\Documentation\zh_CN\html\InstallGd\*"
1095    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1096    File "..\..\doc\install\Documentation\zh_CN\html\ReleaseNotes\*"
1097    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1098    ;File "..\..\doc\install\Documentation\zh_CN\html\SysAdminGd\*"
1099    goto DoneLanguage
1100    
1101 DoTradChinese:
1102    SetOutPath "$INSTDIR\Documentation"
1103    File "..\..\doc\install\Documentation\zh_TW\README.TXT"
1104    SetOutPath "$INSTDIR\Documentation\html"
1105    File "..\..\doc\install\Documentation\zh_TW\html\*"
1106    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1107    ;File "..\..\doc\install\Documentation\zh_TW\html\CmdRef\*"
1108    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1109    File "..\..\doc\install\Documentation\zh_TW\html\InstallGd\*"
1110    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1111    File "..\..\doc\install\Documentation\zh_TW\html\ReleaseNotes\*"
1112    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1113    ;File "..\..\doc\install\Documentation\zh_TW\html\SysAdminGd\*"
1114    goto DoneLanguage
1115    
1116    
1117 DoneLanguage:
1118    ;Store install folder
1119   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation" "" $INSTDIR
1120   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "VersionString" ${AFS_VERSION}
1121   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
1122   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
1123   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
1124   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
1125   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
1126   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
1127   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
1128
1129   ; Write start menu shortcut
1130   SetOutPath "$SMPROGRAMS\OpenAFS"
1131   CreateShortCut "$SMPROGRAMS\OpenAFS\Documentation.lnk" "$INSTDIR\Documentation\html\index.htm"
1132   
1133   
1134   WriteUninstaller "$INSTDIR\Uninstall.exe"
1135   CreateShortCut "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" "$INSTDIR\Uninstall.exe"
1136   Call AFSCommon.Install
1137 SectionEnd  
1138   
1139
1140 Section "Software Development Kit (SDK)" secSDK
1141
1142     SetOutPath "$INSTDIR\Client\Program\lib"
1143     File /r "${AFS_CLIENT_LIBDIR}\*.*"
1144
1145     SetOutPath "$INSTDIR\Client\Program\Include"
1146     File /r "${AFS_BUILD_INCDIR}\*.*"    
1147
1148    ; Client Sample
1149    SetOutPath "$INSTDIR\Client\Program\Sample"
1150    File "..\..\afsd\sample\token.c"
1151
1152    ;Store install folder
1153   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS SDK" "" $INSTDIR
1154   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "VersionString" ${AFS_VERSION}
1155   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
1156   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
1157   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
1158   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
1159   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
1160   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
1161   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
1162
1163   WriteUninstaller "$INSTDIR\Uninstall.exe"
1164   SetOutPath "$SMPROGRAMS\OpenAFS"
1165   CreateShortCut "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" "$INSTDIR\Uninstall.exe"
1166
1167    Call AFSCommon.Install
1168 SectionEnd
1169
1170
1171 Section "Debug symbols" secDebug
1172         SectionGetFlags ${secClient} $R0
1173    IntOp $R0 $R0 & ${SF_SELECTED}
1174    IntCmp $R0 ${SF_SELECTED} +1 DoServer
1175   
1176   ; Do client components
1177   SetOutPath "$INSTDIR\Client\Program"
1178   File "${AFS_CLIENT_BUILDDIR}\afsshare.pdb"
1179   File "${AFS_CLIENT_BUILDDIR}\libosi.pdb"
1180   File "${AFS_CLIENT_BUILDDIR}\libafsconf.pdb"
1181   File "${AFS_CLIENT_BUILDDIR}\klog.pdb"
1182   File "${AFS_CLIENT_BUILDDIR}\tokens.pdb"
1183   File "${AFS_CLIENT_BUILDDIR}\unlog.pdb"
1184   File "${AFS_CLIENT_BUILDDIR}\fs.pdb"
1185   File "${AFS_CLIENT_BUILDDIR}\aklog.pdb"
1186   File "${AFS_CLIENT_BUILDDIR}\afscreds.pdb"
1187   File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext.pdb"
1188   File "${AFS_CLIENT_BUILDDIR}\afsd_service.pdb"
1189   File "${AFS_CLIENT_BUILDDIR}\afslogon.pdb"
1190   File "${AFS_CLIENT_BUILDDIR}\symlink.pdb"
1191   File "${AFS_DESTDIR}\bin\kpasswd.pdb"
1192   File "${AFS_DESTDIR}\bin\pts.pdb"
1193   File "${AFS_SERVER_BUILDDIR}\bos.pdb"
1194   File "${AFS_SERVER_BUILDDIR}\kas.pdb"
1195   File "${AFS_SERVER_BUILDDIR}\vos.pdb"
1196   File "${AFS_SERVER_BUILDDIR}\udebug.pdb"
1197   File "${AFS_DESTDIR}\bin\translate_et.pdb"
1198   File "${AFS_DESTDIR}\etc\rxdebug.pdb"
1199   File "${AFS_DESTDIR}\etc\backup.pdb"
1200
1201   SetOutPath "$SYSDIR"
1202   File "${AFS_CLIENT_BUILDDIR}\afs_cpa.pdb"
1203   
1204 DoServer:
1205         SectionGetFlags ${secServer} $R0
1206    IntOp $R0 $R0 & ${SF_SELECTED}
1207    IntCmp $R0 ${SF_SELECTED} +1 DoControl
1208
1209   ; Do server components
1210   SetOutPath "$INSTDIR\Server\usr\afs\bin"  
1211   File "${AFS_SERVER_BUILDDIR}\afskill.pdb"
1212   File "${AFS_SERVER_BUILDDIR}\afssvrcfg.pdb"
1213   File "${AFS_SERVER_BUILDDIR}\bosctlsvc.pdb"
1214   File "${AFS_SERVER_BUILDDIR}\bosserver.pdb"
1215   File "${AFS_SERVER_BUILDDIR}\buserver.pdb"
1216   File "${AFS_ETC_BUILDDIR}\butc.pdb"
1217   File "${AFS_SERVER_BUILDDIR}\fileserver.pdb"
1218   File "${AFS_ETC_BUILDDIR}\fms.pdb"
1219   File "${AFS_SERVER_BUILDDIR}\kaserver.pdb"
1220   File "${AFS_SERVER_BUILDDIR}\ptserver.pdb"
1221   File "${AFS_SERVER_BUILDDIR}\salvager.pdb"
1222   File "${AFS_SERVER_BUILDDIR}\upclient.pdb"
1223   File "${AFS_SERVER_BUILDDIR}\upserver.pdb"
1224   File "${AFS_SERVER_BUILDDIR}\vlserver.pdb"
1225   File "${AFS_SERVER_BUILDDIR}\volinfo.pdb"
1226   File "${AFS_SERVER_BUILDDIR}\volserver.pdb"
1227
1228   ; Do server common components
1229  File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
1230  File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
1231  File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
1232  File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
1233  File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
1234  
1235    SetOutPath "$SYSDIR"
1236    File "${AFS_SERVER_BUILDDIR}\afsserver.pdb"
1237
1238    ; Do control center components
1239 DoControl:
1240         SectionGetFlags ${secControl} $R0
1241    IntOp $R0 $R0 & ${SF_SELECTED}
1242    IntCmp $R0 ${SF_SELECTED} +1 DoCommon
1243
1244    SetOutPath "$INSTDIR\Control Center"   
1245   File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.pdb"
1246   File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.pdb"
1247   File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.pdb"
1248
1249 DoCommon:
1250   SetOutPath "$INSTDIR\Common"
1251 !IFDEF CL_1310
1252    File "${SYSTEMDIR}\msvcr71d.pdb"
1253    File "${SYSTEMDIR}\msvcp71d.pdb"
1254    File "${SYSTEMDIR}\mfc71d.pdb"
1255 !ELSE
1256 !IFDEF CL_1300
1257    File "${SYSTEMDIR}\msvcr70d.pdb"
1258    File "${SYSTEMDIR}\msvcp70d.pdb"
1259    File "${SYSTEMDIR}\mfc70d.pdb"
1260 !ELSE
1261    File "${SYSTEMDIR}\mfc42d.pdb"
1262    File "${SYSTEMDIR}\msvcp60d.pdb"
1263    File "${SYSTEMDIR}\msvcrtd.pdb"
1264 !ENDIF
1265 !ENDIF
1266   
1267 ; Common Areas
1268    SetOutPath "$INSTDIR\Common"
1269    File "${AFS_CLIENT_BUILDDIR}\afs_config.pdb"
1270    File "${AFS_SERVER_BUILDDIR}\afsadminutil.pdb"
1271    File "${AFS_DESTDIR}\lib\afsauthent.pdb"
1272    File "${AFS_DESTDIR}\lib\afspthread.pdb"
1273    File "${AFS_DESTDIR}\lib\afsrpc.pdb"
1274    File "${AFS_SERVER_BUILDDIR}\afsclientadmin.pdb"
1275    File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.pdb"
1276    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
1277    File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.pdb"
1278    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
1279    File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
1280    File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
1281    File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
1282    File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
1283
1284 SectionEnd
1285
1286
1287 ;Display the Finish header
1288 ;Insert this macro after the sections if you are not using a finish page
1289 ;!insertmacro MUI_SECTIONS_FINISHHEADER
1290
1291 ;--------------------------------
1292 ;Installer Functions
1293
1294 Function .onInit
1295
1296   !insertmacro MUI_LANGDLL_DISPLAY
1297   
1298   ; Set the default install options
1299         Push $0
1300
1301    Call IsUserAdmin
1302    Pop $R0
1303    StrCmp $R0 "true" contInstall
1304
1305    MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST "You must be an administrator of this machine to install this software."
1306    Abort
1307    
1308 contInstall:
1309
1310    ; Check that RPC functions are installed (I believe any one of these can be present for
1311    ; OpenAFS to work)
1312    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\RPC\ClientProtocols" "ncacn_np"
1313    StrCmp $R0 "rpcrt4.dll" contInstall2
1314    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\RPC\ClientProtocols" "ncacn_ip_tcp"
1315    StrCmp $R0 "rpcrt4.dll" contInstall2
1316    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\RPC\ClientProtocols" "ncadg_ip_udp"
1317    StrCmp $R0 "rpcrt4.dll" contInstall2
1318    
1319    MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST "An error was detected with your Windows RPC installation. Please make sure Windows RPC is installed before installing OpenAFS."
1320    Abort
1321
1322
1323 contInstall2:
1324    ; Select the loopback only if it is NOT Windows 2000 (The user can still select it,
1325    ; even though we warn them!)
1326    Call GetWindowsVersion
1327    Pop $R1
1328    StrCmp $R1 "2000" +1 DoLoop
1329    SectionGetFlags ${secLoopback} $0
1330    IntOp $0 $0 & ${SECTION_OFF}
1331    SectionSetFlags ${secLoopback} $0
1332    
1333 DoLoop:
1334    ; If the Loopback is already installed, we mark the option OFF and Read Only
1335    ; so the user can not select it.
1336    Call afs.isLoopbackInstalled
1337    IntCmp $R1 0 SkipLoop
1338    SectionGetFlags ${secLoopback} $0
1339    IntOp $0 $0 & ${SECTION_OFF}
1340    IntOp $0 $0 | ${SF_RO}
1341    SectionSetFlags ${secLoopback} $0
1342    
1343 SkipLoop:
1344    ; Never install debug symbols unless explicitly selected, except in DEBUG mode
1345         !IFNDEF DEBUG
1346    SectionGetFlags ${secDebug} $0
1347         IntOp $0 $0 & ${SECTION_OFF}
1348         SectionSetFlags ${secDebug} $0
1349    !ELSE
1350    SectionGetFlags ${secDebug} $0
1351         IntOp $0 $0 | ${SF_SELECTED}
1352         SectionSetFlags ${secDebug} $0
1353    !ENDIF
1354    ; Our logic should be like this.
1355    ;     1) If no AFS components are installed, we do a clean install with default options. (Client/Docs)
1356    ;     2) If existing modules are installed, we keep them selected
1357    ;     3) If it is an upgrade, we set the text accordingly, else we mark it as a re-install
1358    ;  TODO: Downgrade?
1359    Call IsAnyAFSInstalled
1360    Pop $R0
1361    StrCmp $R0 "0" DefaultOptions
1362    
1363    Call ShouldClientInstall
1364    Pop $R2
1365    
1366    ; Check if it was an IBM/Transarc version
1367    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" "DisplayName"
1368    StrCmp $R0 "IBM AFS Client" DoIBM
1369    StrCmp $R0 "Transarc AFS Client" DoIBM
1370 NotIBM:
1371    StrCpy $R9 ""
1372    StrCmp $R2 "0" NoClient
1373    StrCmp $R2 "1" ReinstallClient
1374    StrCmp $R2 "2" UpgradeClient
1375    StrCmp $R2 "3" DowngradeClient
1376    goto Continue
1377 DoIBM:
1378    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\AFS Client\CurrentVersion" "MajorVersion"
1379    StrCmp $R0 "3" +1 NotIBM
1380    StrCpy $R9 "IBM"
1381    goto UpgradeClient
1382
1383 Continue:
1384         SectionGetFlags ${secClient} $0
1385         IntOp $0 $0 | ${SF_SELECTED}
1386         SectionSetFlags ${secClient} $0
1387     ;# !insertmacro SelectSection ${secClient}
1388    goto skipClient
1389 NoClient:
1390         ;StrCpy $1 ${secClient} ; Gotta remember which section we are at now...
1391         SectionGetFlags ${secClient} $0
1392         IntOp $0 $0 & ${SECTION_OFF}
1393         SectionSetFlags ${secClient} $0
1394    goto skipClient
1395 UpgradeClient:
1396         SectionGetFlags ${secClient} $0
1397         IntOp $0 $0 | ${SF_SELECTED}
1398         SectionSetFlags ${secClient} $0
1399    SectionSetText ${secClient} $(UPGRADE_CLIENT)
1400    goto skipClient
1401 ReinstallClient:
1402         SectionGetFlags ${secClient} $0
1403         IntOp $0 $0 | ${SF_SELECTED}
1404         SectionSetFlags ${secClient} $0
1405    SectionSetText ${secClient} $(REINSTALL_CLIENT)
1406    goto skipClient
1407 DowngradeClient:
1408         SectionGetFlags ${secClient} $0
1409         IntOp $0 $0 | ${SF_SELECTED}
1410         SectionSetFlags ${secClient} $0
1411    SectionSetText ${secClient} $(REINSTALL_CLIENT)
1412    goto skipClient
1413
1414    
1415 skipClient:   
1416    
1417    Call ShouldServerInstall
1418    Pop $R2
1419    StrCmp $R2 "0" NoServer
1420    StrCmp $R2 "1" ReinstallServer
1421    StrCmp $R2 "2" UpgradeServer
1422    StrCmp $R2 "3" DowngradeServer
1423    
1424         SectionGetFlags ${secServer} $0
1425         IntOp $0 $0 | ${SF_SELECTED}
1426         SectionSetFlags ${secServer} $0
1427         ;# !insertmacro UnselectSection ${secServer}
1428    goto skipServer
1429
1430 UpgradeServer:
1431    SectionGetFlags ${secServer} $0
1432    IntOp $0 $0 | ${SF_SELECTED}
1433    SectionSetFlags ${secServer} $0
1434    SectionSetText ${secServer} $(UPGRADE_SERVER)
1435    goto skipServer
1436
1437 ReinstallServer:
1438    SectionGetFlags ${secServer} $0
1439    IntOp $0 $0 | ${SF_SELECTED}
1440    SectionSetFlags ${secServer} $0
1441    SectionSetText ${secServer} $(REINSTALL_SERVER)
1442    goto skipServer
1443
1444 DowngradeServer:
1445    SectionGetFlags ${secServer} $0
1446    IntOp $0 $0 | ${SF_SELECTED}
1447    SectionSetFlags ${secServer} $0
1448    SectionSetText ${secServer} $(REINSTALL_SERVER)
1449    goto skipServer
1450    
1451 NoServer:
1452         SectionGetFlags ${secServer} $0
1453         IntOp $0 $0 & ${SECTION_OFF}
1454         SectionSetFlags ${secServer} $0
1455         ;# !insertmacro UnselectSection ${secServer}
1456    goto skipServer
1457    
1458 skipServer:
1459    ; Check control center
1460    Call IsControlInstalled
1461    Pop $R2
1462    StrCmp $R2 "0" NoControl
1463
1464         SectionGetFlags ${secControl} $0
1465         IntOp $0 $0 | ${SF_SELECTED}
1466         SectionSetFlags ${secControl} $0
1467    goto CheckDocs
1468    
1469 NoControl:   
1470         SectionGetFlags ${secControl} $0
1471         IntOp $0 $0 & ${SECTION_OFF}
1472         SectionSetFlags ${secControl} $0
1473         ;# !insertmacro UnselectSection ${secControl}
1474
1475 CheckDocs:
1476    ; Check Documentation
1477    Call IsDocumentationInstalled
1478    Pop $R2
1479    StrCmp $R2 "0" NoDocs
1480         SectionGetFlags ${secDocs} $0
1481         IntOp $0 $0 | ${SF_SELECTED}
1482         SectionSetFlags ${secDocs} $0
1483    goto CheckSDK
1484    
1485 NoDocs:
1486         SectionGetFlags ${secDocs} $0
1487         IntOp $0 $0 & ${SECTION_OFF}
1488         SectionSetFlags ${secDocs} $0
1489    goto CheckSDK
1490    
1491 ; To check the SDK, we simply look to see if the files exist.  If they do,
1492 ; the SDK is installed.  If not, we don't need to push it on the user.
1493 ; If they are there, we want to make sure they match the installed version.
1494 CheckSDK:
1495    IfFileExists "$INSTDIR\Client\Program\Include\main.h" +1 NoSDK
1496    SectionGetFlags ${secSDK} $0
1497    IntOp $0 $0 | ${SF_SELECTED}
1498    SectionSetFlags ${secSDK} $0
1499    goto end
1500    
1501 NoSDK:
1502    SectionGetFlags ${secSDK} $0
1503    IntOp $0 $0 & ${SECTION_OFF}
1504    SectionSetFlags ${secSDK} $0
1505    goto end
1506    
1507 DefaultOptions:
1508    ; Client Selected
1509         SectionGetFlags ${secClient} $0
1510         IntOp $0 $0 | ${SF_SELECTED}
1511         SectionSetFlags ${secClient} $0
1512
1513    ; Server NOT selected
1514         SectionGetFlags ${secServer} $0
1515         IntOp $0 $0 & ${SECTION_OFF}
1516         SectionSetFlags ${secServer} $0
1517    
1518    ; Control Center NOT selected
1519         SectionGetFlags ${secControl} $0
1520         IntOp $0 $0 & ${SECTION_OFF}
1521         SectionSetFlags ${secControl} $0
1522         ;# !insertmacro UnselectSection ${secControl}
1523
1524    ; Documentation selected
1525         SectionGetFlags ${secDocs} $0
1526         IntOp $0 $0 | ${SF_SELECTED}
1527         SectionSetFlags ${secDocs} $0
1528         ;# !insertmacro UnselectSection ${secDocs}
1529    
1530    ; SDK not selected
1531    SectionGetFlags ${secSDK} $0
1532    IntOp $0 $0 & ${SECTION_OFF}
1533    SectionSetFlags ${secSDK} $0
1534    ;# !insertmacro UnselectSection ${secSDK}
1535    
1536    goto end
1537
1538 end:
1539         Pop $0
1540   
1541    Push $R0
1542   
1543   ; See if we can set a default installation path...
1544   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "PathName"
1545   StrCmp $R0 "" TryServer
1546   Push $R0
1547   Call GetParent
1548   
1549   ; Work around bug in 1.3.5000, 1.3.5100, 1.3.5200, 1.3.5201, 1.3.5299 installers...
1550   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "MajorVersion"
1551   StrCmp $R0 "1" +1 SkipParent
1552   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "MinorVersion"
1553   StrCmp $R0 "3" +1 SkipParent
1554   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "PatchLevel"
1555   StrCmp $R0 "5000" UpParent
1556   StrCmp $R0 "5100" UpParent
1557   StrCmp $R0 "5200" UpParent
1558   StrCmp $R0 "5201" UpParent
1559   StrCmp $R0 "5299" UpParent
1560   goto SkipParent
1561   
1562 UpParent:
1563    Call GetParent
1564   
1565 SkipParent:
1566   Pop $R0
1567   StrCpy $INSTDIR $R0
1568   goto Nope
1569   
1570 TryServer:
1571   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "PathName"
1572   StrCmp $R0 "" TryControl
1573   Push $R0
1574   Call GetParent
1575   Pop $R0
1576   StrCpy $INSTDIR $R0
1577   goto Nope
1578    
1579 TryControl:
1580   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "PathName"
1581   StrCmp $R0 "" Nope
1582   StrCpy $INSTDIR $R0
1583   
1584 Nope:
1585   Pop $R0
1586   
1587   GetTempFilename $0
1588   File /oname=$0 CellServPage.ini
1589   GetTempFilename $1
1590   File /oname=$1 AFSCell.ini
1591   GetTempFilename $2
1592   File /oname=$2 AFSCreds.ini
1593   ;File /oname=$1 ConfigURL.ini
1594   
1595 FunctionEnd
1596
1597
1598
1599
1600
1601 ;--------------------------------
1602 ; These are our cleanup functions
1603 Function .onInstFailed
1604 Delete $0
1605 Delete $1
1606 FunctionEnd
1607
1608 Function .onInstSuccess
1609 Delete $0
1610 Delete $1
1611 FunctionEnd
1612
1613
1614 ;--------------------------------
1615 ;Descriptions
1616
1617   !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
1618   !insertmacro MUI_DESCRIPTION_TEXT ${secServer} $(DESC_secServer)
1619   !insertmacro MUI_DESCRIPTION_TEXT ${secClient} $(DESC_secClient)
1620   !insertmacro MUI_DESCRIPTION_TEXT ${secControl} $(DESC_secControl)
1621   !insertmacro MUI_DESCRIPTION_TEXT ${secDocs} $(DESC_secDocs)
1622   !insertmacro MUI_DESCRIPTION_TEXT ${secSDK} $(DESC_secSDK)
1623   !insertmacro MUI_DESCRIPTION_TEXT ${secLoopback} $(DESC_secLoopback)
1624   !insertmacro MUI_DESCRIPTION_TEXT ${secDebug} $(DESC_secDebug)
1625   !insertmacro MUI_FUNCTION_DESCRIPTION_END
1626  
1627 ;--------------------------------
1628 ;Uninstaller Section
1629
1630 Section "Uninstall"
1631   ; Make sure the user REALLY wants to do this, unless they did a silent uninstall, in which case...let them!
1632   IfSilent StartRemove     ; New in v2.0b4
1633   MessageBox MB_YESNO "Are you sure you want to remove OpenAFS from this machine?" IDYES StartRemove
1634   abort
1635   
1636 StartRemove:
1637   
1638   SetShellVarContext all
1639   ; Stop the running processes
1640   GetTempFileName $R0
1641   File /oname=$R0 "${AFS_WININSTALL_DIR}\Killer.exe"
1642   nsExec::Exec '$R0 afscreds.exe'
1643   Exec "afscreds.exe -z"
1644   ; in case we are upgrading an old version that does not support -z
1645   Sleep 2000
1646   nsExec::Exec '$R0 afscreds.exe'
1647 !IFDEF INSTALL_KFW
1648   nsExec::Exec '$R0 krbcc32s.exe'
1649 !ENDIF
1650
1651   ; Delete the AFS service
1652   GetTempFileName $R0
1653   File /oname=$R0 "${AFS_WININSTALL_DIR}\Service.exe"
1654   nsExec::Exec "net stop TransarcAFSDaemon"
1655   nsExec::Exec "net stop TransarcAFSServer"
1656   nsExec::Exec '$R0 u TransarcAFSDaemon'
1657   ; After we stop the service, but before we delete it, we have to remove the volume data
1658   ; This is because the storage locations are in the registry under the service key.
1659   ; Call un.RemoveAFSVolumes
1660   nsExec::Exec '$R0 u TransarcAFSServer'
1661   Delete $R0
1662   
1663   Call un.RemoveProvider
1664
1665   Push "$INSTDIR\Client\Program"
1666   Call un.RemoveFromPath
1667   Push "$INSTDIR\Common"
1668   Call un.RemoveFromPath
1669 !ifdef INSTALL_KFW
1670   Push "$INSTDIR\kfw\bin"
1671   Call un.RemoveFromPath
1672 !endif
1673   
1674   ; Delete documentation
1675   Delete "$INSTDIR\Documentation\README.TXT"
1676   Delete "$INSTDIR\Documentation\html\*"
1677   Delete "$INSTDIR\Documentation\html\CmdRef\*"
1678   Delete "$INSTDIR\Documentation\html\InstallGd\*"
1679   Delete "$INSTDIR\Documentation\html\ReleaseNotes\*"
1680   Delete "$INSTDIR\Documentation\html\SysAdminGd\*"
1681
1682    Delete /REBOOTOK "$INSTDIR\Common\afs_config.exe"
1683    Delete /REBOOTOK "$INSTDIR\Common\afs_shl_ext.dll"
1684    Delete /REBOOTOK "$INSTDIR\Common\afsadminutil.dll"
1685    Delete /REBOOTOK "$INSTDIR\Common\lib\afsauthent.dll"
1686    Delete /REBOOTOK "$INSTDIR\Common\lib\afspthread.dll"
1687    Delete /REBOOTOK "$INSTDIR\Common\lib\afsrpc.dll"
1688    Delete /REBOOTOK "$INSTDIR\Common\afsclientadmin.dll"
1689    Delete /REBOOTOK "$INSTDIR\Common\afsprocmgmt.dll"
1690    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.dll"
1691    Delete /REBOOTOK "$INSTDIR\Common\TaAfsAppLib.dll"
1692    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.dll"
1693    Delete /REBOOTOK "$INSTDIR\Common\afsbosadmin.dll"
1694    Delete /REBOOTOK "$INSTDIR\Common\afscfgadmin.dll"
1695    Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.dll"
1696    Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.dll"
1697
1698    Delete /REBOOTOK "$INSTDIR\Common\afs_config.pdb"
1699    Delete /REBOOTOK "$INSTDIR\Common\afs_shl_ext.pdb"
1700    Delete /REBOOTOK "$INSTDIR\Common\afsadminutil.pdb"
1701    Delete /REBOOTOK "$INSTDIR\Common\lib\afsauthent.pdb"
1702    Delete /REBOOTOK "$INSTDIR\Common\lib\afspthread.pdb"
1703    Delete /REBOOTOK "$INSTDIR\Common\lib\afsrpc.pdb"
1704    Delete /REBOOTOK "$INSTDIR\Common\afsclientadmin.pdb"
1705    Delete /REBOOTOK "$INSTDIR\Common\afsprocmgmt.pdb"
1706    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.pdb"
1707    Delete /REBOOTOK "$INSTDIR\Common\TaAfsAppLib.pdb"
1708    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.pdb"
1709    Delete /REBOOTOK "$INSTDIR\Common\afsbosadmin.pdb"
1710    Delete /REBOOTOK "$INSTDIR\Common\afscfgadmin.pdb"
1711    Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.pdb"
1712    Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.pdb"
1713
1714 !IFDEF CL_1310
1715    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.dll"
1716    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.pdb"
1717    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.dll"
1718    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.pdb"
1719    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.dll"
1720    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.pdb"
1721 !ELSE
1722 !IFDEF CL_1300
1723    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.dll"
1724    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.pdb"
1725    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.dll"
1726    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.pdb"
1727    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.dll"
1728    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.pdb"
1729 !ELSE
1730    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.dll"
1731    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.pdb"
1732    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.dll"
1733    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.pdb"
1734    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
1735    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
1736 !ENDIF
1737 !ELSE
1738 !IFDEF CL_1310
1739    Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
1740    Delete /REBOOTOK "$INSTDIR\bin\msvcr71.dll"
1741    Delete /REBOOTOK "$INSTDIR\bin\msvcp71.dll"
1742    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHS.DLL"
1743    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHT.DLL"
1744    Delete /REBOOTOK "$INSTDIR\bin\MFC71DEU.DLL"
1745    Delete /REBOOTOK "$INSTDIR\bin\MFC71ENU.DLL"
1746    Delete /REBOOTOK "$INSTDIR\bin\MFC71ESP.DLL"
1747    Delete /REBOOTOK "$INSTDIR\bin\MFC71FRA.DLL"
1748    Delete /REBOOTOK "$INSTDIR\bin\MFC71ITA.DLL"
1749    Delete /REBOOTOK "$INSTDIR\bin\MFC71JPN.DLL"
1750    Delete /REBOOTOK "$INSTDIR\bin\MFC71KOR.DLL"
1751 !ELSE
1752 !IFDEF CL_1300
1753    Delete /REBOOTOK "$INSTDIR\bin\mfc70.dll"
1754    Delete /REBOOTOK "$INSTDIR\bin\msvcr70.dll"
1755    Delete /REBOOTOK "$INSTDIR\bin\msvcp70.dll"
1756    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHS.DLL"
1757    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHT.DLL"
1758    Delete /REBOOTOK "$INSTDIR\bin\MFC70DEU.DLL"
1759    Delete /REBOOTOK "$INSTDIR\bin\MFC70ENU.DLL"
1760    Delete /REBOOTOK "$INSTDIR\bin\MFC70ESP.DLL"
1761    Delete /REBOOTOK "$INSTDIR\bin\MFC70FRA.DLL"
1762    Delete /REBOOTOK "$INSTDIR\bin\MFC70ITA.DLL"
1763    Delete /REBOOTOK "$INSTDIR\bin\MFC70JPN.DLL"
1764    Delete /REBOOTOK "$INSTDIR\bin\MFC70KOR.DLL"
1765 !ELSE
1766    Delete /REBOOTOK "$INSTDIR\bin\mfc42.dll"
1767    Delete /REBOOTOK "$INSTDIR\bin\msvcp60.dll"
1768    Delete /REBOOTOK "$INSTDIR\bin\msvcrt.dll"
1769 !ENDIF
1770 !ENDIF
1771 !ENDIF
1772   
1773    IfSilent SkipDel
1774 ;  IfFileExists "$WINDIR\afsdcell.ini" CellExists SkipDelAsk
1775 ;  CellExists:
1776   MessageBox MB_YESNO "Would you like to keep your configuration files?" IDYES SkipDel
1777   Delete "$WINDIR\afsdcell.ini"
1778
1779   Delete "$WINDIR\afsdsbmt.ini"
1780 ; Only remove krb5.ini if KfW was installed
1781 !IFDEF INSTALL_KFW
1782   Delete "$WINDIR\krb5.ini"
1783 !ENDIF
1784   Delete "$WINDIR\afsdns.ini"
1785   Delete "$WINDIR\afs_freelance.ini"
1786   
1787   SkipDel:
1788   Delete "$WINDIR\afsd_init.log"
1789   Delete "$INSTDIR\Uninstall.exe"
1790
1791   ; Remove server
1792   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afskill.exe"
1793   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afssvrcfg.exe"
1794   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosctlsvc.exe"
1795   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosserver.exe"
1796   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\buserver.exe"
1797   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\butc.exe"
1798   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fileserver.exe"
1799   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fms.exe"
1800   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\kaserver.exe"
1801   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\ptserver.exe"
1802   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\salvager.exe"
1803   Delete "$INSTDIR\Server\usr\afs\bin\ServerUninst.dll"
1804   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\upclient.exe"
1805   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\upserver.exe"
1806   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\vlserver.exe"
1807   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volinfo.exe"
1808   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volserver.exe"
1809
1810   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afskill.pdb"
1811   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afssvrcfg.pdb"
1812   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosctlsvc.pdb"
1813   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosserver.pdb"
1814   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\buserver.pdb"
1815   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\butc.pdb"
1816   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fileserver.pdb"
1817   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fms.pdb"
1818   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\kaserver.pdb"
1819   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\ptserver.pdb"
1820   Delete "$INSTDIR\Server\usr\afs\bin\salvager.pdb"
1821   Delete "$INSTDIR\Server\usr\afs\bin\ServerUninst.pdb"
1822   Delete "$INSTDIR\Server\usr\afs\bin\upclient.pdb"
1823   Delete "$INSTDIR\Server\usr\afs\bin\upserver.pdb"
1824   Delete "$INSTDIR\Server\usr\afs\bin\vlserver.pdb"
1825   Delete "$INSTDIR\Server\usr\afs\bin\volinfo.pdb"
1826   Delete "$INSTDIR\Server\usr\afs\bin\volserver.pdb"
1827
1828   RMDir /r "$INSTDIR\Server\usr\afs\bin"
1829   ; do not delete the server configuration files
1830   ; or we will lose the volumes and authentication
1831   ; databases
1832   ;RmDir /r "$INSTDIR\Server\usr\afs\etc\logs"
1833   ;RmDir /r "$INSTDIR\Server\usr\afs\etc"
1834   ;RmDir /r "$INSTDIR\Server\usr\afs\local"
1835   ;RMDIR /r "$INSTDIR\Server\usr\afs\logs"
1836   
1837   Delete /REBOOTOK "$SYSDIR\afsserver.cpl"
1838   Delete /REBOOTOK "$SYSDIR\afs_cpa.cpl"
1839
1840   Delete /REBOOTOK "$SYSDIR\afsserver.pdb"
1841   Delete /REBOOTOK "$SYSDIR\afs_cpa.pdb"
1842   
1843   RMDir /r "$INSTDIR\Documentation\html\CmdRef"
1844   RMDir /r "$INSTDIR\Documentation\html\InstallGd"
1845   RMDir /r "$INSTDIR\Documentation\html\ReleaseNotes"
1846   RMDir /r "$INSTDIR\Documentation\html\SysAdminGd"
1847   RMDIr /r "$INSTDIR\Documentation\html"
1848   
1849   RMDir "$INSTDIR\Documentation"
1850   ; Delete DOC short cut
1851   Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.exe"
1852
1853   Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.pdb"
1854
1855   Delete /REBOOTOK "$INSTDIR\Client\Program\*"
1856   Delete /REBOOTOK "$INSTDIR\Client\Program\Include\*"
1857   Delete /REBOOTOK "$INSTDIR\Client\Program\Include\afs\*"
1858   Delete /REBOOTOK "$INSTDIR\Client\Program\Include\rx\*"
1859   Delete /REBOOTOK "$INSTDIR\Client\Program\Sample\*"
1860   RMDir  "$INSTDIR\Client\Program\Sample"
1861   RMDir  "$INSTDIR\Client\Program\Include\afs"
1862   RMDir  "$INSTDIR\Client\Program\Include\rx"
1863   RMDir  "$INSTDIR\Client\Program\Include"
1864   RMDir  "$INSTDIR\Client\Program"
1865   RMDir  "$INSTDIR\Client"
1866
1867 !IFDEF DEBUG  
1868 !IFDEF CL_1310
1869    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.dll"
1870    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.pdb"
1871    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.dll"
1872    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.pdb"
1873    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.dll"
1874    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.pdb"
1875 !ELSE
1876 !IFDEF CL_1300
1877    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.dll"
1878    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.pdb"
1879    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.dll"
1880    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.pdb"
1881    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.dll"
1882    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.pdb"
1883 !ELSE
1884    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.dll"
1885    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.pdb"
1886    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.dll"
1887    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.pdb"
1888    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
1889    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
1890 !ENDIF
1891 !ENDIF
1892 !ELSE
1893 !IFDEF CL_1310
1894    Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
1895    Delete /REBOOTOK "$INSTDIR\bin\msvcr71.dll"
1896    Delete /REBOOTOK "$INSTDIR\bin\msvcp71.dll"
1897    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHS.DLL"
1898    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHT.DLL"
1899    Delete /REBOOTOK "$INSTDIR\bin\MFC71DEU.DLL"
1900    Delete /REBOOTOK "$INSTDIR\bin\MFC71ENU.DLL"
1901    Delete /REBOOTOK "$INSTDIR\bin\MFC71ESP.DLL"
1902    Delete /REBOOTOK "$INSTDIR\bin\MFC71FRA.DLL"
1903    Delete /REBOOTOK "$INSTDIR\bin\MFC71ITA.DLL"
1904    Delete /REBOOTOK "$INSTDIR\bin\MFC71JPN.DLL"
1905    Delete /REBOOTOK "$INSTDIR\bin\MFC71KOR.DLL"
1906 !ELSE
1907 !IFDEF CL_1300
1908    Delete /REBOOTOK "$INSTDIR\bin\mfc70.dll"
1909    Delete /REBOOTOK "$INSTDIR\bin\msvcr70.dll"
1910    Delete /REBOOTOK "$INSTDIR\bin\msvcp70.dll"
1911    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHS.DLL"
1912    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHT.DLL"
1913    Delete /REBOOTOK "$INSTDIR\bin\MFC70DEU.DLL"
1914    Delete /REBOOTOK "$INSTDIR\bin\MFC70ENU.DLL"
1915    Delete /REBOOTOK "$INSTDIR\bin\MFC70ESP.DLL"
1916    Delete /REBOOTOK "$INSTDIR\bin\MFC70FRA.DLL"
1917    Delete /REBOOTOK "$INSTDIR\bin\MFC70ITA.DLL"
1918    Delete /REBOOTOK "$INSTDIR\bin\MFC70JPN.DLL"
1919    Delete /REBOOTOK "$INSTDIR\bin\MFC70KOR.DLL"
1920 !ELSE
1921    Delete /REBOOTOK "$INSTDIR\bin\mfc42.dll"
1922    Delete /REBOOTOK "$INSTDIR\bin\msvcp60.dll"
1923    Delete /REBOOTOK "$INSTDIR\bin\msvcrt.dll"
1924 !ENDIF
1925 !ENDIF
1926 !ENDIF
1927
1928   Delete /REBOOTOK "$INSTDIR\Common\*"
1929   RMDir "$INSTDIR\Common"
1930
1931 !ifdef INSTALL_KFW
1932   ;Remove KfW files
1933   Delete /REBOOTOK "$INSTDIR\kfw\bin\*"
1934   RMDIR  /r "$INSTDIR\kfw\bin"
1935   Delete /REBOOTOK "$INSTDIR\kfw\doc\*"
1936   RMDIR  /r "$INSTDIR\kfw\doc"
1937   RMDIR  /r "$INSTDIR\kfw"
1938 !endif
1939
1940   Delete "$SMPROGRAMS\OpenAFS\Documentation.lnk"
1941
1942   ; Remove control center
1943   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAccountManager.exe"
1944   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.exe"
1945   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.exe"
1946   Delete /REBOOTOK "$INSTDIR\Control Center\CCUninst.dll"
1947   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAccountManager.pdb"
1948   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.pdb"
1949   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.pdb"
1950   RMDir  "$INSTDIR\Control Center"
1951   
1952   Delete "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk"
1953   Delete "$SMPROGRAMS\OpenAFS\Client\Authentication.lnk"
1954   Delete "$SMPROGRAMS\OpenAFS\Control Center\Account Manager.lnk"
1955   Delete "$SMPROGRAMS\OpenAFS\Control Center\Server Manager.lnk"
1956   RMDIR "$SMPROGRAMS\OpenAFS\Control Center"
1957   RMDir /r "$SMPROGRAMS\OpenAFS\Client"
1958   RMDir /r "$SMPROGRAMS\OpenAFS"
1959   Delete "$SMSTARTUP\AFS Credentials.lnk"
1960   
1961   ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" "CachePath"
1962   IfErrors +2
1963   Delete "$R0\AFSCache"
1964   Delete "C:\AFSCache"
1965
1966   DeleteRegKey HKCR "*\shellex\ContextMenuHandlers\AFS Client Shell Extension"
1967   DeleteRegKey HKCR "CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}\InprocServer32"
1968   DeleteRegKey HKCR "CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}"
1969   DeleteRegKey HKCR "FOLDER\shellex\ContextMenuHandlers\AFS Client Shell Extension"
1970   DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" "{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}"
1971
1972   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion"
1973   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Client"
1974   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion"
1975   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation"
1976   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion"
1977   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Control Center"
1978   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion"
1979   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Server"
1980   DeleteRegKey /ifempty HKLM "${AFS_REGKEY_ROOT}"
1981   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS"
1982   DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Services\NetBT\Parameters" "SmbDeviceEnabled"
1983  
1984   RMDir  "$INSTDIR"
1985
1986 SectionEnd
1987
1988 ;--------------------------------
1989 ;Uninstaller Functions
1990
1991 Function un.onInit
1992
1993   ;Get language from registry
1994   ReadRegStr $LANGUAGE HKCU "Software\OpenAFS\AFS" "Installer Language"
1995
1996 FunctionEnd
1997
1998 Function un.onUninstSuccess
1999
2000   IfSilent SkipAsk
2001   MessageBox MB_OK "Please reboot your machine to complete uninstallation of the software"
2002   SkipAsk:
2003
2004 FunctionEnd
2005
2006 ;------------------------------
2007 ; Get the CellServDB file from the Internet
2008
2009 Function afs.GetCellServDB
2010
2011 ;Check if we should download CellServDB
2012 ReadINIStr $R0 $0 "Field 4" "State"
2013 StrCmp $R0 "1" DoDownload
2014
2015 ;Do nothing if we're keeping the existing file
2016 ReadINIStr $R0 $0 "Field 2" "State"
2017 StrCmp $R0 "1" done
2018
2019 ReadINIStr $R0 $0 "Field 6" "State"
2020 StrCmp $R0 "1" CheckOther
2021
2022 ReadINIStr $R0 $0 "Field 3" "State"
2023 StrCmp $R0 "1" UsePackaged
2024
2025 ; If none of these, grab file from other location
2026 goto UsePackaged
2027
2028 DoDownload:
2029    ReadINIStr $R0 $0 "Field 5" "State"
2030    NSISdl::download $R0 "$WINDIR\afsdcell.ini"
2031    Pop $R0 ;Get the return value
2032    StrCmp $R0 "success" +2
2033       MessageBox MB_OK|MB_ICONSTOP "Download failed: $R0"
2034    goto done
2035
2036 UsePackaged:
2037    SetOutPath "$WINDIR"
2038    File "afsdcell.ini"
2039    goto done
2040    
2041 CheckOther:
2042    ReadINIStr $R0 $0 "Field 7" "State"
2043    StrCmp $R0 "" done
2044    CopyFiles $R0 "$WINDIR\afsdcell.ini"
2045    
2046 done:
2047
2048 FunctionEnd
2049
2050 Function AddProvider
2051    Push $R0
2052    Push $R1
2053    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder" "ProviderOrder"
2054    Push $R0
2055    StrCpy $R0 "TransarcAFSDaemon"
2056    Push $R0
2057    Call StrStr
2058    Pop $R0
2059    StrCmp $R0 "" +1 DoOther
2060    ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder" "ProviderOrder"   
2061    StrCpy $R0 "$R1,TransarcAFSDaemon"
2062    WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder" "ProviderOrder" $R0
2063 DoOther:
2064    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" "ProviderOrder"
2065    Push $R0
2066    StrCpy $R0 "TransarcAFSDaemon"
2067    Push $R0
2068    Call StrStr
2069    Pop $R0
2070    StrCmp $R0 "" +1 End
2071    ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" "ProviderOrder"   
2072    StrCpy $R0 "$R1,TransarcAFSDaemon"
2073    WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" "ProviderOrder" $R0   
2074 End:
2075    Pop $R1
2076    Pop $R0
2077 FunctionEnd
2078
2079 Function un.RemoveProvider
2080    Push $R0
2081    StrCpy $R0 "TransarcAFSDaemon"
2082    Push $R0
2083    StrCpy $R0 "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder"
2084    Call un.RemoveFromProvider
2085    StrCpy $R0 "TransarcAFSDaemon"
2086    Push $R0
2087    StrCpy $R0 "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order"
2088    Call un.RemoveFromProvider
2089    Pop $R0
2090 FunctionEnd
2091
2092 Function un.RemoveFromProvider
2093   Exch $0
2094   Push $1
2095   Push $2
2096   Push $3
2097   Push $4
2098   Push $5
2099   Push $6
2100
2101   ReadRegStr $1 HKLM "$R0" "ProviderOrder"
2102     StrCpy $5 $1 1 -1 # copy last char
2103     StrCmp $5 "," +2 # if last char != ,
2104       StrCpy $1 "$1," # append ,
2105     Push $1
2106     Push "$0,"
2107     Call un.StrStr ; Find `$0,` in $1
2108     Pop $2 ; pos of our dir
2109     StrCmp $2 "" unRemoveFromPath_done
2110       ; else, it is in path
2111       # $0 - path to add
2112       # $1 - path var
2113       StrLen $3 "$0,"
2114       StrLen $4 $2
2115       StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
2116       StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
2117       StrCpy $3 $5$6
2118
2119       StrCpy $5 $3 1 -1 # copy last char
2120       StrCmp $5 "," 0 +2 # if last char == ,
2121         StrCpy $3 $3 -1 # remove last char
2122
2123       WriteRegStr HKLM "$R0" "ProviderOrder" $3
2124       
2125   unRemoveFromPath_done:
2126     Pop $6
2127     Pop $5
2128     Pop $4
2129     Pop $3
2130     Pop $2
2131     Pop $1
2132     Pop $0
2133 FunctionEnd
2134
2135 Function CheckPathForAFS
2136    Push $0
2137    Push $1
2138    Push $2
2139    Push $3
2140    ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
2141    StrCpy $1 "$1;"
2142 loop:
2143    Push $1
2144    Push ";"
2145    Call StrStr
2146    Pop $0
2147    StrLen $2 $0
2148    StrCpy $3 $1 -$2
2149    IfFileExists "$3\afsd_service.exe" Error
2150    StrCpy $1 $0 32768 1
2151    StrLen $2 $1
2152    IntCmp $2 0 Done Done loop
2153    goto Done
2154 Error:
2155    MessageBox MB_ICONSTOP|MB_OK|MB_TOPMOST "This installer is unable to upgrade the previous version of AFS. Please uninstall the current AFS version before continuing."
2156    Abort "Unable to install OpenAFS"
2157 Done:
2158    Pop $3
2159    Pop $2
2160    Pop $1
2161    Pop $0
2162 FunctionEnd
2163
2164 Function AddToUniquePath
2165    Pop $R0
2166    Push $R0
2167    Push "$R0;"
2168    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
2169    Push "$R0;"
2170    Call StrStr
2171    Pop $R0
2172    StrCmp $R0 "" +1 Done
2173    Call AddToPath
2174 Done:
2175 FunctionEnd
2176
2177
2178 ;-------------------------------
2179 ;Do the page to get the CellServDB
2180
2181 Function AFSPageGetCellServDB
2182   ; Skip this page if we are not installing the client
2183   SectionGetFlags ${secClient} $R0
2184   IntOp $R0 $R0 & ${SF_SELECTED}
2185   StrCmp $R0 "0" Skip
2186   
2187   ; Set the install options here
2188   
2189 startOver:
2190   WriteINIStr $0 "Field 2" "Flags" "DISABLED"
2191   WriteINIStr $0 "Field 3" "State" "1"
2192   WriteINISTR $0 "Field 4" "State" "0"
2193   WriteINIStr $0 "Field 6" "State" "0"
2194   
2195   ; If there is an existing afsdcell.ini file, allow the user to choose it and make it default
2196   IfFileExists "$WINDIR\afsdcell.ini" +1 notpresent
2197   WriteINIStr $0 "Field 2" "Flags" "ENABLED"
2198   WriteINIStr $0 "Field 2" "State" "1"
2199   WriteINIStr $0 "Field 3" "State" "0"
2200   
2201   notpresent:
2202   
2203   !insertmacro MUI_HEADER_TEXT "CellServDB Configuration" "Please choose a method for installing the CellServDB file:" 
2204   InstallOptions::dialog $0
2205   Pop $R1
2206   StrCmp $R1 "cancel" exit
2207   StrCmp $R1 "back" done
2208   StrCmp $R1 "success" done
2209 exit: Quit
2210 done:
2211
2212    ; Check that if a file is set, a valid filename is entered...
2213    ReadINIStr $R0 $0 "Field 6" "State"
2214    StrCmp $R0 "1" CheckFileName
2215    
2216    ;Check if a URL is specified, one *IS* specified
2217    ReadINIStr $R0 $0 "Field 4" "State"
2218    StrCmp $R0 "1" CheckURL Skip
2219    
2220    CheckURL:
2221    ReadINIStr $R0 $0 "Field 5" "State"
2222    StrCmp $R0 "" +1 Skip
2223    MessageBox MB_OK|MB_ICONSTOP $(URLError)
2224    WriteINIStr $0 "Field 4" "State" "0"
2225    goto startOver
2226    
2227    CheckFileName:
2228    ReadINIStr $R0 $0 "Field 7" "State"
2229    IfFileExists $R0 Skip
2230
2231    MessageBox MB_OK|MB_ICONSTOP $(CellError)
2232    WriteINIStr $0 "Field 6" "State" "0"
2233    goto startOver
2234    
2235    Skip:
2236    
2237 FunctionEnd
2238
2239
2240 Function AFSPageGetCellName
2241    IfSilent good
2242   ; Skip this page if we are not installing the client
2243   SectionGetFlags ${secClient} $R0
2244   IntOp $R0 $R0 & ${SF_SELECTED}
2245   StrCmp $R0 "0" good
2246   
2247 startOver:
2248    ; If this is a server install, we do NOT want to recommend the Freelance client
2249    ; And we do not need to ask for the cell name.
2250    SectionGetFlags ${secServer} $R1
2251    IntOp $R1 $R1 & ${SF_SELECTED}
2252    StrCmp $R1 "1" +1 NotServer
2253    WriteINIStr $1 "Field 6" "Text" "Enable AFS Freelance client (Not Recommended for servers)"
2254    WriteINIStr $1 "Field 5" "State" "0"
2255    WriteINIStr $1 "Field 1" "Flags" "DISABLED"
2256    WriteINIStr $1 "Field 2" "Flags" "DISABLED"
2257    goto SkipServerTest
2258 NotServer:
2259    WriteINIStr $1 "Field 6" "Text" "Enable AFS Freelance client (Recommended)"
2260    WriteINIStr $1 "Field 5" "State" "1"
2261    WriteINIStr $1 "Field 1" "Flags" ""
2262    WriteINIStr $1 "Field 2" "Flags" ""
2263 SkipServerTest:
2264    ; Get the current cell name, if any
2265    ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "Cell"
2266    StrCmp $R1 "" +2
2267    WriteINIStr $1 "Field 2" "State" $R1
2268   !insertmacro MUI_HEADER_TEXT "Client Cell Name Configuration" "Please enter the name for your default cell:" 
2269   InstallOptions::dialog $1
2270   Pop $R1
2271   StrCmp $R1 "cancel" exit
2272   StrCmp $R1 "back" done
2273   StrCmp $R1 "success" done
2274 exit: Quit
2275 done:
2276    ReadINIStr $R0 $1 "Field 2" "State"
2277    StrCmp $R0 "" +1 good
2278    
2279    MessageBox MB_OK|MB_ICONSTOP $(CellNameError)
2280    goto startOver
2281 good:
2282 FunctionEnd
2283
2284
2285 ;---------------------------------------------------------
2286 ;Do the page to get the afscreds.exe startup configuration
2287
2288 Function AFSPageConfigAFSCreds
2289   ; Skip this page if we are not installing the client
2290   SectionGetFlags ${secClient} $R0
2291   IntOp $R0 $R0 & ${SF_SELECTED}
2292   StrCmp $R0 "0" done
2293   
2294   ; Set the install options here
2295   
2296   !insertmacro MUI_HEADER_TEXT "AFS Credentials Configuration" "Please choose default options for configuring the AFS Credentials program:" 
2297   InstallOptions::dialog $2
2298   Pop $R1
2299   StrCmp $R1 "cancel" exit
2300   StrCmp $R1 "back" done
2301   StrCmp $R1 "success" done
2302 exit: Quit
2303 done:
2304    
2305 FunctionEnd
2306
2307
2308 ;-------------
2309 ; Common install routines for each module
2310 Function AFSCommon.Install
2311
2312 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "DisplayName" "OpenAFS for Windows"
2313 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "UninstallString" "$INSTDIR\uninstall.exe"
2314 !ifndef DEBUG
2315 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "DisplayVersion" "${AFS_VERSION}"
2316 !else
2317 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "DisplayVersion" "${AFS_VERSION} Checked/Debug"
2318 !endif
2319 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "URLInfoAbout" "http://www.openafs.org/"
2320
2321 FunctionEnd
2322
2323
2324 ;-------------------
2325 ; Get the currently installed version and place it on the stack
2326 ; Modifies: Nothing
2327 Function GetInstalledVersion
2328    Push $R0
2329    Push $R1
2330    Push $R4
2331    
2332    ReadRegStr $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "VersionString"
2333    StrCmp $R0 "" NotTransarc done
2334    
2335    
2336 NotTransarc:
2337    ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "VersionString"
2338    StrCmp $R0 "" done
2339    
2340 done:
2341    Pop $R4
2342    Pop $R1
2343    Exch $R0
2344 FunctionEnd
2345
2346 ; Functions to get each component of the version number
2347 Function GetInstalledVersionMajor
2348    Push $R0
2349    Push $R1
2350    Push $R4
2351    
2352    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "MajorVersion"
2353    StrCmp $R0 "" NotTransarc done
2354    
2355    
2356 NotTransarc:
2357    ReadRegDWORD $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "MajorVersion"
2358    StrCmp $R0 "" done
2359    
2360 done:
2361    Pop $R4
2362    Pop $R1
2363    Exch $R0
2364 FunctionEnd
2365
2366 Function GetInstalledVersionMinor
2367    Push $R0
2368    Push $R1
2369    Push $R4
2370    
2371    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "MinorVersion"
2372    StrCmp $R0 "" NotTransarc done
2373    
2374    
2375 NotTransarc:
2376    ReadRegDWORD $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "MinorVersion"
2377    StrCmp $R0 "" done
2378    
2379 done:
2380    Pop $R4
2381    Pop $R1
2382    Exch $R0
2383 FunctionEnd
2384
2385 Function GetInstalledVersionPatch
2386    Push $R0
2387    Push $R1
2388    Push $R4
2389    
2390    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "PatchLevel"
2391    StrCmp $R0 "" NotTransarc done
2392    
2393    
2394 NotTransarc:
2395    ReadRegDWORD $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "PatchLevel"
2396    StrCmp $R0 "" done
2397    
2398 done:
2399    Pop $R4
2400    Pop $R1
2401    Exch $R0
2402 FunctionEnd
2403
2404
2405
2406 ;-------------------------------
2407 ; Check if the client should be checked for default install
2408 Function ShouldClientInstall
2409    Push $R0
2410    StrCpy $R2 "AFS Client"
2411    Call GetInstalledVersion
2412    Pop $R0
2413    
2414    StrCmp $R0 "" NotInstalled
2415    ; Now we see if it's an older or newer version
2416    
2417    Call GetInstalledVersionMajor
2418    Pop $R0
2419    IntCmpU $R0 ${AFS_MAJORVERSION} +1 Upgrade Downgrade
2420
2421    Call GetInstalledVersionMinor
2422    Pop $R0
2423    IntCmpU $R0 ${AFS_MINORVERSION} +1 Upgrade Downgrade
2424    
2425    Call GetInstalledVersionPatch
2426    Pop $R0
2427    IntCmpU $R0 ${AFS_PATCHLEVEL} Reinstall Upgrade Downgrade
2428    
2429 Reinstall:
2430    StrCpy $R0 "1"
2431    Exch $R0
2432    goto end
2433    
2434 Upgrade:
2435    StrCpy $R0 "2"
2436    Exch $R0
2437    goto end
2438    
2439 Downgrade:
2440    StrCpy $R0 "3"
2441    Exch $R0
2442    goto end
2443    
2444 NotInstalled:
2445    StrCpy $R0 "0"
2446    Exch $R0
2447 end:   
2448 FunctionEnd
2449
2450 ;-------------------------------
2451 ; Check how the server options should be set
2452 Function ShouldServerInstall
2453    Push $R0
2454    StrCpy $R2 "AFS Server"
2455    Call GetInstalledVersion
2456    Pop $R0
2457    
2458    StrCmp $R0 "" NotInstalled
2459    ; Now we see if it's an older or newer version
2460
2461    Call GetInstalledVersionMajor
2462    Pop $R0
2463    IntCmpU $R0 ${AFS_MAJORVERSION} +1 Upgrade Downgrade
2464
2465    Call GetInstalledVersionMinor
2466    Pop $R0
2467    IntCmpU $R0 ${AFS_MINORVERSION} +1 Upgrade Downgrade
2468    
2469    Call GetInstalledVersionPatch
2470    Pop $R0
2471    IntCmpU $R0 ${AFS_PATCHLEVEL} Reinstall Upgrade Downgrade
2472    
2473 Reinstall:
2474    StrCpy $R0 "1"
2475    Exch $R0
2476    goto end
2477    
2478 Upgrade:
2479    StrCpy $R0 "2"
2480    Exch $R0
2481    goto end
2482    
2483 Downgrade:
2484    StrCpy $R0 "3"
2485    Exch $R0
2486    goto end
2487    
2488    
2489 NotInstalled:
2490    StrCpy $R0 "0"
2491    Exch $R0
2492 end:   
2493 FunctionEnd
2494
2495
2496 ; See if AFS Server is installed
2497 ; Returns: "1" if it is, 0 if it is not (on the stack)
2498 Function IsServerInstalled
2499    Push $R0
2500    StrCpy $R2 "AFS Server"
2501    Call GetInstalledVersion
2502    Pop $R0
2503    
2504    StrCmp $R0 "" NotInstalled
2505    
2506    StrCpy $R0 "1"
2507    Exch $R0
2508    goto end
2509    
2510 NotInstalled:
2511    StrCpy $R0 "0"
2512    Exch $R0
2513 end:   
2514 FunctionEnd
2515
2516
2517 ; See if AFS Client is installed
2518 ; Returns: "1" if it is, 0 if it is not (on the stack)
2519 Function IsClientInstalled
2520    Push $R0
2521    StrCpy $R2 "AFS Client"
2522    Call GetInstalledVersion
2523    Pop $R0
2524    
2525    StrCmp $R0 "" NotInstalled
2526    
2527    StrCpy $R0 "1"
2528    Exch $R0
2529    goto end
2530    
2531 NotInstalled:
2532    StrCpy $R0 "0"
2533    Exch $R0
2534 end:   
2535 FunctionEnd
2536
2537
2538
2539 ; See if AFS Documentation is installed
2540 ; Returns: "1" if it is, 0 if it is not (on the stack)
2541 Function IsDocumentationInstalled
2542    Push $R0
2543    StrCpy $R2 "AFS Supplemental Documentation"
2544    Call GetInstalledVersion
2545    Pop $R0
2546    
2547    StrCmp $R0 "" NotInstalled
2548    
2549    StrCpy $R0 "1"
2550    Exch $R0
2551    goto end
2552    
2553 NotInstalled:
2554    StrCpy $R0 "0"
2555    Exch $R0
2556 end:   
2557 FunctionEnd
2558
2559
2560 ; See if Control Center is installed
2561 ; Returns: "1" if it is, 0 if it is not (on the stack)
2562 Function IsControlInstalled
2563    Push $R0
2564    StrCpy $R2 "AFS Control Center"
2565    Call GetInstalledVersion
2566    Pop $R0
2567    
2568    StrCmp $R0 "" NotInstalled
2569    
2570    StrCpy $R0 "1"
2571    Exch $R0
2572    goto end
2573    
2574 NotInstalled:
2575    StrCpy $R0 "0"
2576    Exch $R0
2577 end:   
2578 FunctionEnd
2579
2580
2581 ; GetParameters
2582 ; input, none
2583 ; output, top of stack (replaces, with e.g. whatever)
2584 ; modifies no other variables.
2585
2586 Function GetParameters
2587   Push $R0
2588   Push $R1
2589   Push $R2
2590   StrCpy $R0 $CMDLINE 1
2591   StrCpy $R1 '"'
2592   StrCpy $R2 1
2593   StrCmp $R0 '"' loop
2594     StrCpy $R1 ' ' ; we're scanning for a space instead of a quote
2595   loop:
2596     StrCpy $R0 $CMDLINE 1 $R2
2597     StrCmp $R0 $R1 loop2
2598     StrCmp $R0 "" loop2
2599     IntOp $R2 $R2 + 1
2600     Goto loop
2601   loop2:
2602     IntOp $R2 $R2 + 1
2603     StrCpy $R0 $CMDLINE 1 $R2
2604     StrCmp $R0 " " loop2
2605   StrCpy $R0 $CMDLINE "" $R2
2606   Pop $R2
2607   Pop $R1
2608   Exch $R0
2609 FunctionEnd
2610
2611
2612 ;Check to see if any AFS component is installed
2613 ;Returns: Value on stack: "1" if it is, "0" if it is not
2614 Function IsAnyAFSInstalled
2615    Push $R0
2616    Push $R1
2617    Push $R2
2618    Push $R3
2619    Call IsClientInstalled
2620    Pop $R0
2621    Call IsServerInstalled
2622    Pop $R1
2623    Call IsControlInstalled
2624    Pop $R2
2625    Call IsDocumentationInstalled
2626    Pop $R3
2627    ; Now we must see if ANY of the $Rn values are 1
2628    StrCmp $R0 "1" SomethingInstalled
2629    StrCmp $R1 "1" SomethingInstalled
2630    StrCmp $R2 "1" SomethingInstalled
2631    StrCmp $R3 "1" SomethingInstalled
2632    ;Nothing installed
2633    StrCpy $R0 "0"
2634    goto end
2635 SomethingInstalled:
2636    StrCpy $R0 "1"
2637 end:
2638    Pop $R3
2639    Pop $R2
2640    Pop $R1
2641    Exch $R0
2642 FunctionEnd
2643
2644
2645 ;Install English Language Files
2646 Function AFSLangFiles
2647    ; Common files
2648    SetOutPath "$INSTDIR\Common"
2649    File "${AFS_CLIENT_BUILDDIR}\afs_config.exe"
2650    File "${AFS_SERVER_BUILDDIR}\afsadminutil.dll"
2651   !insertmacro ReplaceDLL "${AFS_DESTDIR}\lib\afsauthent.dll" "$INSTDIR\Common\afsauthent.dll" "$INSTDIR"
2652   !insertmacro ReplaceDLL "${AFS_DESTDIR}\lib\afspthread.dll" "$INSTDIR\Common\afspthread.dll" "$INSTDIR"
2653   !insertmacro ReplaceDLL "${AFS_DESTDIR}\lib\afsrpc.dll" "$INSTDIR\Common\afsrpc.dll" "$INSTDIR"
2654    File "${AFS_SERVER_BUILDDIR}\afsclientadmin.dll"
2655    File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.dll"
2656    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.dll"
2657    File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.dll"
2658    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.dll"
2659    File "${AFS_SERVER_BUILDDIR}\afsbosadmin.dll"
2660    File "${AFS_SERVER_BUILDDIR}\afscfgadmin.dll"
2661    File "${AFS_SERVER_BUILDDIR}\afskasadmin.dll"
2662    File "${AFS_SERVER_BUILDDIR}\afsptsadmin.dll"
2663
2664 !IFDEF DEBUG
2665 !IFDEF CL_1310
2666    File "${SYSTEMDIR}\msvcr71d.dll"
2667    File "${SYSTEMDIR}\msvcr71d.pdb"
2668    File "${SYSTEMDIR}\msvcp71d.dll"
2669    File "${SYSTEMDIR}\msvcp71d.pdb"
2670    File "${SYSTEMDIR}\mfc71d.dll"
2671    File "${SYSTEMDIR}\mfc71d.pdb"
2672    File "${SYSTEMDIR}\MFC71CHS.DLL"
2673    File "${SYSTEMDIR}\MFC71CHT.DLL"
2674    File "${SYSTEMDIR}\MFC71DEU.DLL"
2675    File "${SYSTEMDIR}\MFC71ENU.DLL"
2676    File "${SYSTEMDIR}\MFC71ESP.DLL"
2677    File "${SYSTEMDIR}\MFC71FRA.DLL"
2678    File "${SYSTEMDIR}\MFC71ITA.DLL"
2679    File "${SYSTEMDIR}\MFC71JPN.DLL"
2680    File "${SYSTEMDIR}\MFC71KOR.DLL"
2681 !ELSE
2682 !IFDEF CL_1300
2683    File "${SYSTEMDIR}\msvcr70d.dll"
2684    File "${SYSTEMDIR}\msvcr70d.pdb"
2685    File "${SYSTEMDIR}\msvcp70d.dll"
2686    File "${SYSTEMDIR}\msvcp70d.pdb"
2687    File "${SYSTEMDIR}\mfc70d.dll"
2688    File "${SYSTEMDIR}\mfc70d.pdb"
2689    File "${SYSTEMDIR}\MFC70CHS.DLL"
2690    File "${SYSTEMDIR}\MFC70CHT.DLL"
2691    File "${SYSTEMDIR}\MFC70DEU.DLL"
2692    File "${SYSTEMDIR}\MFC70ENU.DLL"
2693    File "${SYSTEMDIR}\MFC70ESP.DLL"
2694    File "${SYSTEMDIR}\MFC70FRA.DLL"
2695    File "${SYSTEMDIR}\MFC70ITA.DLL"
2696    File "${SYSTEMDIR}\MFC70JPN.DLL"
2697    File "${SYSTEMDIR}\MFC70KOR.DLL"
2698 !ELSE
2699    File "${SYSTEMDIR}\mfc42d.dll"
2700    File "${SYSTEMDIR}\mfc42d.pdb"
2701    File "${SYSTEMDIR}\msvcp60d.dll"
2702    File "${SYSTEMDIR}\msvcp60d.pdb"
2703    File "${SYSTEMDIR}\msvcrtd.dll"
2704    File "${SYSTEMDIR}\msvcrtd.pdb"
2705 !ENDIF
2706 !ENDIF
2707 !ELSE
2708 !IFDEF CL_1310
2709    File "${SYSTEMDIR}\mfc71.dll"
2710    File "${SYSTEMDIR}\msvcr71.dll"
2711    File "${SYSTEMDIR}\msvcp71.dll"
2712    File "${SYSTEMDIR}\MFC71CHS.DLL"
2713    File "${SYSTEMDIR}\MFC71CHT.DLL"
2714    File "${SYSTEMDIR}\MFC71DEU.DLL"
2715    File "${SYSTEMDIR}\MFC71ENU.DLL"
2716    File "${SYSTEMDIR}\MFC71ESP.DLL"
2717    File "${SYSTEMDIR}\MFC71FRA.DLL"
2718    File "${SYSTEMDIR}\MFC71ITA.DLL"
2719    File "${SYSTEMDIR}\MFC71JPN.DLL"
2720    File "${SYSTEMDIR}\MFC71KOR.DLL"
2721 !ELSE
2722 !IFDEF CL_1300
2723    File "${SYSTEMDIR}\mfc70.dll"
2724    File "${SYSTEMDIR}\msvcr70.dll"
2725    File "${SYSTEMDIR}\msvcp70.dll"
2726    File "${SYSTEMDIR}\MFC70CHS.DLL"
2727    File "${SYSTEMDIR}\MFC70CHT.DLL"
2728    File "${SYSTEMDIR}\MFC70DEU.DLL"
2729    File "${SYSTEMDIR}\MFC70ENU.DLL"
2730    File "${SYSTEMDIR}\MFC70ESP.DLL"
2731    File "${SYSTEMDIR}\MFC70FRA.DLL"
2732    File "${SYSTEMDIR}\MFC70ITA.DLL"
2733    File "${SYSTEMDIR}\MFC70JPN.DLL"
2734    File "${SYSTEMDIR}\MFC70KOR.DLL"
2735 !ELSE
2736    File "${SYSTEMDIR}\mfc42.dll"
2737    File "${SYSTEMDIR}\msvcp60.dll"
2738    File "${SYSTEMDIR}\msvcrt.dll"
2739 !ENDIF
2740 !ENDIF
2741 !ENDIF
2742
2743    StrCmp $LANGUAGE ${LANG_ENGLISH} DoEnglish
2744    StrCmp $LANGUAGE ${LANG_GERMAN} DoGerman
2745    StrCmp $LANGUAGE ${LANG_SPANISH} DoSpanish
2746    StrCmp $LANGUAGE ${LANG_JAPANESE} DoJapanese
2747    StrCmp $LANGUAGE ${LANG_KOREAN} DoKorean
2748    StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} DoPortugueseBR
2749    StrCmp $LANGUAGE ${LANG_SIMPCHINESE} DoSimpChinese
2750    StrCmp $LANGUAGE ${LANG_TRADCHINESE} DoTradChinese
2751    
2752 DoEnglish:
2753
2754    SetOutPath "$INSTDIR\Documentation"
2755    File "..\..\doc\install\Documentation\en_US\README.TXT"
2756
2757    SetOutPath "$INSTDIR\Client\Program"
2758    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1033.dll"    "$INSTDIR\Client\Program\afscreds_1033.dll" "$INSTDIR"
2759    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1033.dll" "$INSTDIR\Client\Program\afs_shl_ext_1033.dll" "$INSTDIR"
2760 !ifdef DEBUG
2761    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1033.pdb"
2762    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1033.pdb"
2763 !endif
2764
2765    SetOutPath "$INSTDIR\Common"
2766    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1033.dll"           "$INSTDIR\Common\afs_config_1033.dll" "$INSTDIR"
2767    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1033.dll"              "$INSTDIR\Common\afs_cpa_1033.dll" "$INSTDIR"
2768    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1033.dll"          "$INSTDIR\Common\afseventmsg_1033.dll" "$INSTDIR"
2769   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1033.dll"      "$INSTDIR\Common\afs_setup_utils_1033.dll" "$INSTDIR"
2770    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1033.dll"            "$INSTDIR\Common\afsserver_1033.dll" "$INSTDIR"
2771    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1033.dll"            "$INSTDIR\Common\afssvrcfg_1033.dll" "$INSTDIR"
2772    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1033.dll"  "$INSTDIR\Common\TaAfsAccountManager_1033.dll" "$INSTDIR"
2773    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1033.dll"          "$INSTDIR\Common\TaAfsAppLib_1033.dll" "$INSTDIR"
2774    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1033.dll"   "$INSTDIR\Common\TaAfsServerManager_1033.dll" "$INSTDIR"
2775    File "..\..\doc\help\en_US\afs-cc.CNT"
2776    File "..\..\doc\help\en_US\afs-cc.hlp"
2777    File "..\..\doc\help\en_US\afs-light.CNT"
2778    File "..\..\doc\help\en_US\afs-light.hlp"
2779    File "..\..\doc\help\en_US\afs-nt.CNT"
2780    File "..\..\doc\help\en_US\afs-nt.HLP"
2781    File "..\..\doc\help\en_US\taafscfg.CNT"
2782    File "..\..\doc\help\en_US\taafscfg.hlp"
2783    File "..\..\doc\help\en_US\taafssvrmgr.CNT"
2784    File "..\..\doc\help\en_US\taafssvrmgr.hlp"
2785    File "..\..\doc\help\en_US\taafsusrmgr.CNT"
2786    File "..\..\doc\help\en_US\taafsusrmgr.hlp"
2787
2788 !ifdef DEBUG
2789    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1033.pdb"
2790    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1033.pdb"
2791    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1033.pdb"
2792    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1033.pdb"
2793    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1033.pdb"
2794    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1033.pdb"
2795    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1033.pdb"
2796    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1033.pdb"
2797 !ENDIF
2798    goto done
2799
2800 DoGerman:
2801
2802    SetOutPath "$INSTDIR\Documentation"
2803    File "..\..\doc\install\Documentation\de_DE\README.TXT"
2804
2805    SetOutPath "$INSTDIR\Client\Program"
2806   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1032.dll"                      "$INSTDIR\Client\Program\afscreds_1032.dll" "$INSTDIR"
2807   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1032.dll" "$INSTDIR\Client\Program\afs_shl_ext_1032.dll" "$INSTDIR"
2808 !ifdef DEBUG
2809    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1032.pdb"
2810    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1032.pdb"
2811 !endif
2812
2813    SetOutPath "$INSTDIR\Common"
2814    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1032.dll"           "$INSTDIR\Common\afs_config_1032.dll" "$INSTDIR"
2815    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1032.dll"              "$INSTDIR\Common\afs_cpa_1032.dll" "$INSTDIR" 
2816    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1032.dll"          "$INSTDIR\Common\afseventmsg_1032.dll" "$INSTDIR" 
2817   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1032.dll"      "$INSTDIR\Common\afs_setup_utils_1032.dll" "$INSTDIR" 
2818    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1032.dll"            "$INSTDIR\Common\afsserver_1032.dll" "$INSTDIR" 
2819    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1032.dll"            "$INSTDIR\Common\afssvrcfg_1032.dll" "$INSTDIR" 
2820    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1032.dll"  "$INSTDIR\Common\TaAfsAccountManager_1032.dll" "$INSTDIR" 
2821    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1032.dll"          "$INSTDIR\Common\TaAfsAppLib_1032.dll" "$INSTDIR" 
2822    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1032.dll"   "$INSTDIR\Common\TaAfsServerManager_1032.dll" "$INSTDIR" 
2823    File "..\..\doc\help\de_DE\afs-cc.CNT"
2824    File "..\..\doc\help\de_DE\afs-cc.hlp"
2825    File "..\..\doc\help\de_DE\afs-light.CNT"
2826    File "..\..\doc\help\de_DE\afs-light.hlp"
2827    File "..\..\doc\help\de_DE\afs-nt.CNT"
2828    File "..\..\doc\help\de_DE\afs-nt.HLP"
2829    File "..\..\doc\help\de_DE\taafscfg.CNT"
2830    File "..\..\doc\help\de_DE\taafscfg.hlp"
2831    File "..\..\doc\help\de_DE\taafssvrmgr.CNT"
2832    File "..\..\doc\help\de_DE\taafssvrmgr.hlp"
2833    File "..\..\doc\help\de_DE\taafsusrmgr.CNT"
2834    File "..\..\doc\help\de_DE\taafsusrmgr.hlp"
2835
2836 !ifdef DEBUG
2837    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1032.pdb"
2838    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1032.pdb"
2839    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1032.pdb"
2840    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1032.pdb"
2841    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1032.pdb"
2842    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1032.pdb"
2843    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1032.pdb"
2844    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1032.pdb"
2845 !ENDIF
2846    goto done   
2847
2848 DoSpanish:
2849
2850    SetOutPath "$INSTDIR\Documentation"
2851    File "..\..\doc\install\Documentation\es_ES\README.TXT"
2852
2853    SetOutPath "$INSTDIR\Client\Program"
2854    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1034.dll"     "$INSTDIR\Client\Program\afscreds_1034.dll" "$INSTDIR" 
2855    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1034.dll" "$INSTDIR\Client\Program\afs_shl_ext_1034.dll" "$INSTDIR"
2856 !ifdef DEBUG
2857    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1034.pdb"
2858    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1034.pdb"
2859 !endif
2860
2861    SetOutPath "$INSTDIR\Common"
2862    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1034.dll"          "$INSTDIR\Common\afs_config_1034.dll" "$INSTDIR"  
2863    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1034.dll"             "$INSTDIR\Common\afs_cpa_1034.dll" "$INSTDIR"  
2864    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1034.dll"         "$INSTDIR\Common\afseventmsg_1034.dll" "$INSTDIR"  
2865   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1034.dll"     "$INSTDIR\Common\afs_setup_utils_1034.dll" "$INSTDIR"  
2866    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1034.dll"           "$INSTDIR\Common\afsserver_1034.dll" "$INSTDIR"  
2867    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1034.dll"           "$INSTDIR\Common\afssvrcfg_1034.dll" "$INSTDIR"  
2868    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1034.dll" "$INSTDIR\Common\TaAfsAccountManager_1034.dll" "$INSTDIR"  
2869    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1034.dll"         "$INSTDIR\Common\TaAfsAppLib_1034.dll" "$INSTDIR"  
2870    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1034.dll"  "$INSTDIR\Common\TaAfsServerManager_1034.dll" "$INSTDIR"  
2871    File "..\..\doc\help\es_ES\afs-cc.CNT"
2872    File "..\..\doc\help\es_ES\afs-cc.hlp"
2873    File "..\..\doc\help\es_ES\afs-light.CNT"
2874    File "..\..\doc\help\es_ES\afs-light.hlp"
2875    File "..\..\doc\help\es_ES\afs-nt.CNT"
2876    File "..\..\doc\help\es_ES\afs-nt.HLP"
2877    File "..\..\doc\help\es_ES\taafscfg.CNT"
2878    File "..\..\doc\help\es_ES\taafscfg.hlp"
2879    File "..\..\doc\help\es_ES\taafssvrmgr.CNT"
2880    File "..\..\doc\help\es_ES\taafssvrmgr.hlp"
2881    File "..\..\doc\help\es_ES\taafsusrmgr.CNT"
2882    File "..\..\doc\help\es_ES\taafsusrmgr.hlp"
2883
2884 !ifdef DEBUG
2885    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1034.pdb"
2886    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1034.pdb"
2887    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1034.pdb"
2888    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1034.pdb"
2889    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1034.pdb"
2890    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1034.pdb"
2891    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1034.pdb"
2892    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1034.pdb"
2893 !ENDIF
2894    goto done
2895
2896 DoJapanese:
2897
2898    SetOutPath "$INSTDIR\Documentation"
2899    File "..\..\doc\install\Documentation\ja_JP\README.TXT"
2900
2901    SetOutPath "$INSTDIR\Client\Program"
2902    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1041.dll"  "$INSTDIR\Client\Program\afscreds_1041.dll" "$INSTDIR"  
2903    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1041.dll" "$INSTDIR\Client\Program\afs_shl_ext_1041.dll" "$INSTDIR"
2904 !ifdef DEBUG
2905    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1041.pdb"
2906    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1041.pdb"
2907 !endif
2908
2909    SetOutPath "$INSTDIR\Common"
2910    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1041.dll"           "$INSTDIR\Common\afs_config_1041.dll" "$INSTDIR"   
2911    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1041.dll"              "$INSTDIR\Common\afs_cpa_1041.dll" "$INSTDIR"   
2912    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1041.dll"          "$INSTDIR\Common\afseventmsg_1041.dll" "$INSTDIR"   
2913   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1041.dll"      "$INSTDIR\Common\afs_setup_utils_1041.dll" "$INSTDIR"   
2914    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1041.dll"            "$INSTDIR\Common\afsserver_1041.dll" "$INSTDIR"   
2915    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1041.dll"            "$INSTDIR\Common\afssvrcfg_1041.dll" "$INSTDIR"   
2916    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1041.dll"  "$INSTDIR\Common\TaAfsAccountManager_1041.dll" "$INSTDIR"   
2917    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1041.dll"          "$INSTDIR\Common\TaAfsAppLib_1041.dll" "$INSTDIR"   
2918    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1041.dll"   "$INSTDIR\Common\TaAfsServerManager_1041.dll" "$INSTDIR"   
2919    File "..\..\doc\help\ja_JP\afs-cc.CNT"
2920    File "..\..\doc\help\ja_JP\afs-cc.hlp"
2921    File "..\..\doc\help\ja_JP\afs-light.CNT"
2922    File "..\..\doc\help\ja_JP\afs-light.hlp"
2923    File "..\..\doc\help\ja_JP\afs-nt.CNT"
2924    File "..\..\doc\help\ja_JP\afs-nt.HLP"
2925    File "..\..\doc\help\ja_JP\taafscfg.CNT"
2926    File "..\..\doc\help\ja_JP\taafscfg.hlp"
2927    File "..\..\doc\help\ja_JP\taafssvrmgr.CNT"
2928    File "..\..\doc\help\ja_JP\taafssvrmgr.hlp"
2929    File "..\..\doc\help\ja_JP\taafsusrmgr.CNT"
2930    File "..\..\doc\help\ja_JP\taafsusrmgr.hlp"
2931
2932 !ifdef DEBUG
2933    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1041.pdb"
2934    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1041.pdb"
2935    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1041.pdb"
2936    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1041.pdb"
2937    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1041.pdb"
2938    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1041.pdb"
2939    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1041.pdb"
2940    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1041.pdb"
2941 !ENDIF
2942    goto done
2943    
2944 DoKorean:
2945
2946    SetOutPath "$INSTDIR\Documentation"
2947    File "..\..\doc\install\Documentation\ko_KR\README.TXT"
2948
2949    SetOutPath "$INSTDIR\Client\Program"
2950    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1042.dll"  "$INSTDIR\Client\Program\afscreds_1042.dll" "$INSTDIR"   
2951    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1042.dll" "$INSTDIR\Client\Program\afs_shl_ext_1042.dll" "$INSTDIR"
2952 !ifdef DEBUG
2953    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1042.pdb"
2954    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1042.pdb"
2955 !endif
2956
2957    SetOutPath "$INSTDIR\Common"
2958    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1042.dll"           "$INSTDIR\Common\afs_config_1042.dll" "$INSTDIR"    
2959    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1042.dll"              "$INSTDIR\Common\afs_cpa_1042.dll" "$INSTDIR"    
2960    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1042.dll"          "$INSTDIR\Common\afseventmsg_1042.dll" "$INSTDIR"    
2961   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1042.dll"      "$INSTDIR\Common\afs_setup_utils_1042.dll" "$INSTDIR"    
2962    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1042.dll"            "$INSTDIR\Common\afsserver_1042.dll" "$INSTDIR"    
2963    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1042.dll"            "$INSTDIR\Common\afssvrcfg_1042.dll" "$INSTDIR"    
2964    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1042.dll"  "$INSTDIR\Common\TaAfsAccountManager_1042.dll" "$INSTDIR"    
2965    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1042.dll"          "$INSTDIR\Common\TaAfsAppLib_1042.dll" "$INSTDIR"    
2966    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1042.dll"   "$INSTDIR\Common\TaAfsServerManager_1042.dll" "$INSTDIR"    
2967    File "..\..\doc\help\ko_KR\afs-cc.CNT"
2968    File "..\..\doc\help\ko_KR\afs-cc.hlp"
2969    File "..\..\doc\help\ko_KR\afs-light.CNT"
2970    File "..\..\doc\help\ko_KR\afs-light.hlp"
2971    File "..\..\doc\help\ko_KR\afs-nt.CNT"
2972    File "..\..\doc\help\ko_KR\afs-nt.HLP"
2973    File "..\..\doc\help\ko_KR\taafscfg.CNT"
2974    File "..\..\doc\help\ko_KR\taafscfg.hlp"
2975    File "..\..\doc\help\ko_KR\taafssvrmgr.CNT"
2976    File "..\..\doc\help\ko_KR\taafssvrmgr.hlp"
2977    File "..\..\doc\help\ko_KR\taafsusrmgr.CNT"
2978    File "..\..\doc\help\ko_KR\taafsusrmgr.hlp"
2979
2980 !ifdef DEBUG
2981    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1042.pdb"
2982    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1042.pdb"
2983    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1042.pdb"
2984    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1042.pdb"
2985    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1042.pdb"
2986    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1042.pdb"
2987    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1042.pdb"
2988    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1042.pdb"
2989 !ENDIF
2990    goto done
2991
2992
2993 DoPortugueseBR:
2994
2995    SetOutPath "$INSTDIR\Documentation"
2996    File "..\..\doc\install\Documentation\pt_BR\README.TXT"
2997
2998    SetOutPath "$INSTDIR\Client\Program"
2999    !insertmacro ReplaceDLL  "${AFS_CLIENT_BUILDDIR}\afscreds_1046.dll"  "$INSTDIR\Client\Program\afscreds_1046.dll" "$INSTDIR"    
3000    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1046.dll" "$INSTDIR\Client\Program\afs_shl_ext_1046.dll" "$INSTDIR"
3001 !ifdef DEBUG
3002    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1046.pdb"
3003    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1046.pdb"
3004 !endif
3005
3006    SetOutPath "$INSTDIR\Common"
3007    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1046.dll"           "$INSTDIR\Common\afs_config_1046.dll" "$INSTDIR"     
3008    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1046.dll"              "$INSTDIR\Common\afs_cpa_1046.dll" "$INSTDIR"     
3009    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1046.dll"          "$INSTDIR\Common\afseventmsg_1046.dll" "$INSTDIR"     
3010   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1046.dll"      "$INSTDIR\Common\afs_setup_utils_1046.dll" "$INSTDIR"     
3011    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1046.dll"            "$INSTDIR\Common\afsserver_1046.dll" "$INSTDIR"     
3012    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1046.dll"            "$INSTDIR\Common\afssvrcfg_1046.dll" "$INSTDIR"     
3013    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1046.dll"  "$INSTDIR\Common\TaAfsAccountManager_1046.dll" "$INSTDIR"     
3014    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1046.dll"          "$INSTDIR\Common\TaAfsAppLib_1046.dll" "$INSTDIR"     
3015    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1046.dll"   "$INSTDIR\Common\TaAfsServerManager_1046.dll" "$INSTDIR"     
3016    File "..\..\doc\help\pt_BR\afs-cc.CNT"
3017    File "..\..\doc\help\pt_BR\afs-cc.hlp"
3018    File "..\..\doc\help\pt_BR\afs-light.CNT"
3019    File "..\..\doc\help\pt_BR\afs-light.hlp"
3020    File "..\..\doc\help\pt_BR\afs-nt.CNT"
3021    File "..\..\doc\help\pt_BR\afs-nt.HLP"
3022    File "..\..\doc\help\pt_BR\taafscfg.CNT"
3023    File "..\..\doc\help\pt_BR\taafscfg.hlp"
3024    File "..\..\doc\help\pt_BR\taafssvrmgr.CNT"
3025    File "..\..\doc\help\pt_BR\taafssvrmgr.hlp"
3026    File "..\..\doc\help\pt_BR\taafsusrmgr.CNT"
3027    File "..\..\doc\help\pt_BR\taafsusrmgr.hlp"
3028
3029 !ifdef DEBUG
3030    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1046.pdb"
3031    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1046.pdb"
3032    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1046.pdb"
3033    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1046.pdb"
3034    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1046.pdb"
3035    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1046.pdb"
3036    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1046.pdb"
3037    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1046.pdb"
3038 !ENDIF
3039    goto done
3040    
3041 DoSimpChinese:
3042
3043    SetOutPath "$INSTDIR\Documentation"
3044    File "..\..\doc\install\Documentation\zh_CN\README.TXT"
3045
3046    SetOutPath "$INSTDIR\Client\Program"
3047    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_2052.dll"   "$INSTDIR\Client\Program\afscreds_2052.dll" "$INSTDIR"     
3048    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_2052.dll" "$INSTDIR\Client\Program\afs_shl_ext_2052.dll" "$INSTDIR"
3049 !ifdef DEBUG
3050    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_2052.pdb"
3051    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_2052.pdb"
3052 !endif
3053
3054    SetOutPath "$INSTDIR\Common"
3055    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_2052.dll"           "$INSTDIR\Common\afs_config_2052.dll" "$INSTDIR"      
3056    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_2052.dll"              "$INSTDIR\Common\afs_cpa_2052.dll" "$INSTDIR"      
3057    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_2052.dll"          "$INSTDIR\Common\afseventmsg_2052.dll" "$INSTDIR"      
3058   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_2052.dll"      "$INSTDIR\Common\afs_setup_utils_2052.dll" "$INSTDIR"      
3059    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_2052.dll"            "$INSTDIR\Common\afsserver_2052.dll" "$INSTDIR"      
3060    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_2052.dll"            "$INSTDIR\Common\afssvrcfg_2052.dll" "$INSTDIR"      
3061    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_2052.dll"  "$INSTDIR\Common\TaAfsAccountManager_2052.dll" "$INSTDIR"      
3062    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_2052.dll"          "$INSTDIR\Common\TaAfsAppLib_2052.dll" "$INSTDIR"      
3063    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_2052.dll"   "$INSTDIR\Common\TaAfsServerManager_2052.dll" "$INSTDIR"      
3064    File "..\..\doc\help\zh_CN\afs-cc.CNT"
3065    File "..\..\doc\help\zh_CN\afs-cc.hlp"
3066    File "..\..\doc\help\zh_CN\afs-light.CNT"
3067    File "..\..\doc\help\zh_CN\afs-light.hlp"
3068    File "..\..\doc\help\zh_CN\afs-nt.CNT"
3069    File "..\..\doc\help\zh_CN\afs-nt.HLP"
3070    File "..\..\doc\help\zh_CN\taafscfg.CNT"
3071    File "..\..\doc\help\zh_CN\taafscfg.hlp"
3072    File "..\..\doc\help\zh_CN\taafssvrmgr.CNT"
3073    File "..\..\doc\help\zh_CN\taafssvrmgr.hlp"
3074    File "..\..\doc\help\zh_CN\taafsusrmgr.CNT"
3075    File "..\..\doc\help\zh_CN\taafsusrmgr.hlp"
3076
3077 !ifdef DEBUG
3078    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_2052.pdb"
3079    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_2052.pdb"
3080    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_2052.pdb"
3081    ;File "${AFS_SERVER_BUILDDIR}\afsserver_2052.pdb"
3082    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_2052.pdb"
3083    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_2052.pdb"
3084    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_2052.pdb"
3085    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_2052.pdb"
3086 !ENDIF
3087    goto done
3088    
3089 DoTradChinese:
3090
3091    SetOutPath "$INSTDIR\Documentation"
3092    File "..\..\doc\install\Documentation\zh_TW\README.TXT"
3093
3094    SetOutPath "$INSTDIR\Client\Program"
3095    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1028.dll"  "$INSTDIR\Client\Program\_1028.dll" "$INSTDIR"      
3096    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1028.dll" "$INSTDIR\Client\Program\afs_shl_ext_1028.dll" "$INSTDIR"
3097 !ifdef DEBUG
3098    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1028.pdb"
3099    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1028.pdb"
3100 !endif
3101
3102    SetOutPath "$INSTDIR\Common"
3103    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1028.dll"           "$INSTDIR\Common\afs_config_1028.dll" "$INSTDIR"       
3104    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1028.dll"              "$INSTDIR\Common\afs_cpa_1028.dll" "$INSTDIR"       
3105    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1028.dll"          "$INSTDIR\Common\afseventmsg_1028.dll" "$INSTDIR"       
3106   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1028.dll"      "$INSTDIR\Common\afs_setup_utils_1028.dll" "$INSTDIR"       
3107    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1028.dll"            "$INSTDIR\Common\afsserver_1028.dll" "$INSTDIR"       
3108    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1028.dll"            "$INSTDIR\Common\afssvrcfg_1028.dll" "$INSTDIR"       
3109    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1028.dll"  "$INSTDIR\Common\TaAfsAccountManager_1028.dll" "$INSTDIR"       
3110    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1028.dll"          "$INSTDIR\Common\TaAfsAppLib_1028.dll" "$INSTDIR"       
3111    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1028.dll"   "$INSTDIR\Common\TaAfsServerManager_1028.dll" "$INSTDIR"       
3112    File "..\..\doc\help\zh_TW\afs-cc.CNT"
3113    File "..\..\doc\help\zh_TW\afs-cc.hlp"
3114    File "..\..\doc\help\zh_TW\afs-light.CNT"
3115    File "..\..\doc\help\zh_TW\afs-light.hlp"
3116    File "..\..\doc\help\zh_TW\afs-nt.CNT"
3117    File "..\..\doc\help\zh_TW\afs-nt.HLP"
3118    File "..\..\doc\help\zh_TW\taafscfg.CNT"
3119    File "..\..\doc\help\zh_TW\taafscfg.hlp"
3120    File "..\..\doc\help\zh_TW\taafssvrmgr.CNT"
3121    File "..\..\doc\help\zh_TW\taafssvrmgr.hlp"
3122    File "..\..\doc\help\zh_TW\taafsusrmgr.CNT"
3123    File "..\..\doc\help\zh_TW\taafsusrmgr.hlp"
3124
3125 !ifdef DEBUG
3126    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1028.pdb"
3127    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1028.pdb"
3128    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1028.pdb"
3129    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1028.pdb"
3130    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1028.pdb"
3131    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1028.pdb"
3132    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1028.pdb"
3133    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1028.pdb"
3134 !ENDIF
3135    goto done
3136    
3137 done:
3138 FunctionEnd
3139
3140
3141
3142 ;====================================================
3143 ; AddToPath - Adds the given dir to the search path.
3144 ;        Input - head of the stack
3145 ;        Note - Win9x systems requires reboot
3146 ;====================================================
3147 Function AddToPath
3148   Exch $0
3149   Push $1
3150   Push $2
3151   Push $3
3152
3153   # don't add if the path doesn't exist
3154   IfFileExists $0 "" AddToPath_done
3155
3156   ReadEnvStr $1 PATH
3157   Push "$1;"
3158   Push "$0;"
3159   Call StrStr
3160   Pop $2
3161   StrCmp $2 "" "" AddToPath_done
3162   Push "$1;"
3163   Push "$0\;"
3164   Call StrStr
3165   Pop $2
3166   StrCmp $2 "" "" AddToPath_done
3167   GetFullPathName /SHORT $3 $0
3168   Push "$1;"
3169   Push "$3;"
3170   Call StrStr
3171   Pop $2
3172   StrCmp $2 "" "" AddToPath_done
3173   Push "$1;"
3174   Push "$3\;"
3175   Call StrStr
3176   Pop $2
3177   StrCmp $2 "" "" AddToPath_done
3178
3179   Call IsNT
3180   Pop $1
3181   StrCmp $1 1 AddToPath_NT
3182     ; Not on NT
3183     StrCpy $1 $WINDIR 2
3184     FileOpen $1 "$1\autoexec.bat" a
3185     FileSeek $1 -1 END
3186     FileReadByte $1 $2
3187     IntCmp $2 26 0 +2 +2 # DOS EOF
3188       FileSeek $1 -1 END # write over EOF
3189     FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
3190     FileClose $1
3191     SetRebootFlag true
3192     Goto AddToPath_done
3193
3194   AddToPath_NT:
3195     ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
3196     StrCpy $2 $1 1 -1 # copy last char
3197     StrCmp $2 ";" 0 +2 # if last char == ;
3198       StrCpy $1 $1 -1 # remove last char
3199     StrCmp $1 "" AddToPath_NTdoIt
3200       StrCpy $0 "$1;$0"
3201     AddToPath_NTdoIt:
3202       WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" $0
3203       SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
3204
3205   AddToPath_done:
3206     Pop $3
3207     Pop $2
3208     Pop $1
3209     Pop $0
3210 FunctionEnd
3211
3212 ;====================================================
3213 ; RemoveFromPath - Remove a given dir from the path
3214 ;     Input: head of the stack
3215 ;====================================================
3216 Function un.RemoveFromPath
3217   Exch $0
3218   Push $1
3219   Push $2
3220   Push $3
3221   Push $4
3222   Push $5
3223   Push $6
3224
3225   IntFmt $6 "%c" 26 # DOS EOF
3226
3227   Call un.IsNT
3228   Pop $1
3229   StrCmp $1 1 unRemoveFromPath_NT
3230     ; Not on NT
3231     StrCpy $1 $WINDIR 2
3232     FileOpen $1 "$1\autoexec.bat" r
3233     GetTempFileName $4
3234     FileOpen $2 $4 w
3235     GetFullPathName /SHORT $0 $0
3236     StrCpy $0 "SET PATH=%PATH%;$0"
3237     Goto unRemoveFromPath_dosLoop
3238
3239     unRemoveFromPath_dosLoop:
3240       FileRead $1 $3
3241       StrCpy $5 $3 1 -1 # read last char
3242       StrCmp $5 $6 0 +2 # if DOS EOF
3243         StrCpy $3 $3 -1 # remove DOS EOF so we can compare
3244       StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
3245       StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
3246       StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
3247       StrCmp $3 "" unRemoveFromPath_dosLoopEnd
3248       FileWrite $2 $3
3249       Goto unRemoveFromPath_dosLoop
3250       unRemoveFromPath_dosLoopRemoveLine:
3251         SetRebootFlag true
3252         Goto unRemoveFromPath_dosLoop
3253
3254     unRemoveFromPath_dosLoopEnd:
3255       FileClose $2
3256       FileClose $1
3257       StrCpy $1 $WINDIR 2
3258       Delete "$1\autoexec.bat"
3259       CopyFiles /SILENT $4 "$1\autoexec.bat"
3260       Delete $4
3261       Goto unRemoveFromPath_done
3262
3263   unRemoveFromPath_NT:
3264     ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
3265     StrCpy $5 $1 1 -1 # copy last char
3266     StrCmp $5 ";" +2 # if last char != ;
3267       StrCpy $1 "$1;" # append ;
3268     Push $1
3269     Push "$0;"
3270     Call un.StrStr ; Find `$0;` in $1
3271     Pop $2 ; pos of our dir
3272     StrCmp $2 "" unRemoveFromPath_done
3273       ; else, it is in path
3274       # $0 - path to add
3275       # $1 - path var
3276       StrLen $3 "$0;"
3277       StrLen $4 $2
3278       StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
3279       StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
3280       StrCpy $3 $5$6
3281
3282       StrCpy $5 $3 1 -1 # copy last char
3283       StrCmp $5 ";" 0 +2 # if last char == ;
3284         StrCpy $3 $3 -1 # remove last char
3285
3286       WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" $3
3287       SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
3288
3289   unRemoveFromPath_done:
3290     Pop $6
3291     Pop $5
3292     Pop $4
3293     Pop $3
3294     Pop $2
3295     Pop $1
3296     Pop $0
3297 FunctionEnd
3298
3299 ;====================================================
3300 ; IsNT - Returns 1 if the current system is NT, 0
3301 ;        otherwise.
3302 ;     Output: head of the stack
3303 ;====================================================
3304 !macro IsNT un
3305 Function ${un}IsNT
3306   Push $0
3307   ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
3308   StrCmp $0 "" 0 IsNT_yes
3309   ; we are not NT.
3310   Pop $0
3311   Push 0
3312   Return
3313
3314   IsNT_yes:
3315     ; NT!!!
3316     Pop $0
3317     Push 1
3318 FunctionEnd
3319 !macroend
3320 !insertmacro IsNT ""
3321 !insertmacro IsNT "un."
3322
3323 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3324 ; Uninstall stuff
3325 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3326 ;====================================================
3327 ; StrStr - Finds a given string in another given string.
3328 ;               Returns -1 if not found and the pos if found.
3329 ;          Input: head of the stack - string to find
3330 ;                      second in the stack - string to find in
3331 ;          Output: head of the stack
3332 ;====================================================
3333 !macro StrStr un
3334 Function ${un}StrStr
3335 Exch $R1 ; st=haystack,old$R1, $R1=needle
3336   Exch    ; st=old$R1,haystack
3337   Exch $R2 ; st=old$R1,old$R2, $R2=haystack
3338   Push $R3
3339   Push $R4
3340   Push $R5
3341   StrLen $R3 $R1
3342   StrCpy $R4 0
3343   ; $R1=needle
3344   ; $R2=haystack
3345   ; $R3=len(needle)
3346   ; $R4=cnt
3347   ; $R5=tmp
3348   loop:
3349     StrCpy $R5 $R2 $R3 $R4
3350     StrCmp $R5 $R1 done
3351     StrCmp $R5 "" done
3352     IntOp $R4 $R4 + 1
3353     Goto loop
3354 done:
3355   StrCpy $R1 $R2 "" $R4
3356   Pop $R5
3357   Pop $R4
3358   Pop $R3
3359   Pop $R2
3360   Exch $R1
3361 FunctionEnd
3362 !macroend
3363 !insertmacro StrStr ""
3364 !insertmacro StrStr "un."
3365
3366
3367 !ifdef ADDSHAREDDLLUSED
3368 ; AddSharedDLL
3369  ;
3370  ; Increments a shared DLLs reference count.
3371  ; Use by passing one item on the stack (the full path of the DLL).
3372  ;
3373  ; Usage:
3374  ;   Push $SYSDIR\myDll.dll
3375  ;   Call AddSharedDLL
3376  ;
3377
3378  Function AddSharedDLL
3379    Exch $R1
3380    Push $R0
3381    ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
3382    IntOp $R0 $R0 + 1
3383    WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
3384    Pop $R0
3385    Pop $R1
3386  FunctionEnd
3387
3388  
3389 ; un.RemoveSharedDLL
3390  ;
3391  ; Decrements a shared DLLs reference count, and removes if necessary.
3392  ; Use by passing one item on the stack (the full path of the DLL).
3393  ; Note: for use in the main installer (not the uninstaller), rename the
3394  ; function to RemoveSharedDLL.
3395  ;
3396  ; Usage:
3397  ;   Push $SYSDIR\myDll.dll
3398  ;   Call un.RemoveSharedDLL
3399  ;
3400
3401  Function un.RemoveSharedDLL
3402    Exch $R1
3403    Push $R0
3404    ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
3405    StrCmp $R0 "" remove
3406      IntOp $R0 $R0 - 1
3407      IntCmp $R0 0 rk rk uk
3408      rk:
3409        DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
3410      goto Remove
3411      uk:
3412        WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
3413      Goto noremove
3414    remove:
3415      Delete /REBOOTOK $R1
3416    noremove:
3417    Pop $R0
3418    Pop $R1
3419  FunctionEnd
3420 !endif
3421
3422
3423 ; Installs the loopback adpater and disables it on Windows 2000
3424 Function afs.InstallMSLoopback
3425    GetTempFileName $R0
3426    File /oname=$R0 "${AFS_WININSTALL_DIR}\loopback_install.dll"
3427    nsExec::Exec "rundll32.exe $R0 doLoopBackEntry quiet"
3428    Delete $R0
3429 FunctionEnd
3430
3431 Function afs.isLoopbackInstalled
3432    SetOutPath $TEMP
3433    File "${AFS_WININSTALL_DIR}\loopback_install.dll"
3434    System::Call "$TEMP\loopback_install.dll::loopback_isInstalled() i().r11"
3435    Delete "$TEMP\loopback_install.dll"
3436 FunctionEnd
3437
3438
3439 ; GetWindowsVersion
3440 ;
3441 ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
3442 ; Updated by Joost Verburg
3443 ;
3444 ; Returns on top of stack
3445 ;
3446 ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
3447 ; or
3448 ; '' (Unknown Windows Version)
3449 ;
3450 ; Usage:
3451 ;   Call GetWindowsVersion
3452 ;   Pop $R0
3453 ;   ; at this point $R0 is "NT 4.0" or whatnot
3454
3455 Function GetWindowsVersion
3456
3457   Push $R0
3458   Push $R1
3459
3460   ClearErrors
3461
3462   ReadRegStr $R0 HKLM \
3463   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
3464
3465   IfErrors 0 lbl_winnt
3466   
3467   ; we are not NT
3468   ReadRegStr $R0 HKLM \
3469   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
3470
3471   StrCpy $R1 $R0 1
3472   StrCmp $R1 '4' 0 lbl_error
3473
3474   StrCpy $R1 $R0 3
3475
3476   StrCmp $R1 '4.0' lbl_win32_95
3477   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
3478
3479   lbl_win32_95:
3480     StrCpy $R0 '95'
3481   Goto lbl_done
3482
3483   lbl_win32_98:
3484     StrCpy $R0 '98'
3485   Goto lbl_done
3486
3487   lbl_win32_ME:
3488     StrCpy $R0 'ME'
3489   Goto lbl_done
3490
3491   lbl_winnt:
3492
3493   StrCpy $R1 $R0 1
3494
3495   StrCmp $R1 '3' lbl_winnt_x
3496   StrCmp $R1 '4' lbl_winnt_x
3497
3498   StrCpy $R1 $R0 3
3499
3500   StrCmp $R1 '5.0' lbl_winnt_2000
3501   StrCmp $R1 '5.1' lbl_winnt_XP
3502   StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
3503
3504   lbl_winnt_x:
3505     StrCpy $R0 "NT $R0" 6
3506   Goto lbl_done
3507
3508   lbl_winnt_2000:
3509     Strcpy $R0 '2000'
3510   Goto lbl_done
3511
3512   lbl_winnt_XP:
3513     Strcpy $R0 'XP'
3514   Goto lbl_done
3515
3516   lbl_winnt_2003:
3517     Strcpy $R0 '2003'
3518   Goto lbl_done
3519
3520   lbl_error:
3521     Strcpy $R0 ''
3522   lbl_done:
3523
3524   Pop $R1
3525   Exch $R0
3526
3527 FunctionEnd
3528
3529
3530 ; Author: Lilla (lilla@earthlink.net) 2003-06-13
3531 ; function IsUserAdmin uses plugin \NSIS\PlusgIns\UserInfo.dll
3532 ; This function is based upon code in \NSIS\Contrib\UserInfo\UserInfo.nsi
3533 ; This function was tested under NSIS 2 beta 4 (latest CVS as of this writing).
3534 ;
3535 ; Usage:
3536 ;   Call IsUserAdmin
3537 ;   Pop $R0   ; at this point $R0 is "true" or "false"
3538 ;
3539 Function IsUserAdmin
3540 Push $R0
3541 Push $R1
3542 Push $R2
3543
3544 ClearErrors
3545 UserInfo::GetName
3546 IfErrors Win9x
3547 Pop $R1
3548 UserInfo::GetAccountType
3549 Pop $R2
3550
3551 StrCmp $R2 "Admin" 0 Continue
3552 ; Observation: I get here when running Win98SE. (Lilla)
3553 ; The functions UserInfo.dll looks for are there on Win98 too, 
3554 ; but just don't work. So UserInfo.dll, knowing that admin isn't required
3555 ; on Win98, returns admin anyway. (per kichik)
3556 ; MessageBox MB_OK 'User "$R1" is in the Administrators group'
3557 StrCpy $R0 "true"
3558 Goto Done
3559
3560 Continue:
3561 ; You should still check for an empty string because the functions
3562 ; UserInfo.dll looks for may not be present on Windows 95. (per kichik)
3563 StrCmp $R2 "" Win9x
3564 StrCpy $R0 "false"
3565 ;MessageBox MB_OK 'User "$R1" is in the "$R2" group'
3566 Goto Done
3567
3568 Win9x:
3569 ; comment/message below is by UserInfo.nsi author:
3570 ; This one means you don't need to care about admin or
3571 ; not admin because Windows 9x doesn't either
3572 ;MessageBox MB_OK "Error! This DLL can't run under Windows 9x!"
3573 StrCpy $R0 "false"
3574
3575 Done:
3576 ;MessageBox MB_OK 'User= "$R1"  AccountType= "$R2"  IsUserAdmin= "$R0"'
3577
3578 Pop $R2
3579 Pop $R1
3580 Exch $R0
3581 FunctionEnd
3582
3583 ; GetParent
3584  ; input, top of stack  (e.g. C:\Program Files\Poop)
3585  ; output, top of stack (replaces, with e.g. C:\Program Files)
3586  ; modifies no other variables.
3587  ;
3588  ; Usage:
3589  ;   Push "C:\Program Files\Directory\Whatever"
3590  ;   Call GetParent
3591  ;   Pop $R0
3592  ;   ; at this point $R0 will equal "C:\Program Files\Directory"
3593
3594 Function GetParent
3595
3596   Exch $R0
3597   Push $R1
3598   Push $R2
3599   Push $R3
3600   
3601   StrCpy $R1 0
3602   StrLen $R2 $R0
3603   
3604   loop:
3605     IntOp $R1 $R1 + 1
3606     IntCmp $R1 $R2 get 0 get
3607     StrCpy $R3 $R0 1 -$R1
3608     StrCmp $R3 "\" get
3609   Goto loop
3610   
3611   get:
3612     StrCpy $R0 $R0 -$R1
3613     
3614     Pop $R3
3615     Pop $R2
3616     Pop $R1
3617     Exch $R0
3618     
3619 FunctionEnd
3620
3621
3622 ;--------------------------------
3623 ;Handle what must and what must not be installed
3624 Function .onSelChange
3625    ; If they install the server, they MUST install the client
3626    SectionGetFlags ${secServer} $R0
3627    IntOp $R0 $R0 & ${SF_SELECTED}
3628    StrCmp $R0 "1" MakeClientSelected
3629    
3630    ; If they install the control center, we'll give them the client.
3631    ; It may not be required, but it's a bit more useful
3632    SectionGetFlags ${secControl} $R0
3633    IntOp $R0 $R0 & ${SF_SELECTED}
3634    StrCmp $R0 "1" MakeClientSelected
3635    goto end
3636    
3637 MakeClientSelected:
3638    SectionGetFlags ${secClient} $R0
3639    IntOp $R0 $R0 | ${SF_SELECTED}
3640    SectionSetFlags ${secClient} $R0
3641    
3642 end:
3643 FunctionEnd
3644
3645 Function RegWriteMultiStr
3646 !define HKEY_CLASSES_ROOT        0x80000000
3647 !define HKEY_CURRENT_USER        0x80000001
3648 !define HKEY_LOCAL_MACHINE       0x80000002
3649 !define HKEY_USERS               0x80000003
3650 !define HKEY_PERFORMANCE_DATA    0x80000004
3651 !define HKEY_PERFORMANCE_TEXT    0x80000050
3652 !define HKEY_PERFORMANCE_NLSTEXT 0x80000060
3653 !define HKEY_CURRENT_CONFIG      0x80000005
3654 !define HKEY_DYN_DATA            0x80000006
3655
3656 !define KEY_QUERY_VALUE          0x0001
3657 !define KEY_SET_VALUE            0x0002
3658 !define KEY_CREATE_SUB_KEY       0x0004
3659 !define KEY_ENUMERATE_SUB_KEYS   0x0008
3660 !define KEY_NOTIFY               0x0010
3661 !define KEY_CREATE_LINK          0x0020
3662
3663 !define REG_NONE                 0
3664 !define REG_SZ                   1
3665 !define REG_EXPAND_SZ            2
3666 !define REG_BINARY               3
3667 !define REG_DWORD                4
3668 !define REG_DWORD_LITTLE_ENDIAN  4
3669 !define REG_DWORD_BIG_ENDIAN     5
3670 !define REG_LINK                 6
3671 !define REG_MULTI_SZ             7
3672
3673 !define RegCreateKey             "Advapi32::RegCreateKeyA(i, t, *i) i"
3674 !define RegSetValueEx            "Advapi32::RegSetValueExA(i, t, i, i, i, i) i"
3675 !define RegCloseKey              "Advapi32::RegCloseKeyA(i) i"
3676
3677   Exch $R0
3678   Push $1
3679   Push $2
3680   Push $9
3681
3682   SetPluginUnload alwaysoff
3683   ; Create a buffer for the multi_sz value
3684   System::Call "*(&t${NSIS_MAX_STRLEN}) i.r1"
3685   ; Open/create the registry key
3686   System::Call "${RegCreateKey}(${HKEY_LOCAL_MACHINE}, '$REG_SUB_KEY', .r0) .r9"
3687   ; Failed?
3688   IntCmp $9 0 write
3689     MessageBox MB_OK|MB_ICONSTOP "Can't create registry key! ($9)"
3690     Goto noClose
3691
3692   write:
3693     ; Fill in the buffer with our strings
3694     StrCpy $2 $1                            ; Initial position
3695
3696     StrLen $9 '$REG_DATA_1'                 ; Length of first string
3697     IntOp $9 $9 + 1                         ; Plus null
3698     System::Call "*$2(&t$9 '$REG_DATA_1')"  ; Place the string
3699     IntOp $2 $2 + $9                        ; Advance to the next position
3700
3701     StrCmp '$REG_DATA_2' "" terminate
3702     StrLen $9 '$REG_DATA_2'                 ; Length of second string
3703     IntOp $9 $9 + 1                         ; Plus null
3704     System::Call "*$2(&t$9 '$REG_DATA_2')"  ; Place the string
3705     IntOp $2 $2 + $9                        ; Advance to the next position
3706
3707     StrCmp '$REG_DATA_3' "" terminate
3708     StrLen $9 '$REG_DATA_3'                 ; Length of third string
3709     IntOp $9 $9 + 1                         ; Plus null
3710     System::Call "*$2(&t$9 '$REG_DATA_3')"  ; Place the string
3711     IntOp $2 $2 + $9                        ; Advance to the next position
3712
3713   terminate:
3714     System::Call "*$2(&t1 '')"              ; Place the terminating null
3715     IntOp $2 $2 + 1                         ; Advance to the next position
3716
3717     ; Create/write the value
3718     IntOp $2 $2 - $1                        ; Total length
3719     System::Call "${RegSetValueEx}(r0, '$REG_VALUE', 0, ${REG_MULTI_SZ}, r1, r2) .r9"
3720     ; Failed?
3721     IntCmp $9 0 done
3722       MessageBox MB_OK|MB_ICONSTOP "Can't set key value! ($9)"
3723       Goto done
3724
3725   done:
3726     ; Close the registry key
3727     System::Call "${RegCloseKey}(r0)"
3728
3729 noClose:
3730   ; Clear the buffer
3731   SetPluginUnload manual
3732   System::Free $1
3733
3734   Pop $9
3735   Pop $2
3736   Pop $1
3737   Exch $R0
3738 FunctionEnd