bf4bb790b355d5a63b45e8450300974d68122e99
[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."
197   LangString DESC_secLoopback ${LANG_GERMAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
198   LangString DESC_secLoopback ${LANG_SPANISH} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
199   LangString DESC_secLoopback ${LANG_SIMPCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
200   LangString DESC_secLoopback ${LANG_TRADCHINESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
201   LangString DESC_secLoopback ${LANG_JAPANESE} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
202   LangString DESC_secLoopback ${LANG_KOREAN} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
203   LangString DESC_secLoopback ${LANG_PORTUGUESEBR} "MS Loopback adapter: Installs the adapter for a more reliable AFS client."
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
703   ; Find Lana By Name appears to be causing grief for many people 
704   ; I do not have time to track this down so I am simply going to disable it
705   WriteRegDWORD HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "NoFindLanaByName" 1
706
707   strcpy $REG_SUB_KEY "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" 
708   strcpy $REG_VALUE   "DependOnGroup" 
709   strcpy $REG_DATA_1  "PNP_TDI"
710   strcpy $REG_DATA_2  ""
711   strcpy $REG_DATA_3  ""
712   Call RegWriteMultiStr
713   strcpy $REG_SUB_KEY "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" 
714   strcpy $REG_VALUE   "DependOnService" 
715   strcpy $REG_DATA_1  "Tcpip"
716   strcpy $REG_DATA_2  "NETBIOS"
717   strcpy $REG_DATA_3  "RpcSs"
718   Call RegWriteMultiStr
719
720   SetRebootFlag true
721   
722   WriteUninstaller "$INSTDIR\Uninstall.exe"
723   
724 SectionEnd
725
726
727
728 ; MS Loopback adapter
729 Section "MS Loopback Adapter" secLoopback
730
731 Call afs.InstallMSLoopback
732
733 SectionEnd
734
735
736 ;------------------------
737 ; OpenAFS SERVER  
738 Section "AFS Server" secServer
739
740   SetShellVarContext all
741
742   ; Check for bad previous installation (if we are doing a new install)
743   Call IsAnyAFSInstalled
744   Pop $R0
745   StrCmp $R0 "0" +1 skipCheck
746   Call CheckPathForAFS
747 skipCheck:
748
749   ; Stop any running services or we can't replace the files
750   ; Stop the running processes
751   GetTempFileName $R0
752   File /oname=$R0 "${AFS_WININSTALL_DIR}\Killer.exe"
753   nsExec::Exec '$R0 afscreds.exe'
754   Exec "afscreds.exe -z"
755   ; in case we are upgrading an old version that does not support -z
756   Sleep 2000
757   nsExec::Exec '$R0 afscreds.exe'
758 !IFDEF INSTALL_KFW
759   ;nsExec::Exec '$R0 krbcc32s.exe'
760 !ENDIF
761
762   Delete $R0
763   
764   nsExec::Exec "net stop TransarcAFSDaemon"
765   nsExec::Exec "net stop TransarcAFSServer"
766
767   CreateDirectory "$INSTDIR\Server\usr\afs\etc"
768   CreateDirectory "$INSTDIR\Server\usr\afs\local"
769   CreateDirectory "$INSTDIR\Server\usr\afs\etc\logs"
770   
771   SetOutPath "$INSTDIR\Server\usr\afs\bin"  
772   File "${AFS_SERVER_BUILDDIR}\afskill.exe"
773   File "${AFS_SERVER_BUILDDIR}\afssvrcfg.exe"
774   File "${AFS_SERVER_BUILDDIR}\bosctlsvc.exe"
775   File "${AFS_SERVER_BUILDDIR}\bosserver.exe"
776   File "${AFS_SERVER_BUILDDIR}\buserver.exe"
777   File "${AFS_ETC_BUILDDIR}\butc.exe"
778   File "${AFS_SERVER_BUILDDIR}\fileserver.exe"
779   File "${AFS_ETC_BUILDDIR}\fms.exe"
780   File "${AFS_SERVER_BUILDDIR}\kaserver.exe"
781   File "${AFS_SERVER_BUILDDIR}\ptserver.exe"
782   File "${AFS_SERVER_BUILDDIR}\salvager.exe"
783   File "${AFS_SERVER_BUILDDIR}\upclient.exe"
784   File "${AFS_SERVER_BUILDDIR}\upserver.exe"
785   File "${AFS_SERVER_BUILDDIR}\vlserver.exe"
786   File "${AFS_SERVER_BUILDDIR}\volinfo.exe"
787   File "${AFS_SERVER_BUILDDIR}\volserver.exe"
788  
789  ;AFS Server common files
790  SetOutPath "$INSTDIR\Common"
791  File "${AFS_SERVER_BUILDDIR}\afsvosadmin.dll"
792  File "${AFS_SERVER_BUILDDIR}\afsbosadmin.dll"
793  File "${AFS_SERVER_BUILDDIR}\afscfgadmin.dll"
794  File "${AFS_SERVER_BUILDDIR}\afskasadmin.dll"
795  File "${AFS_SERVER_BUILDDIR}\afsptsadmin.dll"
796
797 !ifdef DEBUG
798 !endif
799  SetOutPath "$INSTDIR\Common"
800    Call AFSLangFiles
801    
802    SetOutPath "$SYSDIR"
803   !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver.cpl" "$SYSDIR\afsserver.cpl" "$INSTDIR"
804    
805   ;Store install folder
806   WriteRegStr HKCU "${AFS_REGKEY_ROOT}\AFS Server" "" $INSTDIR
807   
808   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion"
809   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "VersionString" ${AFS_VERSION}
810   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Title" "AFS Server"
811   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Description" "AFS Server for Windows"
812   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "PathName" "$INSTDIR\Server"
813   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Software Type" "File System"
814   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
815   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
816   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
817   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
818   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Title" "AFS Server"
819   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Description" "AFS Server for Windows"
820   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Software Type" "File System"
821   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "PathName" "$INSTDIR\Server"
822   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
823   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
824   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
825 !ifdef DEBUG
826   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Debug" 1
827   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Debug" 1
828 !else
829    ; Delete the DEBUG string
830    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "Debug"
831    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Server\${AFS_VERSION}" "Debug"
832 !endif
833   ; Install the service
834   SetOutPath "$INSTDIR\Common"
835   File "${AFS_WININSTALL_DIR}\Service.exe"
836 !ifdef DEBUG
837   File "${AFS_WININSTALL_DIR}\Service.pdb"
838 !endif
839
840   ; Check if the service exists--if it does, this is an upgrade/re-install
841   ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSServer" "ImagePath"
842   StrCmp $R0 "$INSTDIR\Server\usr\afs\bin\bosctlsvc.exe" SkipStartup
843   
844   ; If an uninstall was done, but we kept the config files, also skip
845   IfFileExists "$INSTDIR\Server\usr\afs\etc\ThisCell" SkipStartup
846
847   ; Make the server config wizard auto-start on bootup if this is an install (not an upgrade)
848   WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce" "AFS Server Wizard" '"$INSTDIR\Server\usr\afs\bin\afssvrcfg.exe" /wizard"'
849   
850   
851 SkipStartup:
852   ;Don't want to whack existing settings... Make users un-install and then re-install if they want that
853   ;nsExec::Exec '$INSTDIR\Common\service.exe u TransarcAFSServer'
854   nsExec::Exec '$INSTDIR\Common\service.exe TransarcAFSServer "$INSTDIR\Server\usr\afs\bin\bosctlsvc.exe" "OpenAFS AFS Server"'
855   Delete "$INSTDIR\Common\service.exe"
856   
857   CreateDirectory "$SMPROGRAMS\OpenAFS\Server"
858   CreateShortCut "$SMPROGRAMS\OpenAFS\Server\Server Configuration.lnk" "$INSTDIR\Server\usr\afs\bin\afssvrcfg.exe"
859   
860   
861   WriteUninstaller "$INSTDIR\Uninstall.exe"
862
863 SectionEnd
864
865
866 ;----------------------------
867 ; OpenAFS Control Center
868 Section "AFS Control Center" secControl
869
870   SetShellVarContext all
871
872    SetOutPath "$INSTDIR\Control Center"
873   File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.exe"
874   File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.exe"
875   File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.exe"
876    
877
878  ;AFS Server common files
879  Call AFSCommon.Install
880  Call AFSLangFiles
881  SetOutPath "$INSTDIR\Common"
882
883   SetOutPath "$INSTDIR\Common"
884 !IFDEF DEBUG
885 !IFDEF CL_1310
886    File "${SYSTEMDIR}\msvcr71d.dll"
887    File "${SYSTEMDIR}\msvcp71d.dll"
888    File "${SYSTEMDIR}\mfc71d.dll"
889    File "${SYSTEMDIR}\MFC71CHS.DLL"
890    File "${SYSTEMDIR}\MFC71CHT.DLL"
891    File "${SYSTEMDIR}\MFC71DEU.DLL"
892    File "${SYSTEMDIR}\MFC71ENU.DLL"
893    File "${SYSTEMDIR}\MFC71ESP.DLL"
894    File "${SYSTEMDIR}\MFC71FRA.DLL"
895    File "${SYSTEMDIR}\MFC71ITA.DLL"
896    File "${SYSTEMDIR}\MFC71JPN.DLL"
897    File "${SYSTEMDIR}\MFC71KOR.DLL"
898 !ELSE
899 !IFDEF CL_1300
900    File "${SYSTEMDIR}\msvcr70d.dll"
901    File "${SYSTEMDIR}\msvcp70d.dll"
902    File "${SYSTEMDIR}\mfc70d.dll"
903    File "${SYSTEMDIR}\MFC70CHS.DLL"
904    File "${SYSTEMDIR}\MFC70CHT.DLL"
905    File "${SYSTEMDIR}\MFC70DEU.DLL"
906    File "${SYSTEMDIR}\MFC70ENU.DLL"
907    File "${SYSTEMDIR}\MFC70ESP.DLL"
908    File "${SYSTEMDIR}\MFC70FRA.DLL"
909    File "${SYSTEMDIR}\MFC70ITA.DLL"
910    File "${SYSTEMDIR}\MFC70JPN.DLL"
911    File "${SYSTEMDIR}\MFC70KOR.DLL"
912 !ELSE
913    File "${SYSTEMDIR}\mfc42d.dll"
914    File "${SYSTEMDIR}\msvcp60d.dll"
915    File "${SYSTEMDIR}\msvcrtd.dll"
916 !ENDIF
917 !ENDIF
918 !ELSE
919 !IFDEF CL_1310
920    File "${SYSTEMDIR}\mfc71.dll"
921    File "${SYSTEMDIR}\msvcr71.dll"
922    File "${SYSTEMDIR}\msvcp71.dll"
923    File "${SYSTEMDIR}\MFC71CHS.DLL"
924    File "${SYSTEMDIR}\MFC71CHT.DLL"
925    File "${SYSTEMDIR}\MFC71DEU.DLL"
926    File "${SYSTEMDIR}\MFC71ENU.DLL"
927    File "${SYSTEMDIR}\MFC71ESP.DLL"
928    File "${SYSTEMDIR}\MFC71FRA.DLL"
929    File "${SYSTEMDIR}\MFC71ITA.DLL"
930    File "${SYSTEMDIR}\MFC71JPN.DLL"
931    File "${SYSTEMDIR}\MFC71KOR.DLL"
932 !ELSE
933 !IFDEF CL_1300
934    File "${SYSTEMDIR}\mfc70.dll"
935    File "${SYSTEMDIR}\msvcr70.dll"
936    File "${SYSTEMDIR}\msvcp70.dll"
937    File "${SYSTEMDIR}\MFC70CHS.DLL"
938    File "${SYSTEMDIR}\MFC70CHT.DLL"
939    File "${SYSTEMDIR}\MFC70DEU.DLL"
940    File "${SYSTEMDIR}\MFC70ENU.DLL"
941    File "${SYSTEMDIR}\MFC70ESP.DLL"
942    File "${SYSTEMDIR}\MFC70FRA.DLL"
943    File "${SYSTEMDIR}\MFC70ITA.DLL"
944    File "${SYSTEMDIR}\MFC70JPN.DLL"
945    File "${SYSTEMDIR}\MFC70KOR.DLL"
946 !ELSE
947    File "${SYSTEMDIR}\mfc42.dll"
948    File "${SYSTEMDIR}\msvcp60.dll"
949    File "${SYSTEMDIR}\msvcrt.dll"
950 !ENDIF
951 !ENDIF
952 !ENDIF   
953    ;Store install folder
954   WriteRegStr HKCU "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "PathName" $INSTDIR
955   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "VersionString" ${AFS_VERSION}
956   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
957   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
958   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
959   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
960   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
961   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
962   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
963 !ifdef DEBUG
964   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "Debug" 1
965   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "Debug" 1
966 !else
967    ; Delete the DEBUG string
968    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "Debug"
969    DeleteRegValue HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\${AFS_VERSION}" "Debug"
970 !endif
971
972   ;Write start menu entries
973   CreateDirectory "$SMPROGRAMS\OpenAFS\Control Center"
974   CreateShortCut "$SMPROGRAMS\OpenAFS\Control Center\Account Manager.lnk" "$INSTDIR\Control Center\TaAfsAccountManager.exe"
975   CreateShortCut "$SMPROGRAMS\OpenAFS\Control Center\Server Manager.lnk" "$INSTDIR\Control Center\TaAfsServerManager.exe"
976   
977   WriteUninstaller "$INSTDIR\Uninstall.exe"
978
979 SectionEnd   
980
981
982 ;----------------------------
983 ; OpenAFS Supplemental Documentation
984 Section "Supplemental Documentation" secDocs
985   SetShellVarContext all
986
987    StrCmp $LANGUAGE ${LANG_ENGLISH} DoEnglish
988    StrCmp $LANGUAGE ${LANG_GERMAN} DoGerman
989    StrCmp $LANGUAGE ${LANG_SPANISH} DoSpanish
990    StrCmp $LANGUAGE ${LANG_JAPANESE} DoJapanese
991    StrCmp $LANGUAGE ${LANG_KOREAN} DoKorean
992    StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} DoPortugueseBR
993    StrCmp $LANGUAGE ${LANG_SIMPCHINESE} DoSimpChinese
994    StrCmp $LANGUAGE ${LANG_TRADCHINESE} DoTradChinese
995    
996    
997 DoEnglish:
998    SetOutPath "$INSTDIR\Documentation\html"
999    File "..\..\doc\install\Documentation\en_US\html\*"
1000    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1001    File "..\..\doc\install\Documentation\en_US\html\CmdRef\*"
1002    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1003    File "..\..\doc\install\Documentation\en_US\html\InstallGd\*"
1004    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1005    File "..\..\doc\install\Documentation\en_US\html\ReleaseNotes\*"
1006    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1007    File "..\..\doc\install\Documentation\en_US\html\SysAdminGd\*"
1008    goto DoneLanguage
1009    
1010 DoGerman:
1011    SetOutPath "$INSTDIR\Documentation"
1012    File "..\..\doc\install\Documentation\de_DE\README.TXT"
1013    SetOutPath "$INSTDIR\Documentation\html"
1014    File "..\..\doc\install\Documentation\de_DE\html\*"
1015    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1016    ;File "..\..\doc\install\Documentation\de_DE\html\CmdRef\*"
1017    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1018    File "..\..\doc\install\Documentation\de_DE\html\InstallGd\*"
1019    ;SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1020    ;File "..\..\doc\install\Documentation\de_DE\html\ReleaseNotes\*"
1021    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1022    ;File "..\..\doc\install\Documentation\de_DE\html\SysAdminGd\*"
1023    goto DoneLanguage
1024    
1025 DoSpanish:
1026    SetOutPath "$INSTDIR\Documentation"
1027    File "..\..\doc\install\Documentation\es_ES\README.TXT"
1028    SetOutPath "$INSTDIR\Documentation\html"
1029    File "..\..\doc\install\Documentation\es_ES\html\*"
1030    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1031    ;File "..\..\doc\install\Documentation\es_ES\html\CmdRef\*"
1032    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1033    ;File "..\..\doc\install\Documentation\es_ES\html\InstallGd\*"
1034    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1035    ;File "..\..\doc\install\Documentation\es_ES\html\ReleaseNotes\*"
1036    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1037    ;File "..\..\doc\install\Documentation\es_ES\html\SysAdminGd\*"
1038    goto DoneLanguage
1039
1040 DoJapanese:
1041    SetOutPath "$INSTDIR\Documentation"
1042    File "..\..\doc\install\Documentation\ja_JP\README.TXT"
1043    SetOutPath "$INSTDIR\Documentation\html"
1044    File "..\..\doc\install\Documentation\ja_JP\html\*"
1045    SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1046    File "..\..\doc\install\Documentation\ja_JP\html\CmdRef\*"
1047    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1048    File "..\..\doc\install\Documentation\ja_JP\html\InstallGd\*"
1049    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1050    ;File "..\..\doc\install\Documentation\ja_JP\html\ReleaseNotes\*"
1051    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1052    ;File "..\..\doc\install\Documentation\ja_JP\html\SysAdminGd\*"
1053    goto DoneLanguage
1054    
1055 DoKorean:
1056    SetOutPath "$INSTDIR\Documentation"
1057    File "..\..\doc\install\Documentation\ko_KR\README.TXT"
1058    SetOutPath "$INSTDIR\Documentation\html"
1059    File "..\..\doc\install\Documentation\ko_KR\html\*"
1060    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1061    ;File "..\..\doc\install\Documentation\ko_KR\html\CmdRef\*"
1062    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1063    File "..\..\doc\install\Documentation\ko_KR\html\InstallGd\*"
1064    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1065    File "..\..\doc\install\Documentation\ko_KR\html\ReleaseNotes\*"
1066    SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1067    File "..\..\doc\install\Documentation\ko_KR\html\SysAdminGd\*"
1068    goto DoneLanguage
1069    
1070 DoPortugueseBR:
1071    SetOutPath "$INSTDIR\Documentation"
1072    File "..\..\doc\install\Documentation\pt_BR\README.TXT"
1073    SetOutPath "$INSTDIR\Documentation\html"
1074    File "..\..\doc\install\Documentation\pt_BR\html\*"
1075    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1076    ;File "..\..\doc\install\Documentation\pt_BR\html\CmdRef\*"
1077    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1078    File "..\..\doc\install\Documentation\pt_BR\html\InstallGd\*"
1079    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1080    File "..\..\doc\install\Documentation\pt_BR\html\ReleaseNotes\*"
1081    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1082    ;File "..\..\doc\install\Documentation\pt_BR\html\SysAdminGd\*"
1083    goto DoneLanguage
1084
1085 DoSimpChinese:
1086    SetOutPath "$INSTDIR\Documentation"
1087    File "..\..\doc\install\Documentation\zh_CN\README.TXT"
1088    SetOutPath "$INSTDIR\Documentation\html"
1089    File "..\..\doc\install\Documentation\zh_CN\html\*"
1090    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1091    ;File "..\..\doc\install\Documentation\zh_CN\html\CmdRef\*"
1092    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1093    File "..\..\doc\install\Documentation\zh_CN\html\InstallGd\*"
1094    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1095    File "..\..\doc\install\Documentation\zh_CN\html\ReleaseNotes\*"
1096    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1097    ;File "..\..\doc\install\Documentation\zh_CN\html\SysAdminGd\*"
1098    goto DoneLanguage
1099    
1100 DoTradChinese:
1101    SetOutPath "$INSTDIR\Documentation"
1102    File "..\..\doc\install\Documentation\zh_TW\README.TXT"
1103    SetOutPath "$INSTDIR\Documentation\html"
1104    File "..\..\doc\install\Documentation\zh_TW\html\*"
1105    ;SetOutPath "$INSTDIR\Documentation\html\CmdRef"
1106    ;File "..\..\doc\install\Documentation\zh_TW\html\CmdRef\*"
1107    SetOutPath "$INSTDIR\Documentation\html\InstallGd"
1108    File "..\..\doc\install\Documentation\zh_TW\html\InstallGd\*"
1109    SetOutPath "$INSTDIR\Documentation\html\ReleaseNotes"
1110    File "..\..\doc\install\Documentation\zh_TW\html\ReleaseNotes\*"
1111    ;SetOutPath "$INSTDIR\Documentation\html\SysAdminGd"
1112    ;File "..\..\doc\install\Documentation\zh_TW\html\SysAdminGd\*"
1113    goto DoneLanguage
1114    
1115    
1116 DoneLanguage:
1117    ;Store install folder
1118   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation" "" $INSTDIR
1119   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "VersionString" ${AFS_VERSION}
1120   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
1121   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
1122   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
1123   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
1124   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
1125   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
1126   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
1127
1128   ; Write start menu shortcut
1129   SetOutPath "$SMPROGRAMS\OpenAFS"
1130   CreateShortCut "$SMPROGRAMS\OpenAFS\Documentation.lnk" "$INSTDIR\Documentation\html\index.htm"
1131   
1132   
1133   WriteUninstaller "$INSTDIR\Uninstall.exe"
1134   CreateShortCut "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" "$INSTDIR\Uninstall.exe"
1135   Call AFSCommon.Install
1136 SectionEnd  
1137   
1138
1139 Section "Software Development Kit (SDK)" secSDK
1140
1141     SetOutPath "$INSTDIR\Client\Program\lib"
1142     File /r "${AFS_CLIENT_LIBDIR}\*.*"
1143
1144     SetOutPath "$INSTDIR\Client\Program\Include"
1145     File /r "${AFS_BUILD_INCDIR}\*.*"    
1146
1147    ; Client Sample
1148    SetOutPath "$INSTDIR\Client\Program\Sample"
1149    File "..\..\afsd\sample\token.c"
1150
1151    ;Store install folder
1152   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS SDK" "" $INSTDIR
1153   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "VersionString" ${AFS_VERSION}
1154   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "MajorVersion" ${AFS_MAJORVERSION}
1155   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "MinorVersion" ${AFS_MINORVERSION}
1156   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\CurrentVersion" "PatchLevel" ${AFS_PATCHLEVEL}
1157   WriteRegStr HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "VersionString" ${AFS_VERSION}
1158   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "MajorVersion" ${AFS_MAJORVERSION}
1159   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "MinorVersion" ${AFS_MINORVERSION}
1160   WriteRegDWORD HKLM "${AFS_REGKEY_ROOT}\AFS SDK\${AFS_VERSION}" "PatchLevel" ${AFS_PATCHLEVEL}
1161
1162   WriteUninstaller "$INSTDIR\Uninstall.exe"
1163   SetOutPath "$SMPROGRAMS\OpenAFS"
1164   CreateShortCut "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk" "$INSTDIR\Uninstall.exe"
1165
1166    Call AFSCommon.Install
1167 SectionEnd
1168
1169
1170 Section "Debug symbols" secDebug
1171         SectionGetFlags ${secClient} $R0
1172    IntOp $R0 $R0 & ${SF_SELECTED}
1173    IntCmp $R0 ${SF_SELECTED} +1 DoServer
1174   
1175   ; Do client components
1176   SetOutPath "$INSTDIR\Client\Program"
1177   File "${AFS_CLIENT_BUILDDIR}\afsshare.pdb"
1178   File "${AFS_CLIENT_BUILDDIR}\libosi.pdb"
1179   File "${AFS_CLIENT_BUILDDIR}\libafsconf.pdb"
1180   File "${AFS_CLIENT_BUILDDIR}\klog.pdb"
1181   File "${AFS_CLIENT_BUILDDIR}\tokens.pdb"
1182   File "${AFS_CLIENT_BUILDDIR}\unlog.pdb"
1183   File "${AFS_CLIENT_BUILDDIR}\fs.pdb"
1184   File "${AFS_CLIENT_BUILDDIR}\aklog.pdb"
1185   File "${AFS_CLIENT_BUILDDIR}\afscreds.pdb"
1186   File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext.pdb"
1187   File "${AFS_CLIENT_BUILDDIR}\afsd_service.pdb"
1188   File "${AFS_CLIENT_BUILDDIR}\afslogon.pdb"
1189   File "${AFS_CLIENT_BUILDDIR}\symlink.pdb"
1190   File "${AFS_DESTDIR}\bin\kpasswd.pdb"
1191   File "${AFS_DESTDIR}\bin\pts.pdb"
1192   File "${AFS_SERVER_BUILDDIR}\bos.pdb"
1193   File "${AFS_SERVER_BUILDDIR}\kas.pdb"
1194   File "${AFS_SERVER_BUILDDIR}\vos.pdb"
1195   File "${AFS_SERVER_BUILDDIR}\udebug.pdb"
1196   File "${AFS_DESTDIR}\bin\translate_et.pdb"
1197   File "${AFS_DESTDIR}\etc\rxdebug.pdb"
1198   File "${AFS_DESTDIR}\etc\backup.pdb"
1199
1200   SetOutPath "$SYSDIR"
1201   File "${AFS_CLIENT_BUILDDIR}\afs_cpa.pdb"
1202   
1203 DoServer:
1204         SectionGetFlags ${secServer} $R0
1205    IntOp $R0 $R0 & ${SF_SELECTED}
1206    IntCmp $R0 ${SF_SELECTED} +1 DoControl
1207
1208   ; Do server components
1209   SetOutPath "$INSTDIR\Server\usr\afs\bin"  
1210   File "${AFS_SERVER_BUILDDIR}\afskill.pdb"
1211   File "${AFS_SERVER_BUILDDIR}\afssvrcfg.pdb"
1212   File "${AFS_SERVER_BUILDDIR}\bosctlsvc.pdb"
1213   File "${AFS_SERVER_BUILDDIR}\bosserver.pdb"
1214   File "${AFS_SERVER_BUILDDIR}\buserver.pdb"
1215   File "${AFS_ETC_BUILDDIR}\butc.pdb"
1216   File "${AFS_SERVER_BUILDDIR}\fileserver.pdb"
1217   File "${AFS_ETC_BUILDDIR}\fms.pdb"
1218   File "${AFS_SERVER_BUILDDIR}\kaserver.pdb"
1219   File "${AFS_SERVER_BUILDDIR}\ptserver.pdb"
1220   File "${AFS_SERVER_BUILDDIR}\salvager.pdb"
1221   File "${AFS_SERVER_BUILDDIR}\upclient.pdb"
1222   File "${AFS_SERVER_BUILDDIR}\upserver.pdb"
1223   File "${AFS_SERVER_BUILDDIR}\vlserver.pdb"
1224   File "${AFS_SERVER_BUILDDIR}\volinfo.pdb"
1225   File "${AFS_SERVER_BUILDDIR}\volserver.pdb"
1226
1227   ; Do server common components
1228  File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
1229  File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
1230  File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
1231  File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
1232  File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
1233  
1234    SetOutPath "$SYSDIR"
1235    File "${AFS_SERVER_BUILDDIR}\afsserver.pdb"
1236
1237    ; Do control center components
1238 DoControl:
1239         SectionGetFlags ${secControl} $R0
1240    IntOp $R0 $R0 & ${SF_SELECTED}
1241    IntCmp $R0 ${SF_SELECTED} +1 DoCommon
1242
1243    SetOutPath "$INSTDIR\Control Center"   
1244   File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager.pdb"
1245   File "${AFS_SERVER_BUILDDIR}\TaAfsAdmSvr.pdb"
1246   File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager.pdb"
1247
1248 DoCommon:
1249   SetOutPath "$INSTDIR\Common"
1250 !IFDEF CL_1310
1251    File "${SYSTEMDIR}\msvcr71d.pdb"
1252    File "${SYSTEMDIR}\msvcp71d.pdb"
1253    File "${SYSTEMDIR}\mfc71d.pdb"
1254 !ELSE
1255 !IFDEF CL_1300
1256    File "${SYSTEMDIR}\msvcr70d.pdb"
1257    File "${SYSTEMDIR}\msvcp70d.pdb"
1258    File "${SYSTEMDIR}\mfc70d.pdb"
1259 !ELSE
1260    File "${SYSTEMDIR}\mfc42d.pdb"
1261    File "${SYSTEMDIR}\msvcp60d.pdb"
1262    File "${SYSTEMDIR}\msvcrtd.pdb"
1263 !ENDIF
1264 !ENDIF
1265   
1266 ; Common Areas
1267    SetOutPath "$INSTDIR\Common"
1268    File "${AFS_CLIENT_BUILDDIR}\afs_config.pdb"
1269    File "${AFS_SERVER_BUILDDIR}\afsadminutil.pdb"
1270    File "${AFS_DESTDIR}\lib\afsauthent.pdb"
1271    File "${AFS_DESTDIR}\lib\afspthread.pdb"
1272    File "${AFS_DESTDIR}\lib\afsrpc.pdb"
1273    File "${AFS_SERVER_BUILDDIR}\afsclientadmin.pdb"
1274    File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.pdb"
1275    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
1276    File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.pdb"
1277    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.pdb"
1278    File "${AFS_SERVER_BUILDDIR}\afsbosadmin.pdb"
1279    File "${AFS_SERVER_BUILDDIR}\afscfgadmin.pdb"
1280    File "${AFS_SERVER_BUILDDIR}\afskasadmin.pdb"
1281    File "${AFS_SERVER_BUILDDIR}\afsptsadmin.pdb"
1282
1283 SectionEnd
1284
1285
1286 ;Display the Finish header
1287 ;Insert this macro after the sections if you are not using a finish page
1288 ;!insertmacro MUI_SECTIONS_FINISHHEADER
1289
1290 ;--------------------------------
1291 ;Installer Functions
1292
1293 Function .onInit
1294
1295   !insertmacro MUI_LANGDLL_DISPLAY
1296   
1297   ; Set the default install options
1298         Push $0
1299
1300    Call IsUserAdmin
1301    Pop $R0
1302    StrCmp $R0 "true" contInstall
1303
1304    MessageBox MB_OK|MB_ICONSTOP|MB_TOPMOST "You must be an administrator of this machine to install this software."
1305    Abort
1306    
1307 contInstall:
1308
1309    ; Check that RPC functions are installed (I believe any one of these can be present for
1310    ; OpenAFS to work)
1311    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\RPC\ClientProtocols" "ncacn_np"
1312    StrCmp $R0 "rpcrt4.dll" contInstall2
1313    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\RPC\ClientProtocols" "ncacn_ip_tcp"
1314    StrCmp $R0 "rpcrt4.dll" contInstall2
1315    ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\RPC\ClientProtocols" "ncadg_ip_udp"
1316    StrCmp $R0 "rpcrt4.dll" contInstall2
1317    
1318    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."
1319    Abort
1320
1321
1322 contInstall2:
1323 DoLoop:
1324    ; If the Loopback is already installed, we mark the option OFF and Read Only
1325    ; so the user can not select it.
1326    Call afs.isLoopbackInstalled
1327    IntCmp $R1 0 SkipLoop
1328    SectionGetFlags ${secLoopback} $0
1329    IntOp $0 $0 & ${SECTION_OFF}
1330    IntOp $0 $0 | ${SF_RO}
1331    SectionSetFlags ${secLoopback} $0
1332    
1333 SkipLoop:
1334    ; Never install debug symbols unless explicitly selected, except in DEBUG mode
1335         !IFNDEF DEBUG
1336    SectionGetFlags ${secDebug} $0
1337         IntOp $0 $0 & ${SECTION_OFF}
1338         SectionSetFlags ${secDebug} $0
1339    !ELSE
1340    SectionGetFlags ${secDebug} $0
1341         IntOp $0 $0 | ${SF_SELECTED}
1342         SectionSetFlags ${secDebug} $0
1343    !ENDIF
1344    ; Our logic should be like this.
1345    ;     1) If no AFS components are installed, we do a clean install with default options. (Client/Docs)
1346    ;     2) If existing modules are installed, we keep them selected
1347    ;     3) If it is an upgrade, we set the text accordingly, else we mark it as a re-install
1348    ;  TODO: Downgrade?
1349    Call IsAnyAFSInstalled
1350    Pop $R0
1351    StrCmp $R0 "0" DefaultOptions
1352    
1353    Call ShouldClientInstall
1354    Pop $R2
1355    
1356    ; Check if it was an IBM/Transarc version
1357    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" "DisplayName"
1358    StrCmp $R0 "IBM AFS Client" DoIBM
1359    StrCmp $R0 "Transarc AFS Client" DoIBM
1360 NotIBM:
1361    StrCpy $R9 ""
1362    StrCmp $R2 "0" NoClient
1363    StrCmp $R2 "1" ReinstallClient
1364    StrCmp $R2 "2" UpgradeClient
1365    StrCmp $R2 "3" DowngradeClient
1366    goto Continue
1367 DoIBM:
1368    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\AFS Client\CurrentVersion" "MajorVersion"
1369    StrCmp $R0 "3" +1 NotIBM
1370    StrCpy $R9 "IBM"
1371    goto UpgradeClient
1372
1373 Continue:
1374         SectionGetFlags ${secClient} $0
1375         IntOp $0 $0 | ${SF_SELECTED}
1376         SectionSetFlags ${secClient} $0
1377     ;# !insertmacro SelectSection ${secClient}
1378    goto skipClient
1379 NoClient:
1380         ;StrCpy $1 ${secClient} ; Gotta remember which section we are at now...
1381         SectionGetFlags ${secClient} $0
1382         IntOp $0 $0 & ${SECTION_OFF}
1383         SectionSetFlags ${secClient} $0
1384    goto skipClient
1385 UpgradeClient:
1386         SectionGetFlags ${secClient} $0
1387         IntOp $0 $0 | ${SF_SELECTED}
1388         SectionSetFlags ${secClient} $0
1389    SectionSetText ${secClient} $(UPGRADE_CLIENT)
1390    goto skipClient
1391 ReinstallClient:
1392         SectionGetFlags ${secClient} $0
1393         IntOp $0 $0 | ${SF_SELECTED}
1394         SectionSetFlags ${secClient} $0
1395    SectionSetText ${secClient} $(REINSTALL_CLIENT)
1396    goto skipClient
1397 DowngradeClient:
1398         SectionGetFlags ${secClient} $0
1399         IntOp $0 $0 | ${SF_SELECTED}
1400         SectionSetFlags ${secClient} $0
1401    SectionSetText ${secClient} $(REINSTALL_CLIENT)
1402    goto skipClient
1403
1404    
1405 skipClient:   
1406    
1407    Call ShouldServerInstall
1408    Pop $R2
1409    StrCmp $R2 "0" NoServer
1410    StrCmp $R2 "1" ReinstallServer
1411    StrCmp $R2 "2" UpgradeServer
1412    StrCmp $R2 "3" DowngradeServer
1413    
1414         SectionGetFlags ${secServer} $0
1415         IntOp $0 $0 | ${SF_SELECTED}
1416         SectionSetFlags ${secServer} $0
1417         ;# !insertmacro UnselectSection ${secServer}
1418    goto skipServer
1419
1420 UpgradeServer:
1421    SectionGetFlags ${secServer} $0
1422    IntOp $0 $0 | ${SF_SELECTED}
1423    SectionSetFlags ${secServer} $0
1424    SectionSetText ${secServer} $(UPGRADE_SERVER)
1425    goto skipServer
1426
1427 ReinstallServer:
1428    SectionGetFlags ${secServer} $0
1429    IntOp $0 $0 | ${SF_SELECTED}
1430    SectionSetFlags ${secServer} $0
1431    SectionSetText ${secServer} $(REINSTALL_SERVER)
1432    goto skipServer
1433
1434 DowngradeServer:
1435    SectionGetFlags ${secServer} $0
1436    IntOp $0 $0 | ${SF_SELECTED}
1437    SectionSetFlags ${secServer} $0
1438    SectionSetText ${secServer} $(REINSTALL_SERVER)
1439    goto skipServer
1440    
1441 NoServer:
1442         SectionGetFlags ${secServer} $0
1443         IntOp $0 $0 & ${SECTION_OFF}
1444         SectionSetFlags ${secServer} $0
1445         ;# !insertmacro UnselectSection ${secServer}
1446    goto skipServer
1447    
1448 skipServer:
1449    ; Check control center
1450    Call IsControlInstalled
1451    Pop $R2
1452    StrCmp $R2 "0" NoControl
1453
1454         SectionGetFlags ${secControl} $0
1455         IntOp $0 $0 | ${SF_SELECTED}
1456         SectionSetFlags ${secControl} $0
1457    goto CheckDocs
1458    
1459 NoControl:   
1460         SectionGetFlags ${secControl} $0
1461         IntOp $0 $0 & ${SECTION_OFF}
1462         SectionSetFlags ${secControl} $0
1463         ;# !insertmacro UnselectSection ${secControl}
1464
1465 CheckDocs:
1466    ; Check Documentation
1467    Call IsDocumentationInstalled
1468    Pop $R2
1469    StrCmp $R2 "0" NoDocs
1470         SectionGetFlags ${secDocs} $0
1471         IntOp $0 $0 | ${SF_SELECTED}
1472         SectionSetFlags ${secDocs} $0
1473    goto CheckSDK
1474    
1475 NoDocs:
1476         SectionGetFlags ${secDocs} $0
1477         IntOp $0 $0 & ${SECTION_OFF}
1478         SectionSetFlags ${secDocs} $0
1479    goto CheckSDK
1480    
1481 ; To check the SDK, we simply look to see if the files exist.  If they do,
1482 ; the SDK is installed.  If not, we don't need to push it on the user.
1483 ; If they are there, we want to make sure they match the installed version.
1484 CheckSDK:
1485    IfFileExists "$INSTDIR\Client\Program\Include\main.h" +1 NoSDK
1486    SectionGetFlags ${secSDK} $0
1487    IntOp $0 $0 | ${SF_SELECTED}
1488    SectionSetFlags ${secSDK} $0
1489    goto end
1490    
1491 NoSDK:
1492    SectionGetFlags ${secSDK} $0
1493    IntOp $0 $0 & ${SECTION_OFF}
1494    SectionSetFlags ${secSDK} $0
1495    goto end
1496    
1497 DefaultOptions:
1498    ; Client Selected
1499         SectionGetFlags ${secClient} $0
1500         IntOp $0 $0 | ${SF_SELECTED}
1501         SectionSetFlags ${secClient} $0
1502
1503    ; Server NOT selected
1504         SectionGetFlags ${secServer} $0
1505         IntOp $0 $0 & ${SECTION_OFF}
1506         SectionSetFlags ${secServer} $0
1507    
1508    ; Control Center NOT selected
1509         SectionGetFlags ${secControl} $0
1510         IntOp $0 $0 & ${SECTION_OFF}
1511         SectionSetFlags ${secControl} $0
1512         ;# !insertmacro UnselectSection ${secControl}
1513
1514    ; Documentation selected
1515         SectionGetFlags ${secDocs} $0
1516         IntOp $0 $0 | ${SF_SELECTED}
1517         SectionSetFlags ${secDocs} $0
1518         ;# !insertmacro UnselectSection ${secDocs}
1519    
1520    ; SDK not selected
1521    SectionGetFlags ${secSDK} $0
1522    IntOp $0 $0 & ${SECTION_OFF}
1523    SectionSetFlags ${secSDK} $0
1524    ;# !insertmacro UnselectSection ${secSDK}
1525    
1526    goto end
1527
1528 end:
1529         Pop $0
1530   
1531    Push $R0
1532   
1533   ; See if we can set a default installation path...
1534   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "PathName"
1535   StrCmp $R0 "" TryServer
1536   Push $R0
1537   Call GetParent
1538   
1539   ; Work around bug in 1.3.5000, 1.3.5100, 1.3.5200, 1.3.5201, 1.3.5299 installers...
1540   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "MajorVersion"
1541   StrCmp $R0 "1" +1 SkipParent
1542   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "MinorVersion"
1543   StrCmp $R0 "3" +1 SkipParent
1544   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion" "PatchLevel"
1545   StrCmp $R0 "5000" UpParent
1546   StrCmp $R0 "5100" UpParent
1547   StrCmp $R0 "5200" UpParent
1548   StrCmp $R0 "5201" UpParent
1549   StrCmp $R0 "5299" UpParent
1550   goto SkipParent
1551   
1552 UpParent:
1553    Call GetParent
1554   
1555 SkipParent:
1556   Pop $R0
1557   StrCpy $INSTDIR $R0
1558   goto Nope
1559   
1560 TryServer:
1561   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion" "PathName"
1562   StrCmp $R0 "" TryControl
1563   Push $R0
1564   Call GetParent
1565   Pop $R0
1566   StrCpy $INSTDIR $R0
1567   goto Nope
1568    
1569 TryControl:
1570   ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion" "PathName"
1571   StrCmp $R0 "" Nope
1572   StrCpy $INSTDIR $R0
1573   
1574 Nope:
1575   Pop $R0
1576   
1577   GetTempFilename $0
1578   File /oname=$0 CellServPage.ini
1579   GetTempFilename $1
1580   File /oname=$1 AFSCell.ini
1581   GetTempFilename $2
1582   File /oname=$2 AFSCreds.ini
1583   ;File /oname=$1 ConfigURL.ini
1584   
1585 FunctionEnd
1586
1587
1588
1589
1590
1591 ;--------------------------------
1592 ; These are our cleanup functions
1593 Function .onInstFailed
1594 Delete $0
1595 Delete $1
1596 FunctionEnd
1597
1598 Function .onInstSuccess
1599 Delete $0
1600 Delete $1
1601 FunctionEnd
1602
1603
1604 ;--------------------------------
1605 ;Descriptions
1606
1607   !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
1608   !insertmacro MUI_DESCRIPTION_TEXT ${secServer} $(DESC_secServer)
1609   !insertmacro MUI_DESCRIPTION_TEXT ${secClient} $(DESC_secClient)
1610   !insertmacro MUI_DESCRIPTION_TEXT ${secControl} $(DESC_secControl)
1611   !insertmacro MUI_DESCRIPTION_TEXT ${secDocs} $(DESC_secDocs)
1612   !insertmacro MUI_DESCRIPTION_TEXT ${secSDK} $(DESC_secSDK)
1613   !insertmacro MUI_DESCRIPTION_TEXT ${secLoopback} $(DESC_secLoopback)
1614   !insertmacro MUI_DESCRIPTION_TEXT ${secDebug} $(DESC_secDebug)
1615   !insertmacro MUI_FUNCTION_DESCRIPTION_END
1616  
1617 ;--------------------------------
1618 ;Uninstaller Section
1619
1620 Section "Uninstall"
1621   ; Make sure the user REALLY wants to do this, unless they did a silent uninstall, in which case...let them!
1622   IfSilent StartRemove     ; New in v2.0b4
1623   MessageBox MB_YESNO "Are you sure you want to remove OpenAFS from this machine?" IDYES StartRemove
1624   abort
1625   
1626 StartRemove:
1627   
1628   SetShellVarContext all
1629   ; Stop the running processes
1630   GetTempFileName $R0
1631   File /oname=$R0 "${AFS_WININSTALL_DIR}\Killer.exe"
1632   nsExec::Exec '$R0 afscreds.exe'
1633   Exec "afscreds.exe -z"
1634   ; in case we are upgrading an old version that does not support -z
1635   Sleep 2000
1636   nsExec::Exec '$R0 afscreds.exe'
1637 !IFDEF INSTALL_KFW
1638   nsExec::Exec '$R0 krbcc32s.exe'
1639 !ENDIF
1640
1641   ; Delete the AFS service
1642   GetTempFileName $R0
1643   File /oname=$R0 "${AFS_WININSTALL_DIR}\Service.exe"
1644   nsExec::Exec "net stop TransarcAFSDaemon"
1645   nsExec::Exec "net stop TransarcAFSServer"
1646   nsExec::Exec '$R0 u TransarcAFSDaemon'
1647   ; After we stop the service, but before we delete it, we have to remove the volume data
1648   ; This is because the storage locations are in the registry under the service key.
1649   ; Call un.RemoveAFSVolumes
1650   nsExec::Exec '$R0 u TransarcAFSServer'
1651   Delete $R0
1652   
1653   Call un.RemoveProvider
1654
1655   Push "$INSTDIR\Client\Program"
1656   Call un.RemoveFromPath
1657   Push "$INSTDIR\Common"
1658   Call un.RemoveFromPath
1659 !ifdef INSTALL_KFW
1660   Push "$INSTDIR\kfw\bin"
1661   Call un.RemoveFromPath
1662 !endif
1663   
1664   ; Delete documentation
1665   Delete "$INSTDIR\Documentation\README.TXT"
1666   Delete "$INSTDIR\Documentation\html\*"
1667   Delete "$INSTDIR\Documentation\html\CmdRef\*"
1668   Delete "$INSTDIR\Documentation\html\InstallGd\*"
1669   Delete "$INSTDIR\Documentation\html\ReleaseNotes\*"
1670   Delete "$INSTDIR\Documentation\html\SysAdminGd\*"
1671
1672    Delete /REBOOTOK "$INSTDIR\Common\afs_config.exe"
1673    Delete /REBOOTOK "$INSTDIR\Common\afs_shl_ext.dll"
1674    Delete /REBOOTOK "$INSTDIR\Common\afsadminutil.dll"
1675    Delete /REBOOTOK "$INSTDIR\Common\lib\afsauthent.dll"
1676    Delete /REBOOTOK "$INSTDIR\Common\lib\afspthread.dll"
1677    Delete /REBOOTOK "$INSTDIR\Common\lib\afsrpc.dll"
1678    Delete /REBOOTOK "$INSTDIR\Common\afsclientadmin.dll"
1679    Delete /REBOOTOK "$INSTDIR\Common\afsprocmgmt.dll"
1680    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.dll"
1681    Delete /REBOOTOK "$INSTDIR\Common\TaAfsAppLib.dll"
1682    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.dll"
1683    Delete /REBOOTOK "$INSTDIR\Common\afsbosadmin.dll"
1684    Delete /REBOOTOK "$INSTDIR\Common\afscfgadmin.dll"
1685    Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.dll"
1686    Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.dll"
1687
1688    Delete /REBOOTOK "$INSTDIR\Common\afs_config.pdb"
1689    Delete /REBOOTOK "$INSTDIR\Common\afs_shl_ext.pdb"
1690    Delete /REBOOTOK "$INSTDIR\Common\afsadminutil.pdb"
1691    Delete /REBOOTOK "$INSTDIR\Common\lib\afsauthent.pdb"
1692    Delete /REBOOTOK "$INSTDIR\Common\lib\afspthread.pdb"
1693    Delete /REBOOTOK "$INSTDIR\Common\lib\afsrpc.pdb"
1694    Delete /REBOOTOK "$INSTDIR\Common\afsclientadmin.pdb"
1695    Delete /REBOOTOK "$INSTDIR\Common\afsprocmgmt.pdb"
1696    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.pdb"
1697    Delete /REBOOTOK "$INSTDIR\Common\TaAfsAppLib.pdb"
1698    Delete /REBOOTOK "$INSTDIR\Common\afsvosadmin.pdb"
1699    Delete /REBOOTOK "$INSTDIR\Common\afsbosadmin.pdb"
1700    Delete /REBOOTOK "$INSTDIR\Common\afscfgadmin.pdb"
1701    Delete /REBOOTOK "$INSTDIR\Common\afskasadmin.pdb"
1702    Delete /REBOOTOK "$INSTDIR\Common\afsptsadmin.pdb"
1703
1704 !IFDEF CL_1310
1705    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.dll"
1706    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.pdb"
1707    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.dll"
1708    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.pdb"
1709    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.dll"
1710    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.pdb"
1711 !ELSE
1712 !IFDEF CL_1300
1713    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.dll"
1714    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.pdb"
1715    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.dll"
1716    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.pdb"
1717    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.dll"
1718    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.pdb"
1719 !ELSE
1720    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.dll"
1721    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.pdb"
1722    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.dll"
1723    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.pdb"
1724    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
1725    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
1726 !ENDIF
1727 !ELSE
1728 !IFDEF CL_1310
1729    Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
1730    Delete /REBOOTOK "$INSTDIR\bin\msvcr71.dll"
1731    Delete /REBOOTOK "$INSTDIR\bin\msvcp71.dll"
1732    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHS.DLL"
1733    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHT.DLL"
1734    Delete /REBOOTOK "$INSTDIR\bin\MFC71DEU.DLL"
1735    Delete /REBOOTOK "$INSTDIR\bin\MFC71ENU.DLL"
1736    Delete /REBOOTOK "$INSTDIR\bin\MFC71ESP.DLL"
1737    Delete /REBOOTOK "$INSTDIR\bin\MFC71FRA.DLL"
1738    Delete /REBOOTOK "$INSTDIR\bin\MFC71ITA.DLL"
1739    Delete /REBOOTOK "$INSTDIR\bin\MFC71JPN.DLL"
1740    Delete /REBOOTOK "$INSTDIR\bin\MFC71KOR.DLL"
1741 !ELSE
1742 !IFDEF CL_1300
1743    Delete /REBOOTOK "$INSTDIR\bin\mfc70.dll"
1744    Delete /REBOOTOK "$INSTDIR\bin\msvcr70.dll"
1745    Delete /REBOOTOK "$INSTDIR\bin\msvcp70.dll"
1746    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHS.DLL"
1747    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHT.DLL"
1748    Delete /REBOOTOK "$INSTDIR\bin\MFC70DEU.DLL"
1749    Delete /REBOOTOK "$INSTDIR\bin\MFC70ENU.DLL"
1750    Delete /REBOOTOK "$INSTDIR\bin\MFC70ESP.DLL"
1751    Delete /REBOOTOK "$INSTDIR\bin\MFC70FRA.DLL"
1752    Delete /REBOOTOK "$INSTDIR\bin\MFC70ITA.DLL"
1753    Delete /REBOOTOK "$INSTDIR\bin\MFC70JPN.DLL"
1754    Delete /REBOOTOK "$INSTDIR\bin\MFC70KOR.DLL"
1755 !ELSE
1756    Delete /REBOOTOK "$INSTDIR\bin\mfc42.dll"
1757    Delete /REBOOTOK "$INSTDIR\bin\msvcp60.dll"
1758    Delete /REBOOTOK "$INSTDIR\bin\msvcrt.dll"
1759 !ENDIF
1760 !ENDIF
1761 !ENDIF
1762   
1763    IfSilent SkipDel
1764 ;  IfFileExists "$WINDIR\afsdcell.ini" CellExists SkipDelAsk
1765 ;  CellExists:
1766   MessageBox MB_YESNO "Would you like to keep your configuration files?" IDYES SkipDel
1767   Delete "$WINDIR\afsdcell.ini"
1768
1769   Delete "$WINDIR\afsdsbmt.ini"
1770 ; Only remove krb5.ini if KfW was installed
1771 !IFDEF INSTALL_KFW
1772   Delete "$WINDIR\krb5.ini"
1773 !ENDIF
1774   Delete "$WINDIR\afsdns.ini"
1775   Delete "$WINDIR\afs_freelance.ini"
1776   
1777   SkipDel:
1778   Delete "$WINDIR\afsd_init.log"
1779   Delete "$INSTDIR\Uninstall.exe"
1780
1781   ; Remove server
1782   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afskill.exe"
1783   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afssvrcfg.exe"
1784   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosctlsvc.exe"
1785   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosserver.exe"
1786   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\buserver.exe"
1787   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\butc.exe"
1788   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fileserver.exe"
1789   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fms.exe"
1790   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\kaserver.exe"
1791   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\ptserver.exe"
1792   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\salvager.exe"
1793   Delete "$INSTDIR\Server\usr\afs\bin\ServerUninst.dll"
1794   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\upclient.exe"
1795   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\upserver.exe"
1796   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\vlserver.exe"
1797   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volinfo.exe"
1798   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\volserver.exe"
1799
1800   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afskill.pdb"
1801   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\afssvrcfg.pdb"
1802   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosctlsvc.pdb"
1803   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\bosserver.pdb"
1804   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\buserver.pdb"
1805   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\butc.pdb"
1806   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fileserver.pdb"
1807   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\fms.pdb"
1808   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\kaserver.pdb"
1809   Delete /REBOOTOK "$INSTDIR\Server\usr\afs\bin\ptserver.pdb"
1810   Delete "$INSTDIR\Server\usr\afs\bin\salvager.pdb"
1811   Delete "$INSTDIR\Server\usr\afs\bin\ServerUninst.pdb"
1812   Delete "$INSTDIR\Server\usr\afs\bin\upclient.pdb"
1813   Delete "$INSTDIR\Server\usr\afs\bin\upserver.pdb"
1814   Delete "$INSTDIR\Server\usr\afs\bin\vlserver.pdb"
1815   Delete "$INSTDIR\Server\usr\afs\bin\volinfo.pdb"
1816   Delete "$INSTDIR\Server\usr\afs\bin\volserver.pdb"
1817
1818   RMDir /r "$INSTDIR\Server\usr\afs\bin"
1819   ; do not delete the server configuration files
1820   ; or we will lose the volumes and authentication
1821   ; databases
1822   ;RmDir /r "$INSTDIR\Server\usr\afs\etc\logs"
1823   ;RmDir /r "$INSTDIR\Server\usr\afs\etc"
1824   ;RmDir /r "$INSTDIR\Server\usr\afs\local"
1825   ;RMDIR /r "$INSTDIR\Server\usr\afs\logs"
1826   
1827   Delete /REBOOTOK "$SYSDIR\afsserver.cpl"
1828   Delete /REBOOTOK "$SYSDIR\afs_cpa.cpl"
1829
1830   Delete /REBOOTOK "$SYSDIR\afsserver.pdb"
1831   Delete /REBOOTOK "$SYSDIR\afs_cpa.pdb"
1832   
1833   RMDir /r "$INSTDIR\Documentation\html\CmdRef"
1834   RMDir /r "$INSTDIR\Documentation\html\InstallGd"
1835   RMDir /r "$INSTDIR\Documentation\html\ReleaseNotes"
1836   RMDir /r "$INSTDIR\Documentation\html\SysAdminGd"
1837   RMDIr /r "$INSTDIR\Documentation\html"
1838   
1839   RMDir "$INSTDIR\Documentation"
1840   ; Delete DOC short cut
1841   Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.exe"
1842
1843   Delete /REBOOTOK "$INSTDIR\Client\Program\afscreds.pdb"
1844
1845   Delete /REBOOTOK "$INSTDIR\Client\Program\*"
1846   Delete /REBOOTOK "$INSTDIR\Client\Program\Include\*"
1847   Delete /REBOOTOK "$INSTDIR\Client\Program\Include\afs\*"
1848   Delete /REBOOTOK "$INSTDIR\Client\Program\Include\rx\*"
1849   Delete /REBOOTOK "$INSTDIR\Client\Program\Sample\*"
1850   RMDir  "$INSTDIR\Client\Program\Sample"
1851   RMDir  "$INSTDIR\Client\Program\Include\afs"
1852   RMDir  "$INSTDIR\Client\Program\Include\rx"
1853   RMDir  "$INSTDIR\Client\Program\Include"
1854   RMDir  "$INSTDIR\Client\Program"
1855   RMDir  "$INSTDIR\Client"
1856
1857 !IFDEF DEBUG  
1858 !IFDEF CL_1310
1859    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.dll"
1860    Delete /REBOOTOK "$INSTDIR\bin\msvcr71d.pdb"
1861    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.dll"
1862    Delete /REBOOTOK "$INSTDIR\bin\msvcp71d.pdb"
1863    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.dll"
1864    Delete /REBOOTOK "$INSTDIR\bin\mfc71d.pdb"
1865 !ELSE
1866 !IFDEF CL_1300
1867    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.dll"
1868    Delete /REBOOTOK "$INSTDIR\bin\msvcr70d.pdb"
1869    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.dll"
1870    Delete /REBOOTOK "$INSTDIR\bin\msvcp70d.pdb"
1871    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.dll"
1872    Delete /REBOOTOK "$INSTDIR\bin\mfc70d.pdb"
1873 !ELSE
1874    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.dll"
1875    Delete /REBOOTOK "$INSTDIR\bin\mfc42d.pdb"
1876    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.dll"
1877    Delete /REBOOTOK "$INSTDIR\bin\msvcp60d.pdb"
1878    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.dll"
1879    Delete /REBOOTOK "$INSTDIR\bin\msvcrtd.pdb"
1880 !ENDIF
1881 !ENDIF
1882 !ELSE
1883 !IFDEF CL_1310
1884    Delete /REBOOTOK "$INSTDIR\bin\mfc71.dll"
1885    Delete /REBOOTOK "$INSTDIR\bin\msvcr71.dll"
1886    Delete /REBOOTOK "$INSTDIR\bin\msvcp71.dll"
1887    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHS.DLL"
1888    Delete /REBOOTOK "$INSTDIR\bin\MFC71CHT.DLL"
1889    Delete /REBOOTOK "$INSTDIR\bin\MFC71DEU.DLL"
1890    Delete /REBOOTOK "$INSTDIR\bin\MFC71ENU.DLL"
1891    Delete /REBOOTOK "$INSTDIR\bin\MFC71ESP.DLL"
1892    Delete /REBOOTOK "$INSTDIR\bin\MFC71FRA.DLL"
1893    Delete /REBOOTOK "$INSTDIR\bin\MFC71ITA.DLL"
1894    Delete /REBOOTOK "$INSTDIR\bin\MFC71JPN.DLL"
1895    Delete /REBOOTOK "$INSTDIR\bin\MFC71KOR.DLL"
1896 !ELSE
1897 !IFDEF CL_1300
1898    Delete /REBOOTOK "$INSTDIR\bin\mfc70.dll"
1899    Delete /REBOOTOK "$INSTDIR\bin\msvcr70.dll"
1900    Delete /REBOOTOK "$INSTDIR\bin\msvcp70.dll"
1901    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHS.DLL"
1902    Delete /REBOOTOK "$INSTDIR\bin\MFC70CHT.DLL"
1903    Delete /REBOOTOK "$INSTDIR\bin\MFC70DEU.DLL"
1904    Delete /REBOOTOK "$INSTDIR\bin\MFC70ENU.DLL"
1905    Delete /REBOOTOK "$INSTDIR\bin\MFC70ESP.DLL"
1906    Delete /REBOOTOK "$INSTDIR\bin\MFC70FRA.DLL"
1907    Delete /REBOOTOK "$INSTDIR\bin\MFC70ITA.DLL"
1908    Delete /REBOOTOK "$INSTDIR\bin\MFC70JPN.DLL"
1909    Delete /REBOOTOK "$INSTDIR\bin\MFC70KOR.DLL"
1910 !ELSE
1911    Delete /REBOOTOK "$INSTDIR\bin\mfc42.dll"
1912    Delete /REBOOTOK "$INSTDIR\bin\msvcp60.dll"
1913    Delete /REBOOTOK "$INSTDIR\bin\msvcrt.dll"
1914 !ENDIF
1915 !ENDIF
1916 !ENDIF
1917
1918   Delete /REBOOTOK "$INSTDIR\Common\*"
1919   RMDir "$INSTDIR\Common"
1920
1921 !ifdef INSTALL_KFW
1922   ;Remove KfW files
1923   Delete /REBOOTOK "$INSTDIR\kfw\bin\*"
1924   RMDIR  /r "$INSTDIR\kfw\bin"
1925   Delete /REBOOTOK "$INSTDIR\kfw\doc\*"
1926   RMDIR  /r "$INSTDIR\kfw\doc"
1927   RMDIR  /r "$INSTDIR\kfw"
1928 !endif
1929
1930   Delete "$SMPROGRAMS\OpenAFS\Documentation.lnk"
1931
1932   ; Remove control center
1933   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAccountManager.exe"
1934   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.exe"
1935   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.exe"
1936   Delete /REBOOTOK "$INSTDIR\Control Center\CCUninst.dll"
1937   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAccountManager.pdb"
1938   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsAdmSvr.pdb"
1939   Delete /REBOOTOK "$INSTDIR\Control Center\TaAfsServerManager.pdb"
1940   RMDir  "$INSTDIR\Control Center"
1941   
1942   Delete "$SMPROGRAMS\OpenAFS\Uninstall OpenAFS.lnk"
1943   Delete "$SMPROGRAMS\OpenAFS\Client\Authentication.lnk"
1944   Delete "$SMPROGRAMS\OpenAFS\Control Center\Account Manager.lnk"
1945   Delete "$SMPROGRAMS\OpenAFS\Control Center\Server Manager.lnk"
1946   RMDIR "$SMPROGRAMS\OpenAFS\Control Center"
1947   RMDir /r "$SMPROGRAMS\OpenAFS\Client"
1948   RMDir /r "$SMPROGRAMS\OpenAFS"
1949   Delete "$SMSTARTUP\AFS Credentials.lnk"
1950   
1951   ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon" "CachePath"
1952   IfErrors +2
1953   Delete "$R0\AFSCache"
1954   Delete "C:\AFSCache"
1955
1956   DeleteRegKey HKCR "*\shellex\ContextMenuHandlers\AFS Client Shell Extension"
1957   DeleteRegKey HKCR "CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}\InprocServer32"
1958   DeleteRegKey HKCR "CLSID\{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}"
1959   DeleteRegKey HKCR "FOLDER\shellex\ContextMenuHandlers\AFS Client Shell Extension"
1960   DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved" "{DC515C27-6CAC-11D1-BAE7-00C04FD140D2}"
1961
1962   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Client\CurrentVersion"
1963   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Client"
1964   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation\CurrentVersion"
1965   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Supplemental Documentation"
1966   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Control Center\CurrentVersion"
1967   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Control Center"
1968   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Server\CurrentVersion"
1969   DeleteRegKey HKLM "${AFS_REGKEY_ROOT}\AFS Server"
1970   DeleteRegKey /ifempty HKLM "${AFS_REGKEY_ROOT}"
1971   DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS"
1972   DeleteRegValue HKLM "SYSTEM\CurrentControlSet\Services\NetBT\Parameters" "SmbDeviceEnabled"
1973  
1974   RMDir  "$INSTDIR"
1975
1976 SectionEnd
1977
1978 ;--------------------------------
1979 ;Uninstaller Functions
1980
1981 Function un.onInit
1982
1983   ;Get language from registry
1984   ReadRegStr $LANGUAGE HKCU "Software\OpenAFS\AFS" "Installer Language"
1985
1986 FunctionEnd
1987
1988 Function un.onUninstSuccess
1989
1990   IfSilent SkipAsk
1991   MessageBox MB_OK "Please reboot your machine to complete uninstallation of the software"
1992   SkipAsk:
1993
1994 FunctionEnd
1995
1996 ;------------------------------
1997 ; Get the CellServDB file from the Internet
1998
1999 Function afs.GetCellServDB
2000
2001 ;Check if we should download CellServDB
2002 ReadINIStr $R0 $0 "Field 4" "State"
2003 StrCmp $R0 "1" DoDownload
2004
2005 ;Do nothing if we're keeping the existing file
2006 ReadINIStr $R0 $0 "Field 2" "State"
2007 StrCmp $R0 "1" done
2008
2009 ReadINIStr $R0 $0 "Field 6" "State"
2010 StrCmp $R0 "1" CheckOther
2011
2012 ReadINIStr $R0 $0 "Field 3" "State"
2013 StrCmp $R0 "1" UsePackaged
2014
2015 ; If none of these, grab file from other location
2016 goto UsePackaged
2017
2018 DoDownload:
2019    ReadINIStr $R0 $0 "Field 5" "State"
2020    NSISdl::download $R0 "$WINDIR\afsdcell.ini"
2021    Pop $R0 ;Get the return value
2022    StrCmp $R0 "success" +2
2023       MessageBox MB_OK|MB_ICONSTOP "Download failed: $R0"
2024    goto done
2025
2026 UsePackaged:
2027    SetOutPath "$WINDIR"
2028    File "afsdcell.ini"
2029    goto done
2030    
2031 CheckOther:
2032    ReadINIStr $R0 $0 "Field 7" "State"
2033    StrCmp $R0 "" done
2034    CopyFiles $R0 "$WINDIR\afsdcell.ini"
2035    
2036 done:
2037
2038 FunctionEnd
2039
2040 Function AddProvider
2041    Push $R0
2042    Push $R1
2043    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder" "ProviderOrder"
2044    Push $R0
2045    StrCpy $R0 "TransarcAFSDaemon"
2046    Push $R0
2047    Call StrStr
2048    Pop $R0
2049    StrCmp $R0 "" +1 DoOther
2050    ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder" "ProviderOrder"   
2051    StrCpy $R0 "$R1,TransarcAFSDaemon"
2052    WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder" "ProviderOrder" $R0
2053 DoOther:
2054    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" "ProviderOrder"
2055    Push $R0
2056    StrCpy $R0 "TransarcAFSDaemon"
2057    Push $R0
2058    Call StrStr
2059    Pop $R0
2060    StrCmp $R0 "" +1 End
2061    ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" "ProviderOrder"   
2062    StrCpy $R0 "$R1,TransarcAFSDaemon"
2063    WriteRegStr HKLM "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order" "ProviderOrder" $R0   
2064 End:
2065    Pop $R1
2066    Pop $R0
2067 FunctionEnd
2068
2069 Function un.RemoveProvider
2070    Push $R0
2071    StrCpy $R0 "TransarcAFSDaemon"
2072    Push $R0
2073    StrCpy $R0 "SYSTEM\CurrentControlSet\Control\NetworkProvider\HWOrder"
2074    Call un.RemoveFromProvider
2075    StrCpy $R0 "TransarcAFSDaemon"
2076    Push $R0
2077    StrCpy $R0 "SYSTEM\CurrentControlSet\Control\NetworkProvider\Order"
2078    Call un.RemoveFromProvider
2079    Pop $R0
2080 FunctionEnd
2081
2082 Function un.RemoveFromProvider
2083   Exch $0
2084   Push $1
2085   Push $2
2086   Push $3
2087   Push $4
2088   Push $5
2089   Push $6
2090
2091   ReadRegStr $1 HKLM "$R0" "ProviderOrder"
2092     StrCpy $5 $1 1 -1 # copy last char
2093     StrCmp $5 "," +2 # if last char != ,
2094       StrCpy $1 "$1," # append ,
2095     Push $1
2096     Push "$0,"
2097     Call un.StrStr ; Find `$0,` in $1
2098     Pop $2 ; pos of our dir
2099     StrCmp $2 "" unRemoveFromPath_done
2100       ; else, it is in path
2101       # $0 - path to add
2102       # $1 - path var
2103       StrLen $3 "$0,"
2104       StrLen $4 $2
2105       StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
2106       StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
2107       StrCpy $3 $5$6
2108
2109       StrCpy $5 $3 1 -1 # copy last char
2110       StrCmp $5 "," 0 +2 # if last char == ,
2111         StrCpy $3 $3 -1 # remove last char
2112
2113       WriteRegStr HKLM "$R0" "ProviderOrder" $3
2114       
2115   unRemoveFromPath_done:
2116     Pop $6
2117     Pop $5
2118     Pop $4
2119     Pop $3
2120     Pop $2
2121     Pop $1
2122     Pop $0
2123 FunctionEnd
2124
2125 Function CheckPathForAFS
2126    Push $0
2127    Push $1
2128    Push $2
2129    Push $3
2130    ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
2131    StrCpy $1 "$1;"
2132 loop:
2133    Push $1
2134    Push ";"
2135    Call StrStr
2136    Pop $0
2137    StrLen $2 $0
2138    StrCpy $3 $1 -$2
2139    IfFileExists "$3\afsd_service.exe" Error
2140    StrCpy $1 $0 32768 1
2141    StrLen $2 $1
2142    IntCmp $2 0 Done Done loop
2143    goto Done
2144 Error:
2145    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."
2146    Abort "Unable to install OpenAFS"
2147 Done:
2148    Pop $3
2149    Pop $2
2150    Pop $1
2151    Pop $0
2152 FunctionEnd
2153
2154 Function AddToUniquePath
2155    Pop $R0
2156    Push $R0
2157    Push "$R0;"
2158    ReadRegStr $R0 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
2159    Push "$R0;"
2160    Call StrStr
2161    Pop $R0
2162    StrCmp $R0 "" +1 Done
2163    Call AddToPath
2164 Done:
2165 FunctionEnd
2166
2167
2168 ;-------------------------------
2169 ;Do the page to get the CellServDB
2170
2171 Function AFSPageGetCellServDB
2172   ; Skip this page if we are not installing the client
2173   SectionGetFlags ${secClient} $R0
2174   IntOp $R0 $R0 & ${SF_SELECTED}
2175   StrCmp $R0 "0" Skip
2176   
2177   ; Set the install options here
2178   
2179 startOver:
2180   WriteINIStr $0 "Field 2" "Flags" "DISABLED"
2181   WriteINIStr $0 "Field 3" "State" "1"
2182   WriteINISTR $0 "Field 4" "State" "0"
2183   WriteINIStr $0 "Field 6" "State" "0"
2184   
2185   ; If there is an existing afsdcell.ini file, allow the user to choose it and make it default
2186   IfFileExists "$WINDIR\afsdcell.ini" +1 notpresent
2187   WriteINIStr $0 "Field 2" "Flags" "ENABLED"
2188   WriteINIStr $0 "Field 2" "State" "1"
2189   WriteINIStr $0 "Field 3" "State" "0"
2190   
2191   notpresent:
2192   
2193   !insertmacro MUI_HEADER_TEXT "CellServDB Configuration" "Please choose a method for installing the CellServDB file:" 
2194   InstallOptions::dialog $0
2195   Pop $R1
2196   StrCmp $R1 "cancel" exit
2197   StrCmp $R1 "back" done
2198   StrCmp $R1 "success" done
2199 exit: Quit
2200 done:
2201
2202    ; Check that if a file is set, a valid filename is entered...
2203    ReadINIStr $R0 $0 "Field 6" "State"
2204    StrCmp $R0 "1" CheckFileName
2205    
2206    ;Check if a URL is specified, one *IS* specified
2207    ReadINIStr $R0 $0 "Field 4" "State"
2208    StrCmp $R0 "1" CheckURL Skip
2209    
2210    CheckURL:
2211    ReadINIStr $R0 $0 "Field 5" "State"
2212    StrCmp $R0 "" +1 Skip
2213    MessageBox MB_OK|MB_ICONSTOP $(URLError)
2214    WriteINIStr $0 "Field 4" "State" "0"
2215    goto startOver
2216    
2217    CheckFileName:
2218    ReadINIStr $R0 $0 "Field 7" "State"
2219    IfFileExists $R0 Skip
2220
2221    MessageBox MB_OK|MB_ICONSTOP $(CellError)
2222    WriteINIStr $0 "Field 6" "State" "0"
2223    goto startOver
2224    
2225    Skip:
2226    
2227 FunctionEnd
2228
2229
2230 Function AFSPageGetCellName
2231    IfSilent good
2232   ; Skip this page if we are not installing the client
2233   SectionGetFlags ${secClient} $R0
2234   IntOp $R0 $R0 & ${SF_SELECTED}
2235   StrCmp $R0 "0" good
2236   
2237 startOver:
2238    ; If this is a server install, we do NOT want to recommend the Freelance client
2239    ; And we do not need to ask for the cell name.
2240    SectionGetFlags ${secServer} $R1
2241    IntOp $R1 $R1 & ${SF_SELECTED}
2242    StrCmp $R1 "1" +1 NotServer
2243    WriteINIStr $1 "Field 6" "Text" "Enable AFS Freelance client (Not Recommended for servers)"
2244    WriteINIStr $1 "Field 5" "State" "0"
2245    WriteINIStr $1 "Field 1" "Flags" "DISABLED"
2246    WriteINIStr $1 "Field 2" "Flags" "DISABLED"
2247    goto SkipServerTest
2248 NotServer:
2249    WriteINIStr $1 "Field 6" "Text" "Enable AFS Freelance client (Recommended)"
2250    WriteINIStr $1 "Field 5" "State" "1"
2251    WriteINIStr $1 "Field 1" "Flags" ""
2252    WriteINIStr $1 "Field 2" "Flags" ""
2253 SkipServerTest:
2254    ; Get the current cell name, if any
2255    ReadRegStr $R1 HKLM "SYSTEM\CurrentControlSet\Services\TransarcAFSDaemon\Parameters" "Cell"
2256    StrCmp $R1 "" +2
2257    WriteINIStr $1 "Field 2" "State" $R1
2258   !insertmacro MUI_HEADER_TEXT "Client Cell Name Configuration" "Please enter the name for your default cell:" 
2259   InstallOptions::dialog $1
2260   Pop $R1
2261   StrCmp $R1 "cancel" exit
2262   StrCmp $R1 "back" done
2263   StrCmp $R1 "success" done
2264 exit: Quit
2265 done:
2266    ReadINIStr $R0 $1 "Field 2" "State"
2267    StrCmp $R0 "" +1 good
2268    
2269    MessageBox MB_OK|MB_ICONSTOP $(CellNameError)
2270    goto startOver
2271 good:
2272 FunctionEnd
2273
2274
2275 ;---------------------------------------------------------
2276 ;Do the page to get the afscreds.exe startup configuration
2277
2278 Function AFSPageConfigAFSCreds
2279   ; Skip this page if we are not installing the client
2280   SectionGetFlags ${secClient} $R0
2281   IntOp $R0 $R0 & ${SF_SELECTED}
2282   StrCmp $R0 "0" done
2283   
2284   ; Set the install options here
2285   
2286   !insertmacro MUI_HEADER_TEXT "AFS Credentials Configuration" "Please choose default options for configuring the AFS Credentials program:" 
2287   InstallOptions::dialog $2
2288   Pop $R1
2289   StrCmp $R1 "cancel" exit
2290   StrCmp $R1 "back" done
2291   StrCmp $R1 "success" done
2292 exit: Quit
2293 done:
2294    
2295 FunctionEnd
2296
2297
2298 ;-------------
2299 ; Common install routines for each module
2300 Function AFSCommon.Install
2301
2302 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "DisplayName" "OpenAFS for Windows"
2303 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "UninstallString" "$INSTDIR\uninstall.exe"
2304 !ifndef DEBUG
2305 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "DisplayVersion" "${AFS_VERSION}"
2306 !else
2307 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "DisplayVersion" "${AFS_VERSION} Checked/Debug"
2308 !endif
2309 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenAFS" "URLInfoAbout" "http://www.openafs.org/"
2310
2311 FunctionEnd
2312
2313
2314 ;-------------------
2315 ; Get the currently installed version and place it on the stack
2316 ; Modifies: Nothing
2317 Function GetInstalledVersion
2318    Push $R0
2319    Push $R1
2320    Push $R4
2321    
2322    ReadRegStr $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "VersionString"
2323    StrCmp $R0 "" NotTransarc done
2324    
2325    
2326 NotTransarc:
2327    ReadRegStr $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "VersionString"
2328    StrCmp $R0 "" done
2329    
2330 done:
2331    Pop $R4
2332    Pop $R1
2333    Exch $R0
2334 FunctionEnd
2335
2336 ; Functions to get each component of the version number
2337 Function GetInstalledVersionMajor
2338    Push $R0
2339    Push $R1
2340    Push $R4
2341    
2342    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "MajorVersion"
2343    StrCmp $R0 "" NotTransarc done
2344    
2345    
2346 NotTransarc:
2347    ReadRegDWORD $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "MajorVersion"
2348    StrCmp $R0 "" done
2349    
2350 done:
2351    Pop $R4
2352    Pop $R1
2353    Exch $R0
2354 FunctionEnd
2355
2356 Function GetInstalledVersionMinor
2357    Push $R0
2358    Push $R1
2359    Push $R4
2360    
2361    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "MinorVersion"
2362    StrCmp $R0 "" NotTransarc done
2363    
2364    
2365 NotTransarc:
2366    ReadRegDWORD $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "MinorVersion"
2367    StrCmp $R0 "" done
2368    
2369 done:
2370    Pop $R4
2371    Pop $R1
2372    Exch $R0
2373 FunctionEnd
2374
2375 Function GetInstalledVersionPatch
2376    Push $R0
2377    Push $R1
2378    Push $R4
2379    
2380    ReadRegDWORD $R0 HKLM "Software\TransarcCorporation\$R2\CurrentVersion" "PatchLevel"
2381    StrCmp $R0 "" NotTransarc done
2382    
2383    
2384 NotTransarc:
2385    ReadRegDWORD $R0 HKLM "${AFS_REGKEY_ROOT}\$R2\CurrentVersion" "PatchLevel"
2386    StrCmp $R0 "" done
2387    
2388 done:
2389    Pop $R4
2390    Pop $R1
2391    Exch $R0
2392 FunctionEnd
2393
2394
2395
2396 ;-------------------------------
2397 ; Check if the client should be checked for default install
2398 Function ShouldClientInstall
2399    Push $R0
2400    StrCpy $R2 "AFS Client"
2401    Call GetInstalledVersion
2402    Pop $R0
2403    
2404    StrCmp $R0 "" NotInstalled
2405    ; Now we see if it's an older or newer version
2406    
2407    Call GetInstalledVersionMajor
2408    Pop $R0
2409    IntCmpU $R0 ${AFS_MAJORVERSION} +1 Upgrade Downgrade
2410
2411    Call GetInstalledVersionMinor
2412    Pop $R0
2413    IntCmpU $R0 ${AFS_MINORVERSION} +1 Upgrade Downgrade
2414    
2415    Call GetInstalledVersionPatch
2416    Pop $R0
2417    IntCmpU $R0 ${AFS_PATCHLEVEL} Reinstall Upgrade Downgrade
2418    
2419 Reinstall:
2420    StrCpy $R0 "1"
2421    Exch $R0
2422    goto end
2423    
2424 Upgrade:
2425    StrCpy $R0 "2"
2426    Exch $R0
2427    goto end
2428    
2429 Downgrade:
2430    StrCpy $R0 "3"
2431    Exch $R0
2432    goto end
2433    
2434 NotInstalled:
2435    StrCpy $R0 "0"
2436    Exch $R0
2437 end:   
2438 FunctionEnd
2439
2440 ;-------------------------------
2441 ; Check how the server options should be set
2442 Function ShouldServerInstall
2443    Push $R0
2444    StrCpy $R2 "AFS Server"
2445    Call GetInstalledVersion
2446    Pop $R0
2447    
2448    StrCmp $R0 "" NotInstalled
2449    ; Now we see if it's an older or newer version
2450
2451    Call GetInstalledVersionMajor
2452    Pop $R0
2453    IntCmpU $R0 ${AFS_MAJORVERSION} +1 Upgrade Downgrade
2454
2455    Call GetInstalledVersionMinor
2456    Pop $R0
2457    IntCmpU $R0 ${AFS_MINORVERSION} +1 Upgrade Downgrade
2458    
2459    Call GetInstalledVersionPatch
2460    Pop $R0
2461    IntCmpU $R0 ${AFS_PATCHLEVEL} Reinstall Upgrade Downgrade
2462    
2463 Reinstall:
2464    StrCpy $R0 "1"
2465    Exch $R0
2466    goto end
2467    
2468 Upgrade:
2469    StrCpy $R0 "2"
2470    Exch $R0
2471    goto end
2472    
2473 Downgrade:
2474    StrCpy $R0 "3"
2475    Exch $R0
2476    goto end
2477    
2478    
2479 NotInstalled:
2480    StrCpy $R0 "0"
2481    Exch $R0
2482 end:   
2483 FunctionEnd
2484
2485
2486 ; See if AFS Server is installed
2487 ; Returns: "1" if it is, 0 if it is not (on the stack)
2488 Function IsServerInstalled
2489    Push $R0
2490    StrCpy $R2 "AFS Server"
2491    Call GetInstalledVersion
2492    Pop $R0
2493    
2494    StrCmp $R0 "" NotInstalled
2495    
2496    StrCpy $R0 "1"
2497    Exch $R0
2498    goto end
2499    
2500 NotInstalled:
2501    StrCpy $R0 "0"
2502    Exch $R0
2503 end:   
2504 FunctionEnd
2505
2506
2507 ; See if AFS Client is installed
2508 ; Returns: "1" if it is, 0 if it is not (on the stack)
2509 Function IsClientInstalled
2510    Push $R0
2511    StrCpy $R2 "AFS Client"
2512    Call GetInstalledVersion
2513    Pop $R0
2514    
2515    StrCmp $R0 "" NotInstalled
2516    
2517    StrCpy $R0 "1"
2518    Exch $R0
2519    goto end
2520    
2521 NotInstalled:
2522    StrCpy $R0 "0"
2523    Exch $R0
2524 end:   
2525 FunctionEnd
2526
2527
2528
2529 ; See if AFS Documentation is installed
2530 ; Returns: "1" if it is, 0 if it is not (on the stack)
2531 Function IsDocumentationInstalled
2532    Push $R0
2533    StrCpy $R2 "AFS Supplemental Documentation"
2534    Call GetInstalledVersion
2535    Pop $R0
2536    
2537    StrCmp $R0 "" NotInstalled
2538    
2539    StrCpy $R0 "1"
2540    Exch $R0
2541    goto end
2542    
2543 NotInstalled:
2544    StrCpy $R0 "0"
2545    Exch $R0
2546 end:   
2547 FunctionEnd
2548
2549
2550 ; See if Control Center is installed
2551 ; Returns: "1" if it is, 0 if it is not (on the stack)
2552 Function IsControlInstalled
2553    Push $R0
2554    StrCpy $R2 "AFS Control Center"
2555    Call GetInstalledVersion
2556    Pop $R0
2557    
2558    StrCmp $R0 "" NotInstalled
2559    
2560    StrCpy $R0 "1"
2561    Exch $R0
2562    goto end
2563    
2564 NotInstalled:
2565    StrCpy $R0 "0"
2566    Exch $R0
2567 end:   
2568 FunctionEnd
2569
2570
2571 ; GetParameters
2572 ; input, none
2573 ; output, top of stack (replaces, with e.g. whatever)
2574 ; modifies no other variables.
2575
2576 Function GetParameters
2577   Push $R0
2578   Push $R1
2579   Push $R2
2580   StrCpy $R0 $CMDLINE 1
2581   StrCpy $R1 '"'
2582   StrCpy $R2 1
2583   StrCmp $R0 '"' loop
2584     StrCpy $R1 ' ' ; we're scanning for a space instead of a quote
2585   loop:
2586     StrCpy $R0 $CMDLINE 1 $R2
2587     StrCmp $R0 $R1 loop2
2588     StrCmp $R0 "" loop2
2589     IntOp $R2 $R2 + 1
2590     Goto loop
2591   loop2:
2592     IntOp $R2 $R2 + 1
2593     StrCpy $R0 $CMDLINE 1 $R2
2594     StrCmp $R0 " " loop2
2595   StrCpy $R0 $CMDLINE "" $R2
2596   Pop $R2
2597   Pop $R1
2598   Exch $R0
2599 FunctionEnd
2600
2601
2602 ;Check to see if any AFS component is installed
2603 ;Returns: Value on stack: "1" if it is, "0" if it is not
2604 Function IsAnyAFSInstalled
2605    Push $R0
2606    Push $R1
2607    Push $R2
2608    Push $R3
2609    Call IsClientInstalled
2610    Pop $R0
2611    Call IsServerInstalled
2612    Pop $R1
2613    Call IsControlInstalled
2614    Pop $R2
2615    Call IsDocumentationInstalled
2616    Pop $R3
2617    ; Now we must see if ANY of the $Rn values are 1
2618    StrCmp $R0 "1" SomethingInstalled
2619    StrCmp $R1 "1" SomethingInstalled
2620    StrCmp $R2 "1" SomethingInstalled
2621    StrCmp $R3 "1" SomethingInstalled
2622    ;Nothing installed
2623    StrCpy $R0 "0"
2624    goto end
2625 SomethingInstalled:
2626    StrCpy $R0 "1"
2627 end:
2628    Pop $R3
2629    Pop $R2
2630    Pop $R1
2631    Exch $R0
2632 FunctionEnd
2633
2634
2635 ;Install English Language Files
2636 Function AFSLangFiles
2637    ; Common files
2638    SetOutPath "$INSTDIR\Common"
2639    File "${AFS_CLIENT_BUILDDIR}\afs_config.exe"
2640    File "${AFS_SERVER_BUILDDIR}\afsadminutil.dll"
2641   !insertmacro ReplaceDLL "${AFS_DESTDIR}\lib\afsauthent.dll" "$INSTDIR\Common\afsauthent.dll" "$INSTDIR"
2642   !insertmacro ReplaceDLL "${AFS_DESTDIR}\lib\afspthread.dll" "$INSTDIR\Common\afspthread.dll" "$INSTDIR"
2643   !insertmacro ReplaceDLL "${AFS_DESTDIR}\lib\afsrpc.dll" "$INSTDIR\Common\afsrpc.dll" "$INSTDIR"
2644    File "${AFS_SERVER_BUILDDIR}\afsclientadmin.dll"
2645    File "${AFS_SERVER_BUILDDIR}\afsprocmgmt.dll"
2646    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.dll"
2647    File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib.dll"
2648    File "${AFS_SERVER_BUILDDIR}\afsvosadmin.dll"
2649    File "${AFS_SERVER_BUILDDIR}\afsbosadmin.dll"
2650    File "${AFS_SERVER_BUILDDIR}\afscfgadmin.dll"
2651    File "${AFS_SERVER_BUILDDIR}\afskasadmin.dll"
2652    File "${AFS_SERVER_BUILDDIR}\afsptsadmin.dll"
2653
2654 !IFDEF DEBUG
2655 !IFDEF CL_1310
2656    File "${SYSTEMDIR}\msvcr71d.dll"
2657    File "${SYSTEMDIR}\msvcr71d.pdb"
2658    File "${SYSTEMDIR}\msvcp71d.dll"
2659    File "${SYSTEMDIR}\msvcp71d.pdb"
2660    File "${SYSTEMDIR}\mfc71d.dll"
2661    File "${SYSTEMDIR}\mfc71d.pdb"
2662    File "${SYSTEMDIR}\MFC71CHS.DLL"
2663    File "${SYSTEMDIR}\MFC71CHT.DLL"
2664    File "${SYSTEMDIR}\MFC71DEU.DLL"
2665    File "${SYSTEMDIR}\MFC71ENU.DLL"
2666    File "${SYSTEMDIR}\MFC71ESP.DLL"
2667    File "${SYSTEMDIR}\MFC71FRA.DLL"
2668    File "${SYSTEMDIR}\MFC71ITA.DLL"
2669    File "${SYSTEMDIR}\MFC71JPN.DLL"
2670    File "${SYSTEMDIR}\MFC71KOR.DLL"
2671 !ELSE
2672 !IFDEF CL_1300
2673    File "${SYSTEMDIR}\msvcr70d.dll"
2674    File "${SYSTEMDIR}\msvcr70d.pdb"
2675    File "${SYSTEMDIR}\msvcp70d.dll"
2676    File "${SYSTEMDIR}\msvcp70d.pdb"
2677    File "${SYSTEMDIR}\mfc70d.dll"
2678    File "${SYSTEMDIR}\mfc70d.pdb"
2679    File "${SYSTEMDIR}\MFC70CHS.DLL"
2680    File "${SYSTEMDIR}\MFC70CHT.DLL"
2681    File "${SYSTEMDIR}\MFC70DEU.DLL"
2682    File "${SYSTEMDIR}\MFC70ENU.DLL"
2683    File "${SYSTEMDIR}\MFC70ESP.DLL"
2684    File "${SYSTEMDIR}\MFC70FRA.DLL"
2685    File "${SYSTEMDIR}\MFC70ITA.DLL"
2686    File "${SYSTEMDIR}\MFC70JPN.DLL"
2687    File "${SYSTEMDIR}\MFC70KOR.DLL"
2688 !ELSE
2689    File "${SYSTEMDIR}\mfc42d.dll"
2690    File "${SYSTEMDIR}\mfc42d.pdb"
2691    File "${SYSTEMDIR}\msvcp60d.dll"
2692    File "${SYSTEMDIR}\msvcp60d.pdb"
2693    File "${SYSTEMDIR}\msvcrtd.dll"
2694    File "${SYSTEMDIR}\msvcrtd.pdb"
2695 !ENDIF
2696 !ENDIF
2697 !ELSE
2698 !IFDEF CL_1310
2699    File "${SYSTEMDIR}\mfc71.dll"
2700    File "${SYSTEMDIR}\msvcr71.dll"
2701    File "${SYSTEMDIR}\msvcp71.dll"
2702    File "${SYSTEMDIR}\MFC71CHS.DLL"
2703    File "${SYSTEMDIR}\MFC71CHT.DLL"
2704    File "${SYSTEMDIR}\MFC71DEU.DLL"
2705    File "${SYSTEMDIR}\MFC71ENU.DLL"
2706    File "${SYSTEMDIR}\MFC71ESP.DLL"
2707    File "${SYSTEMDIR}\MFC71FRA.DLL"
2708    File "${SYSTEMDIR}\MFC71ITA.DLL"
2709    File "${SYSTEMDIR}\MFC71JPN.DLL"
2710    File "${SYSTEMDIR}\MFC71KOR.DLL"
2711 !ELSE
2712 !IFDEF CL_1300
2713    File "${SYSTEMDIR}\mfc70.dll"
2714    File "${SYSTEMDIR}\msvcr70.dll"
2715    File "${SYSTEMDIR}\msvcp70.dll"
2716    File "${SYSTEMDIR}\MFC70CHS.DLL"
2717    File "${SYSTEMDIR}\MFC70CHT.DLL"
2718    File "${SYSTEMDIR}\MFC70DEU.DLL"
2719    File "${SYSTEMDIR}\MFC70ENU.DLL"
2720    File "${SYSTEMDIR}\MFC70ESP.DLL"
2721    File "${SYSTEMDIR}\MFC70FRA.DLL"
2722    File "${SYSTEMDIR}\MFC70ITA.DLL"
2723    File "${SYSTEMDIR}\MFC70JPN.DLL"
2724    File "${SYSTEMDIR}\MFC70KOR.DLL"
2725 !ELSE
2726    File "${SYSTEMDIR}\mfc42.dll"
2727    File "${SYSTEMDIR}\msvcp60.dll"
2728    File "${SYSTEMDIR}\msvcrt.dll"
2729 !ENDIF
2730 !ENDIF
2731 !ENDIF
2732
2733    StrCmp $LANGUAGE ${LANG_ENGLISH} DoEnglish
2734    StrCmp $LANGUAGE ${LANG_GERMAN} DoGerman
2735    StrCmp $LANGUAGE ${LANG_SPANISH} DoSpanish
2736    StrCmp $LANGUAGE ${LANG_JAPANESE} DoJapanese
2737    StrCmp $LANGUAGE ${LANG_KOREAN} DoKorean
2738    StrCmp $LANGUAGE ${LANG_PORTUGUESEBR} DoPortugueseBR
2739    StrCmp $LANGUAGE ${LANG_SIMPCHINESE} DoSimpChinese
2740    StrCmp $LANGUAGE ${LANG_TRADCHINESE} DoTradChinese
2741    
2742 DoEnglish:
2743
2744    SetOutPath "$INSTDIR\Documentation"
2745    File "..\..\doc\install\Documentation\en_US\README.TXT"
2746
2747    SetOutPath "$INSTDIR\Client\Program"
2748    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1033.dll"    "$INSTDIR\Client\Program\afscreds_1033.dll" "$INSTDIR"
2749    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1033.dll" "$INSTDIR\Client\Program\afs_shl_ext_1033.dll" "$INSTDIR"
2750 !ifdef DEBUG
2751    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1033.pdb"
2752    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1033.pdb"
2753 !endif
2754
2755    SetOutPath "$INSTDIR\Common"
2756    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1033.dll"           "$INSTDIR\Common\afs_config_1033.dll" "$INSTDIR"
2757    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1033.dll"              "$INSTDIR\Common\afs_cpa_1033.dll" "$INSTDIR"
2758    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1033.dll"          "$INSTDIR\Common\afseventmsg_1033.dll" "$INSTDIR"
2759   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1033.dll"      "$INSTDIR\Common\afs_setup_utils_1033.dll" "$INSTDIR"
2760    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1033.dll"            "$INSTDIR\Common\afsserver_1033.dll" "$INSTDIR"
2761    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1033.dll"            "$INSTDIR\Common\afssvrcfg_1033.dll" "$INSTDIR"
2762    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1033.dll"  "$INSTDIR\Common\TaAfsAccountManager_1033.dll" "$INSTDIR"
2763    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1033.dll"          "$INSTDIR\Common\TaAfsAppLib_1033.dll" "$INSTDIR"
2764    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1033.dll"   "$INSTDIR\Common\TaAfsServerManager_1033.dll" "$INSTDIR"
2765    File "..\..\doc\help\en_US\afs-cc.CNT"
2766    File "..\..\doc\help\en_US\afs-cc.hlp"
2767    File "..\..\doc\help\en_US\afs-light.CNT"
2768    File "..\..\doc\help\en_US\afs-light.hlp"
2769    File "..\..\doc\help\en_US\afs-nt.CNT"
2770    File "..\..\doc\help\en_US\afs-nt.HLP"
2771    File "..\..\doc\help\en_US\taafscfg.CNT"
2772    File "..\..\doc\help\en_US\taafscfg.hlp"
2773    File "..\..\doc\help\en_US\taafssvrmgr.CNT"
2774    File "..\..\doc\help\en_US\taafssvrmgr.hlp"
2775    File "..\..\doc\help\en_US\taafsusrmgr.CNT"
2776    File "..\..\doc\help\en_US\taafsusrmgr.hlp"
2777
2778 !ifdef DEBUG
2779    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1033.pdb"
2780    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1033.pdb"
2781    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1033.pdb"
2782    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1033.pdb"
2783    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1033.pdb"
2784    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1033.pdb"
2785    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1033.pdb"
2786    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1033.pdb"
2787 !ENDIF
2788    goto done
2789
2790 DoGerman:
2791
2792    SetOutPath "$INSTDIR\Documentation"
2793    File "..\..\doc\install\Documentation\de_DE\README.TXT"
2794
2795    SetOutPath "$INSTDIR\Client\Program"
2796   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1032.dll"                      "$INSTDIR\Client\Program\afscreds_1032.dll" "$INSTDIR"
2797   !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1032.dll" "$INSTDIR\Client\Program\afs_shl_ext_1032.dll" "$INSTDIR"
2798 !ifdef DEBUG
2799    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1032.pdb"
2800    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1032.pdb"
2801 !endif
2802
2803    SetOutPath "$INSTDIR\Common"
2804    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1032.dll"           "$INSTDIR\Common\afs_config_1032.dll" "$INSTDIR"
2805    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1032.dll"              "$INSTDIR\Common\afs_cpa_1032.dll" "$INSTDIR" 
2806    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1032.dll"          "$INSTDIR\Common\afseventmsg_1032.dll" "$INSTDIR" 
2807   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1032.dll"      "$INSTDIR\Common\afs_setup_utils_1032.dll" "$INSTDIR" 
2808    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1032.dll"            "$INSTDIR\Common\afsserver_1032.dll" "$INSTDIR" 
2809    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1032.dll"            "$INSTDIR\Common\afssvrcfg_1032.dll" "$INSTDIR" 
2810    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1032.dll"  "$INSTDIR\Common\TaAfsAccountManager_1032.dll" "$INSTDIR" 
2811    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1032.dll"          "$INSTDIR\Common\TaAfsAppLib_1032.dll" "$INSTDIR" 
2812    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1032.dll"   "$INSTDIR\Common\TaAfsServerManager_1032.dll" "$INSTDIR" 
2813    File "..\..\doc\help\de_DE\afs-cc.CNT"
2814    File "..\..\doc\help\de_DE\afs-cc.hlp"
2815    File "..\..\doc\help\de_DE\afs-light.CNT"
2816    File "..\..\doc\help\de_DE\afs-light.hlp"
2817    File "..\..\doc\help\de_DE\afs-nt.CNT"
2818    File "..\..\doc\help\de_DE\afs-nt.HLP"
2819    File "..\..\doc\help\de_DE\taafscfg.CNT"
2820    File "..\..\doc\help\de_DE\taafscfg.hlp"
2821    File "..\..\doc\help\de_DE\taafssvrmgr.CNT"
2822    File "..\..\doc\help\de_DE\taafssvrmgr.hlp"
2823    File "..\..\doc\help\de_DE\taafsusrmgr.CNT"
2824    File "..\..\doc\help\de_DE\taafsusrmgr.hlp"
2825
2826 !ifdef DEBUG
2827    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1032.pdb"
2828    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1032.pdb"
2829    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1032.pdb"
2830    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1032.pdb"
2831    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1032.pdb"
2832    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1032.pdb"
2833    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1032.pdb"
2834    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1032.pdb"
2835 !ENDIF
2836    goto done   
2837
2838 DoSpanish:
2839
2840    SetOutPath "$INSTDIR\Documentation"
2841    File "..\..\doc\install\Documentation\es_ES\README.TXT"
2842
2843    SetOutPath "$INSTDIR\Client\Program"
2844    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1034.dll"     "$INSTDIR\Client\Program\afscreds_1034.dll" "$INSTDIR" 
2845    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1034.dll" "$INSTDIR\Client\Program\afs_shl_ext_1034.dll" "$INSTDIR"
2846 !ifdef DEBUG
2847    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1034.pdb"
2848    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1034.pdb"
2849 !endif
2850
2851    SetOutPath "$INSTDIR\Common"
2852    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1034.dll"          "$INSTDIR\Common\afs_config_1034.dll" "$INSTDIR"  
2853    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1034.dll"             "$INSTDIR\Common\afs_cpa_1034.dll" "$INSTDIR"  
2854    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1034.dll"         "$INSTDIR\Common\afseventmsg_1034.dll" "$INSTDIR"  
2855   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1034.dll"     "$INSTDIR\Common\afs_setup_utils_1034.dll" "$INSTDIR"  
2856    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1034.dll"           "$INSTDIR\Common\afsserver_1034.dll" "$INSTDIR"  
2857    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1034.dll"           "$INSTDIR\Common\afssvrcfg_1034.dll" "$INSTDIR"  
2858    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1034.dll" "$INSTDIR\Common\TaAfsAccountManager_1034.dll" "$INSTDIR"  
2859    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1034.dll"         "$INSTDIR\Common\TaAfsAppLib_1034.dll" "$INSTDIR"  
2860    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1034.dll"  "$INSTDIR\Common\TaAfsServerManager_1034.dll" "$INSTDIR"  
2861    File "..\..\doc\help\es_ES\afs-cc.CNT"
2862    File "..\..\doc\help\es_ES\afs-cc.hlp"
2863    File "..\..\doc\help\es_ES\afs-light.CNT"
2864    File "..\..\doc\help\es_ES\afs-light.hlp"
2865    File "..\..\doc\help\es_ES\afs-nt.CNT"
2866    File "..\..\doc\help\es_ES\afs-nt.HLP"
2867    File "..\..\doc\help\es_ES\taafscfg.CNT"
2868    File "..\..\doc\help\es_ES\taafscfg.hlp"
2869    File "..\..\doc\help\es_ES\taafssvrmgr.CNT"
2870    File "..\..\doc\help\es_ES\taafssvrmgr.hlp"
2871    File "..\..\doc\help\es_ES\taafsusrmgr.CNT"
2872    File "..\..\doc\help\es_ES\taafsusrmgr.hlp"
2873
2874 !ifdef DEBUG
2875    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1034.pdb"
2876    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1034.pdb"
2877    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1034.pdb"
2878    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1034.pdb"
2879    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1034.pdb"
2880    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1034.pdb"
2881    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1034.pdb"
2882    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1034.pdb"
2883 !ENDIF
2884    goto done
2885
2886 DoJapanese:
2887
2888    SetOutPath "$INSTDIR\Documentation"
2889    File "..\..\doc\install\Documentation\ja_JP\README.TXT"
2890
2891    SetOutPath "$INSTDIR\Client\Program"
2892    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1041.dll"  "$INSTDIR\Client\Program\afscreds_1041.dll" "$INSTDIR"  
2893    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1041.dll" "$INSTDIR\Client\Program\afs_shl_ext_1041.dll" "$INSTDIR"
2894 !ifdef DEBUG
2895    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1041.pdb"
2896    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1041.pdb"
2897 !endif
2898
2899    SetOutPath "$INSTDIR\Common"
2900    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1041.dll"           "$INSTDIR\Common\afs_config_1041.dll" "$INSTDIR"   
2901    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1041.dll"              "$INSTDIR\Common\afs_cpa_1041.dll" "$INSTDIR"   
2902    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1041.dll"          "$INSTDIR\Common\afseventmsg_1041.dll" "$INSTDIR"   
2903   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1041.dll"      "$INSTDIR\Common\afs_setup_utils_1041.dll" "$INSTDIR"   
2904    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1041.dll"            "$INSTDIR\Common\afsserver_1041.dll" "$INSTDIR"   
2905    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1041.dll"            "$INSTDIR\Common\afssvrcfg_1041.dll" "$INSTDIR"   
2906    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1041.dll"  "$INSTDIR\Common\TaAfsAccountManager_1041.dll" "$INSTDIR"   
2907    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1041.dll"          "$INSTDIR\Common\TaAfsAppLib_1041.dll" "$INSTDIR"   
2908    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1041.dll"   "$INSTDIR\Common\TaAfsServerManager_1041.dll" "$INSTDIR"   
2909    File "..\..\doc\help\ja_JP\afs-cc.CNT"
2910    File "..\..\doc\help\ja_JP\afs-cc.hlp"
2911    File "..\..\doc\help\ja_JP\afs-light.CNT"
2912    File "..\..\doc\help\ja_JP\afs-light.hlp"
2913    File "..\..\doc\help\ja_JP\afs-nt.CNT"
2914    File "..\..\doc\help\ja_JP\afs-nt.HLP"
2915    File "..\..\doc\help\ja_JP\taafscfg.CNT"
2916    File "..\..\doc\help\ja_JP\taafscfg.hlp"
2917    File "..\..\doc\help\ja_JP\taafssvrmgr.CNT"
2918    File "..\..\doc\help\ja_JP\taafssvrmgr.hlp"
2919    File "..\..\doc\help\ja_JP\taafsusrmgr.CNT"
2920    File "..\..\doc\help\ja_JP\taafsusrmgr.hlp"
2921
2922 !ifdef DEBUG
2923    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1041.pdb"
2924    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1041.pdb"
2925    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1041.pdb"
2926    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1041.pdb"
2927    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1041.pdb"
2928    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1041.pdb"
2929    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1041.pdb"
2930    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1041.pdb"
2931 !ENDIF
2932    goto done
2933    
2934 DoKorean:
2935
2936    SetOutPath "$INSTDIR\Documentation"
2937    File "..\..\doc\install\Documentation\ko_KR\README.TXT"
2938
2939    SetOutPath "$INSTDIR\Client\Program"
2940    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1042.dll"  "$INSTDIR\Client\Program\afscreds_1042.dll" "$INSTDIR"   
2941    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1042.dll" "$INSTDIR\Client\Program\afs_shl_ext_1042.dll" "$INSTDIR"
2942 !ifdef DEBUG
2943    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1042.pdb"
2944    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1042.pdb"
2945 !endif
2946
2947    SetOutPath "$INSTDIR\Common"
2948    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1042.dll"           "$INSTDIR\Common\afs_config_1042.dll" "$INSTDIR"    
2949    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1042.dll"              "$INSTDIR\Common\afs_cpa_1042.dll" "$INSTDIR"    
2950    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1042.dll"          "$INSTDIR\Common\afseventmsg_1042.dll" "$INSTDIR"    
2951   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1042.dll"      "$INSTDIR\Common\afs_setup_utils_1042.dll" "$INSTDIR"    
2952    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1042.dll"            "$INSTDIR\Common\afsserver_1042.dll" "$INSTDIR"    
2953    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1042.dll"            "$INSTDIR\Common\afssvrcfg_1042.dll" "$INSTDIR"    
2954    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1042.dll"  "$INSTDIR\Common\TaAfsAccountManager_1042.dll" "$INSTDIR"    
2955    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1042.dll"          "$INSTDIR\Common\TaAfsAppLib_1042.dll" "$INSTDIR"    
2956    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1042.dll"   "$INSTDIR\Common\TaAfsServerManager_1042.dll" "$INSTDIR"    
2957    File "..\..\doc\help\ko_KR\afs-cc.CNT"
2958    File "..\..\doc\help\ko_KR\afs-cc.hlp"
2959    File "..\..\doc\help\ko_KR\afs-light.CNT"
2960    File "..\..\doc\help\ko_KR\afs-light.hlp"
2961    File "..\..\doc\help\ko_KR\afs-nt.CNT"
2962    File "..\..\doc\help\ko_KR\afs-nt.HLP"
2963    File "..\..\doc\help\ko_KR\taafscfg.CNT"
2964    File "..\..\doc\help\ko_KR\taafscfg.hlp"
2965    File "..\..\doc\help\ko_KR\taafssvrmgr.CNT"
2966    File "..\..\doc\help\ko_KR\taafssvrmgr.hlp"
2967    File "..\..\doc\help\ko_KR\taafsusrmgr.CNT"
2968    File "..\..\doc\help\ko_KR\taafsusrmgr.hlp"
2969
2970 !ifdef DEBUG
2971    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1042.pdb"
2972    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1042.pdb"
2973    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1042.pdb"
2974    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1042.pdb"
2975    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1042.pdb"
2976    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1042.pdb"
2977    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1042.pdb"
2978    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1042.pdb"
2979 !ENDIF
2980    goto done
2981
2982
2983 DoPortugueseBR:
2984
2985    SetOutPath "$INSTDIR\Documentation"
2986    File "..\..\doc\install\Documentation\pt_BR\README.TXT"
2987
2988    SetOutPath "$INSTDIR\Client\Program"
2989    !insertmacro ReplaceDLL  "${AFS_CLIENT_BUILDDIR}\afscreds_1046.dll"  "$INSTDIR\Client\Program\afscreds_1046.dll" "$INSTDIR"    
2990    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1046.dll" "$INSTDIR\Client\Program\afs_shl_ext_1046.dll" "$INSTDIR"
2991 !ifdef DEBUG
2992    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1046.pdb"
2993    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1046.pdb"
2994 !endif
2995
2996    SetOutPath "$INSTDIR\Common"
2997    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1046.dll"           "$INSTDIR\Common\afs_config_1046.dll" "$INSTDIR"     
2998    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1046.dll"              "$INSTDIR\Common\afs_cpa_1046.dll" "$INSTDIR"     
2999    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1046.dll"          "$INSTDIR\Common\afseventmsg_1046.dll" "$INSTDIR"     
3000   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1046.dll"      "$INSTDIR\Common\afs_setup_utils_1046.dll" "$INSTDIR"     
3001    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1046.dll"            "$INSTDIR\Common\afsserver_1046.dll" "$INSTDIR"     
3002    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1046.dll"            "$INSTDIR\Common\afssvrcfg_1046.dll" "$INSTDIR"     
3003    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1046.dll"  "$INSTDIR\Common\TaAfsAccountManager_1046.dll" "$INSTDIR"     
3004    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1046.dll"          "$INSTDIR\Common\TaAfsAppLib_1046.dll" "$INSTDIR"     
3005    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1046.dll"   "$INSTDIR\Common\TaAfsServerManager_1046.dll" "$INSTDIR"     
3006    File "..\..\doc\help\pt_BR\afs-cc.CNT"
3007    File "..\..\doc\help\pt_BR\afs-cc.hlp"
3008    File "..\..\doc\help\pt_BR\afs-light.CNT"
3009    File "..\..\doc\help\pt_BR\afs-light.hlp"
3010    File "..\..\doc\help\pt_BR\afs-nt.CNT"
3011    File "..\..\doc\help\pt_BR\afs-nt.HLP"
3012    File "..\..\doc\help\pt_BR\taafscfg.CNT"
3013    File "..\..\doc\help\pt_BR\taafscfg.hlp"
3014    File "..\..\doc\help\pt_BR\taafssvrmgr.CNT"
3015    File "..\..\doc\help\pt_BR\taafssvrmgr.hlp"
3016    File "..\..\doc\help\pt_BR\taafsusrmgr.CNT"
3017    File "..\..\doc\help\pt_BR\taafsusrmgr.hlp"
3018
3019 !ifdef DEBUG
3020    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1046.pdb"
3021    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1046.pdb"
3022    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1046.pdb"
3023    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1046.pdb"
3024    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1046.pdb"
3025    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1046.pdb"
3026    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1046.pdb"
3027    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1046.pdb"
3028 !ENDIF
3029    goto done
3030    
3031 DoSimpChinese:
3032
3033    SetOutPath "$INSTDIR\Documentation"
3034    File "..\..\doc\install\Documentation\zh_CN\README.TXT"
3035
3036    SetOutPath "$INSTDIR\Client\Program"
3037    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_2052.dll"   "$INSTDIR\Client\Program\afscreds_2052.dll" "$INSTDIR"     
3038    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_2052.dll" "$INSTDIR\Client\Program\afs_shl_ext_2052.dll" "$INSTDIR"
3039 !ifdef DEBUG
3040    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_2052.pdb"
3041    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_2052.pdb"
3042 !endif
3043
3044    SetOutPath "$INSTDIR\Common"
3045    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_2052.dll"           "$INSTDIR\Common\afs_config_2052.dll" "$INSTDIR"      
3046    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_2052.dll"              "$INSTDIR\Common\afs_cpa_2052.dll" "$INSTDIR"      
3047    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_2052.dll"          "$INSTDIR\Common\afseventmsg_2052.dll" "$INSTDIR"      
3048   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_2052.dll"      "$INSTDIR\Common\afs_setup_utils_2052.dll" "$INSTDIR"      
3049    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_2052.dll"            "$INSTDIR\Common\afsserver_2052.dll" "$INSTDIR"      
3050    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_2052.dll"            "$INSTDIR\Common\afssvrcfg_2052.dll" "$INSTDIR"      
3051    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_2052.dll"  "$INSTDIR\Common\TaAfsAccountManager_2052.dll" "$INSTDIR"      
3052    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_2052.dll"          "$INSTDIR\Common\TaAfsAppLib_2052.dll" "$INSTDIR"      
3053    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_2052.dll"   "$INSTDIR\Common\TaAfsServerManager_2052.dll" "$INSTDIR"      
3054    File "..\..\doc\help\zh_CN\afs-cc.CNT"
3055    File "..\..\doc\help\zh_CN\afs-cc.hlp"
3056    File "..\..\doc\help\zh_CN\afs-light.CNT"
3057    File "..\..\doc\help\zh_CN\afs-light.hlp"
3058    File "..\..\doc\help\zh_CN\afs-nt.CNT"
3059    File "..\..\doc\help\zh_CN\afs-nt.HLP"
3060    File "..\..\doc\help\zh_CN\taafscfg.CNT"
3061    File "..\..\doc\help\zh_CN\taafscfg.hlp"
3062    File "..\..\doc\help\zh_CN\taafssvrmgr.CNT"
3063    File "..\..\doc\help\zh_CN\taafssvrmgr.hlp"
3064    File "..\..\doc\help\zh_CN\taafsusrmgr.CNT"
3065    File "..\..\doc\help\zh_CN\taafsusrmgr.hlp"
3066
3067 !ifdef DEBUG
3068    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_2052.pdb"
3069    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_2052.pdb"
3070    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_2052.pdb"
3071    ;File "${AFS_SERVER_BUILDDIR}\afsserver_2052.pdb"
3072    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_2052.pdb"
3073    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_2052.pdb"
3074    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_2052.pdb"
3075    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_2052.pdb"
3076 !ENDIF
3077    goto done
3078    
3079 DoTradChinese:
3080
3081    SetOutPath "$INSTDIR\Documentation"
3082    File "..\..\doc\install\Documentation\zh_TW\README.TXT"
3083
3084    SetOutPath "$INSTDIR\Client\Program"
3085    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afscreds_1028.dll"  "$INSTDIR\Client\Program\_1028.dll" "$INSTDIR"      
3086    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1028.dll" "$INSTDIR\Client\Program\afs_shl_ext_1028.dll" "$INSTDIR"
3087 !ifdef DEBUG
3088    ;File "${AFS_CLIENT_BUILDDIR}\afscreds_1028.pdb"
3089    ;File "${AFS_CLIENT_BUILDDIR}\afs_shl_ext_1028.pdb"
3090 !endif
3091
3092    SetOutPath "$INSTDIR\Common"
3093    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_config_1028.dll"           "$INSTDIR\Common\afs_config_1028.dll" "$INSTDIR"       
3094    !insertmacro ReplaceDLL "${AFS_CLIENT_BUILDDIR}\afs_cpa_1028.dll"              "$INSTDIR\Common\afs_cpa_1028.dll" "$INSTDIR"       
3095    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afseventmsg_1028.dll"          "$INSTDIR\Common\afseventmsg_1028.dll" "$INSTDIR"       
3096   ;!insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afs_setup_utils_1028.dll"      "$INSTDIR\Common\afs_setup_utils_1028.dll" "$INSTDIR"       
3097    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afsserver_1028.dll"            "$INSTDIR\Common\afsserver_1028.dll" "$INSTDIR"       
3098    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\afssvrcfg_1028.dll"            "$INSTDIR\Common\afssvrcfg_1028.dll" "$INSTDIR"       
3099    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1028.dll"  "$INSTDIR\Common\TaAfsAccountManager_1028.dll" "$INSTDIR"       
3100    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1028.dll"          "$INSTDIR\Common\TaAfsAppLib_1028.dll" "$INSTDIR"       
3101    !insertmacro ReplaceDLL "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1028.dll"   "$INSTDIR\Common\TaAfsServerManager_1028.dll" "$INSTDIR"       
3102    File "..\..\doc\help\zh_TW\afs-cc.CNT"
3103    File "..\..\doc\help\zh_TW\afs-cc.hlp"
3104    File "..\..\doc\help\zh_TW\afs-light.CNT"
3105    File "..\..\doc\help\zh_TW\afs-light.hlp"
3106    File "..\..\doc\help\zh_TW\afs-nt.CNT"
3107    File "..\..\doc\help\zh_TW\afs-nt.HLP"
3108    File "..\..\doc\help\zh_TW\taafscfg.CNT"
3109    File "..\..\doc\help\zh_TW\taafscfg.hlp"
3110    File "..\..\doc\help\zh_TW\taafssvrmgr.CNT"
3111    File "..\..\doc\help\zh_TW\taafssvrmgr.hlp"
3112    File "..\..\doc\help\zh_TW\taafsusrmgr.CNT"
3113    File "..\..\doc\help\zh_TW\taafsusrmgr.hlp"
3114
3115 !ifdef DEBUG
3116    ;File "${AFS_CLIENT_BUILDDIR}\afs_config_1028.pdb"
3117    ;File "${AFS_CLIENT_BUILDDIR}\afs_cpa_1028.pdb"
3118    ;File "${AFS_SERVER_BUILDDIR}\afseventmsg_1028.pdb"
3119    ;File "${AFS_SERVER_BUILDDIR}\afsserver_1028.pdb"
3120    ;File "${AFS_SERVER_BUILDDIR}\afssvrcfg_1028.pdb"
3121    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAccountManager_1028.pdb"
3122    ;File "${AFS_SERVER_BUILDDIR}\TaAfsAppLib_1028.pdb"
3123    ;File "${AFS_SERVER_BUILDDIR}\TaAfsServerManager_1028.pdb"
3124 !ENDIF
3125    goto done
3126    
3127 done:
3128 FunctionEnd
3129
3130
3131
3132 ;====================================================
3133 ; AddToPath - Adds the given dir to the search path.
3134 ;        Input - head of the stack
3135 ;        Note - Win9x systems requires reboot
3136 ;====================================================
3137 Function AddToPath
3138   Exch $0
3139   Push $1
3140   Push $2
3141   Push $3
3142
3143   # don't add if the path doesn't exist
3144   IfFileExists $0 "" AddToPath_done
3145
3146   ReadEnvStr $1 PATH
3147   Push "$1;"
3148   Push "$0;"
3149   Call StrStr
3150   Pop $2
3151   StrCmp $2 "" "" AddToPath_done
3152   Push "$1;"
3153   Push "$0\;"
3154   Call StrStr
3155   Pop $2
3156   StrCmp $2 "" "" AddToPath_done
3157   GetFullPathName /SHORT $3 $0
3158   Push "$1;"
3159   Push "$3;"
3160   Call StrStr
3161   Pop $2
3162   StrCmp $2 "" "" AddToPath_done
3163   Push "$1;"
3164   Push "$3\;"
3165   Call StrStr
3166   Pop $2
3167   StrCmp $2 "" "" AddToPath_done
3168
3169   Call IsNT
3170   Pop $1
3171   StrCmp $1 1 AddToPath_NT
3172     ; Not on NT
3173     StrCpy $1 $WINDIR 2
3174     FileOpen $1 "$1\autoexec.bat" a
3175     FileSeek $1 -1 END
3176     FileReadByte $1 $2
3177     IntCmp $2 26 0 +2 +2 # DOS EOF
3178       FileSeek $1 -1 END # write over EOF
3179     FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
3180     FileClose $1
3181     SetRebootFlag true
3182     Goto AddToPath_done
3183
3184   AddToPath_NT:
3185     ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
3186     StrCpy $2 $1 1 -1 # copy last char
3187     StrCmp $2 ";" 0 +2 # if last char == ;
3188       StrCpy $1 $1 -1 # remove last char
3189     StrCmp $1 "" AddToPath_NTdoIt
3190       StrCpy $0 "$1;$0"
3191     AddToPath_NTdoIt:
3192       WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" $0
3193       SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
3194
3195   AddToPath_done:
3196     Pop $3
3197     Pop $2
3198     Pop $1
3199     Pop $0
3200 FunctionEnd
3201
3202 ;====================================================
3203 ; RemoveFromPath - Remove a given dir from the path
3204 ;     Input: head of the stack
3205 ;====================================================
3206 Function un.RemoveFromPath
3207   Exch $0
3208   Push $1
3209   Push $2
3210   Push $3
3211   Push $4
3212   Push $5
3213   Push $6
3214
3215   IntFmt $6 "%c" 26 # DOS EOF
3216
3217   Call un.IsNT
3218   Pop $1
3219   StrCmp $1 1 unRemoveFromPath_NT
3220     ; Not on NT
3221     StrCpy $1 $WINDIR 2
3222     FileOpen $1 "$1\autoexec.bat" r
3223     GetTempFileName $4
3224     FileOpen $2 $4 w
3225     GetFullPathName /SHORT $0 $0
3226     StrCpy $0 "SET PATH=%PATH%;$0"
3227     Goto unRemoveFromPath_dosLoop
3228
3229     unRemoveFromPath_dosLoop:
3230       FileRead $1 $3
3231       StrCpy $5 $3 1 -1 # read last char
3232       StrCmp $5 $6 0 +2 # if DOS EOF
3233         StrCpy $3 $3 -1 # remove DOS EOF so we can compare
3234       StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
3235       StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
3236       StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
3237       StrCmp $3 "" unRemoveFromPath_dosLoopEnd
3238       FileWrite $2 $3
3239       Goto unRemoveFromPath_dosLoop
3240       unRemoveFromPath_dosLoopRemoveLine:
3241         SetRebootFlag true
3242         Goto unRemoveFromPath_dosLoop
3243
3244     unRemoveFromPath_dosLoopEnd:
3245       FileClose $2
3246       FileClose $1
3247       StrCpy $1 $WINDIR 2
3248       Delete "$1\autoexec.bat"
3249       CopyFiles /SILENT $4 "$1\autoexec.bat"
3250       Delete $4
3251       Goto unRemoveFromPath_done
3252
3253   unRemoveFromPath_NT:
3254     ReadRegStr $1 HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH"
3255     StrCpy $5 $1 1 -1 # copy last char
3256     StrCmp $5 ";" +2 # if last char != ;
3257       StrCpy $1 "$1;" # append ;
3258     Push $1
3259     Push "$0;"
3260     Call un.StrStr ; Find `$0;` in $1
3261     Pop $2 ; pos of our dir
3262     StrCmp $2 "" unRemoveFromPath_done
3263       ; else, it is in path
3264       # $0 - path to add
3265       # $1 - path var
3266       StrLen $3 "$0;"
3267       StrLen $4 $2
3268       StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
3269       StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
3270       StrCpy $3 $5$6
3271
3272       StrCpy $5 $3 1 -1 # copy last char
3273       StrCmp $5 ";" 0 +2 # if last char == ;
3274         StrCpy $3 $3 -1 # remove last char
3275
3276       WriteRegExpandStr HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment" "PATH" $3
3277       SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
3278
3279   unRemoveFromPath_done:
3280     Pop $6
3281     Pop $5
3282     Pop $4
3283     Pop $3
3284     Pop $2
3285     Pop $1
3286     Pop $0
3287 FunctionEnd
3288
3289 ;====================================================
3290 ; IsNT - Returns 1 if the current system is NT, 0
3291 ;        otherwise.
3292 ;     Output: head of the stack
3293 ;====================================================
3294 !macro IsNT un
3295 Function ${un}IsNT
3296   Push $0
3297   ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
3298   StrCmp $0 "" 0 IsNT_yes
3299   ; we are not NT.
3300   Pop $0
3301   Push 0
3302   Return
3303
3304   IsNT_yes:
3305     ; NT!!!
3306     Pop $0
3307     Push 1
3308 FunctionEnd
3309 !macroend
3310 !insertmacro IsNT ""
3311 !insertmacro IsNT "un."
3312
3313 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3314 ; Uninstall stuff
3315 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
3316 ;====================================================
3317 ; StrStr - Finds a given string in another given string.
3318 ;               Returns -1 if not found and the pos if found.
3319 ;          Input: head of the stack - string to find
3320 ;                      second in the stack - string to find in
3321 ;          Output: head of the stack
3322 ;====================================================
3323 !macro StrStr un
3324 Function ${un}StrStr
3325 Exch $R1 ; st=haystack,old$R1, $R1=needle
3326   Exch    ; st=old$R1,haystack
3327   Exch $R2 ; st=old$R1,old$R2, $R2=haystack
3328   Push $R3
3329   Push $R4
3330   Push $R5
3331   StrLen $R3 $R1
3332   StrCpy $R4 0
3333   ; $R1=needle
3334   ; $R2=haystack
3335   ; $R3=len(needle)
3336   ; $R4=cnt
3337   ; $R5=tmp
3338   loop:
3339     StrCpy $R5 $R2 $R3 $R4
3340     StrCmp $R5 $R1 done
3341     StrCmp $R5 "" done
3342     IntOp $R4 $R4 + 1
3343     Goto loop
3344 done:
3345   StrCpy $R1 $R2 "" $R4
3346   Pop $R5
3347   Pop $R4
3348   Pop $R3
3349   Pop $R2
3350   Exch $R1
3351 FunctionEnd
3352 !macroend
3353 !insertmacro StrStr ""
3354 !insertmacro StrStr "un."
3355
3356
3357 !ifdef ADDSHAREDDLLUSED
3358 ; AddSharedDLL
3359  ;
3360  ; Increments a shared DLLs reference count.
3361  ; Use by passing one item on the stack (the full path of the DLL).
3362  ;
3363  ; Usage:
3364  ;   Push $SYSDIR\myDll.dll
3365  ;   Call AddSharedDLL
3366  ;
3367
3368  Function AddSharedDLL
3369    Exch $R1
3370    Push $R0
3371    ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
3372    IntOp $R0 $R0 + 1
3373    WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
3374    Pop $R0
3375    Pop $R1
3376  FunctionEnd
3377
3378  
3379 ; un.RemoveSharedDLL
3380  ;
3381  ; Decrements a shared DLLs reference count, and removes if necessary.
3382  ; Use by passing one item on the stack (the full path of the DLL).
3383  ; Note: for use in the main installer (not the uninstaller), rename the
3384  ; function to RemoveSharedDLL.
3385  ;
3386  ; Usage:
3387  ;   Push $SYSDIR\myDll.dll
3388  ;   Call un.RemoveSharedDLL
3389  ;
3390
3391  Function un.RemoveSharedDLL
3392    Exch $R1
3393    Push $R0
3394    ReadRegDword $R0 HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
3395    StrCmp $R0 "" remove
3396      IntOp $R0 $R0 - 1
3397      IntCmp $R0 0 rk rk uk
3398      rk:
3399        DeleteRegValue HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1
3400      goto Remove
3401      uk:
3402        WriteRegDWORD HKLM Software\Microsoft\Windows\CurrentVersion\SharedDLLs $R1 $R0
3403      Goto noremove
3404    remove:
3405      Delete /REBOOTOK $R1
3406    noremove:
3407    Pop $R0
3408    Pop $R1
3409  FunctionEnd
3410 !endif
3411
3412
3413 ; Installs the loopback adpater and disables it on Windows 2000
3414 Function afs.InstallMSLoopback
3415    GetTempFileName $R0
3416    File /oname=$R0 "${AFS_WININSTALL_DIR}\afsloopback.dll"
3417    nsExec::Exec "rundll32.exe $R0 doLoopBackEntry AFS 10.254.254.253 255.255.255.252"
3418    Delete $R0
3419 FunctionEnd
3420
3421 Function afs.isLoopbackInstalled
3422    SetOutPath $TEMP
3423    File "${AFS_WININSTALL_DIR}\afsloopback.dll"
3424    System::Call "$TEMP\afsloopback.dll::IsLoopbackInstalled() i().r11"
3425    Delete "$TEMP\afsloopback.dll"
3426 FunctionEnd
3427
3428
3429 ; GetWindowsVersion
3430 ;
3431 ; Based on Yazno's function, http://yazno.tripod.com/powerpimpit/
3432 ; Updated by Joost Verburg
3433 ;
3434 ; Returns on top of stack
3435 ;
3436 ; Windows Version (95, 98, ME, NT x.x, 2000, XP, 2003)
3437 ; or
3438 ; '' (Unknown Windows Version)
3439 ;
3440 ; Usage:
3441 ;   Call GetWindowsVersion
3442 ;   Pop $R0
3443 ;   ; at this point $R0 is "NT 4.0" or whatnot
3444
3445 Function GetWindowsVersion
3446
3447   Push $R0
3448   Push $R1
3449
3450   ClearErrors
3451
3452   ReadRegStr $R0 HKLM \
3453   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
3454
3455   IfErrors 0 lbl_winnt
3456   
3457   ; we are not NT
3458   ReadRegStr $R0 HKLM \
3459   "SOFTWARE\Microsoft\Windows\CurrentVersion" VersionNumber
3460
3461   StrCpy $R1 $R0 1
3462   StrCmp $R1 '4' 0 lbl_error
3463
3464   StrCpy $R1 $R0 3
3465
3466   StrCmp $R1 '4.0' lbl_win32_95
3467   StrCmp $R1 '4.9' lbl_win32_ME lbl_win32_98
3468
3469   lbl_win32_95:
3470     StrCpy $R0 '95'
3471   Goto lbl_done
3472
3473   lbl_win32_98:
3474     StrCpy $R0 '98'
3475   Goto lbl_done
3476
3477   lbl_win32_ME:
3478     StrCpy $R0 'ME'
3479   Goto lbl_done
3480
3481   lbl_winnt:
3482
3483   StrCpy $R1 $R0 1
3484
3485   StrCmp $R1 '3' lbl_winnt_x
3486   StrCmp $R1 '4' lbl_winnt_x
3487
3488   StrCpy $R1 $R0 3
3489
3490   StrCmp $R1 '5.0' lbl_winnt_2000
3491   StrCmp $R1 '5.1' lbl_winnt_XP
3492   StrCmp $R1 '5.2' lbl_winnt_2003 lbl_error
3493
3494   lbl_winnt_x:
3495     StrCpy $R0 "NT $R0" 6
3496   Goto lbl_done
3497
3498   lbl_winnt_2000:
3499     Strcpy $R0 '2000'
3500   Goto lbl_done
3501
3502   lbl_winnt_XP:
3503     Strcpy $R0 'XP'
3504   Goto lbl_done
3505
3506   lbl_winnt_2003:
3507     Strcpy $R0 '2003'
3508   Goto lbl_done
3509
3510   lbl_error:
3511     Strcpy $R0 ''
3512   lbl_done:
3513
3514   Pop $R1
3515   Exch $R0
3516
3517 FunctionEnd
3518
3519
3520 ; Author: Lilla (lilla@earthlink.net) 2003-06-13
3521 ; function IsUserAdmin uses plugin \NSIS\PlusgIns\UserInfo.dll
3522 ; This function is based upon code in \NSIS\Contrib\UserInfo\UserInfo.nsi
3523 ; This function was tested under NSIS 2 beta 4 (latest CVS as of this writing).
3524 ;
3525 ; Usage:
3526 ;   Call IsUserAdmin
3527 ;   Pop $R0   ; at this point $R0 is "true" or "false"
3528 ;
3529 Function IsUserAdmin
3530 Push $R0
3531 Push $R1
3532 Push $R2
3533
3534 ClearErrors
3535 UserInfo::GetName
3536 IfErrors Win9x
3537 Pop $R1
3538 UserInfo::GetAccountType
3539 Pop $R2
3540
3541 StrCmp $R2 "Admin" 0 Continue
3542 ; Observation: I get here when running Win98SE. (Lilla)
3543 ; The functions UserInfo.dll looks for are there on Win98 too, 
3544 ; but just don't work. So UserInfo.dll, knowing that admin isn't required
3545 ; on Win98, returns admin anyway. (per kichik)
3546 ; MessageBox MB_OK 'User "$R1" is in the Administrators group'
3547 StrCpy $R0 "true"
3548 Goto Done
3549
3550 Continue:
3551 ; You should still check for an empty string because the functions
3552 ; UserInfo.dll looks for may not be present on Windows 95. (per kichik)
3553 StrCmp $R2 "" Win9x
3554 StrCpy $R0 "false"
3555 ;MessageBox MB_OK 'User "$R1" is in the "$R2" group'
3556 Goto Done
3557
3558 Win9x:
3559 ; comment/message below is by UserInfo.nsi author:
3560 ; This one means you don't need to care about admin or
3561 ; not admin because Windows 9x doesn't either
3562 ;MessageBox MB_OK "Error! This DLL can't run under Windows 9x!"
3563 StrCpy $R0 "false"
3564
3565 Done:
3566 ;MessageBox MB_OK 'User= "$R1"  AccountType= "$R2"  IsUserAdmin= "$R0"'
3567
3568 Pop $R2
3569 Pop $R1
3570 Exch $R0
3571 FunctionEnd
3572
3573 ; GetParent
3574  ; input, top of stack  (e.g. C:\Program Files\Poop)
3575  ; output, top of stack (replaces, with e.g. C:\Program Files)
3576  ; modifies no other variables.
3577  ;
3578  ; Usage:
3579  ;   Push "C:\Program Files\Directory\Whatever"
3580  ;   Call GetParent
3581  ;   Pop $R0
3582  ;   ; at this point $R0 will equal "C:\Program Files\Directory"
3583
3584 Function GetParent
3585
3586   Exch $R0
3587   Push $R1
3588   Push $R2
3589   Push $R3
3590   
3591   StrCpy $R1 0
3592   StrLen $R2 $R0
3593   
3594   loop:
3595     IntOp $R1 $R1 + 1
3596     IntCmp $R1 $R2 get 0 get
3597     StrCpy $R3 $R0 1 -$R1
3598     StrCmp $R3 "\" get
3599   Goto loop
3600   
3601   get:
3602     StrCpy $R0 $R0 -$R1
3603     
3604     Pop $R3
3605     Pop $R2
3606     Pop $R1
3607     Exch $R0
3608     
3609 FunctionEnd
3610
3611
3612 ;--------------------------------
3613 ;Handle what must and what must not be installed
3614 Function .onSelChange
3615    ; If they install the server, they MUST install the client
3616    SectionGetFlags ${secServer} $R0
3617    IntOp $R0 $R0 & ${SF_SELECTED}
3618    StrCmp $R0 "1" MakeClientSelected
3619    
3620    ; If they install the control center, we'll give them the client.
3621    ; It may not be required, but it's a bit more useful
3622    SectionGetFlags ${secControl} $R0
3623    IntOp $R0 $R0 & ${SF_SELECTED}
3624    StrCmp $R0 "1" MakeClientSelected
3625    goto end
3626    
3627 MakeClientSelected:
3628    SectionGetFlags ${secClient} $R0
3629    IntOp $R0 $R0 | ${SF_SELECTED}
3630    SectionSetFlags ${secClient} $R0
3631    
3632 end:
3633 FunctionEnd
3634
3635 Function RegWriteMultiStr
3636 !define HKEY_CLASSES_ROOT        0x80000000
3637 !define HKEY_CURRENT_USER        0x80000001
3638 !define HKEY_LOCAL_MACHINE       0x80000002
3639 !define HKEY_USERS               0x80000003
3640 !define HKEY_PERFORMANCE_DATA    0x80000004
3641 !define HKEY_PERFORMANCE_TEXT    0x80000050
3642 !define HKEY_PERFORMANCE_NLSTEXT 0x80000060
3643 !define HKEY_CURRENT_CONFIG      0x80000005
3644 !define HKEY_DYN_DATA            0x80000006
3645
3646 !define KEY_QUERY_VALUE          0x0001
3647 !define KEY_SET_VALUE            0x0002
3648 !define KEY_CREATE_SUB_KEY       0x0004
3649 !define KEY_ENUMERATE_SUB_KEYS   0x0008
3650 !define KEY_NOTIFY               0x0010
3651 !define KEY_CREATE_LINK          0x0020
3652
3653 !define REG_NONE                 0
3654 !define REG_SZ                   1
3655 !define REG_EXPAND_SZ            2
3656 !define REG_BINARY               3
3657 !define REG_DWORD                4
3658 !define REG_DWORD_LITTLE_ENDIAN  4
3659 !define REG_DWORD_BIG_ENDIAN     5
3660 !define REG_LINK                 6
3661 !define REG_MULTI_SZ             7
3662
3663 !define RegCreateKey             "Advapi32::RegCreateKeyA(i, t, *i) i"
3664 !define RegSetValueEx            "Advapi32::RegSetValueExA(i, t, i, i, i, i) i"
3665 !define RegCloseKey              "Advapi32::RegCloseKeyA(i) i"
3666
3667   Exch $R0
3668   Push $1
3669   Push $2
3670   Push $9
3671
3672   SetPluginUnload alwaysoff
3673   ; Create a buffer for the multi_sz value
3674   System::Call "*(&t${NSIS_MAX_STRLEN}) i.r1"
3675   ; Open/create the registry key
3676   System::Call "${RegCreateKey}(${HKEY_LOCAL_MACHINE}, '$REG_SUB_KEY', .r0) .r9"
3677   ; Failed?
3678   IntCmp $9 0 write
3679     MessageBox MB_OK|MB_ICONSTOP "Can't create registry key! ($9)"
3680     Goto noClose
3681
3682   write:
3683     ; Fill in the buffer with our strings
3684     StrCpy $2 $1                            ; Initial position
3685
3686     StrLen $9 '$REG_DATA_1'                 ; Length of first string
3687     IntOp $9 $9 + 1                         ; Plus null
3688     System::Call "*$2(&t$9 '$REG_DATA_1')"  ; Place the string
3689     IntOp $2 $2 + $9                        ; Advance to the next position
3690
3691     StrCmp '$REG_DATA_2' "" terminate
3692     StrLen $9 '$REG_DATA_2'                 ; Length of second string
3693     IntOp $9 $9 + 1                         ; Plus null
3694     System::Call "*$2(&t$9 '$REG_DATA_2')"  ; Place the string
3695     IntOp $2 $2 + $9                        ; Advance to the next position
3696
3697     StrCmp '$REG_DATA_3' "" terminate
3698     StrLen $9 '$REG_DATA_3'                 ; Length of third string
3699     IntOp $9 $9 + 1                         ; Plus null
3700     System::Call "*$2(&t$9 '$REG_DATA_3')"  ; Place the string
3701     IntOp $2 $2 + $9                        ; Advance to the next position
3702
3703   terminate:
3704     System::Call "*$2(&t1 '')"              ; Place the terminating null
3705     IntOp $2 $2 + 1                         ; Advance to the next position
3706
3707     ; Create/write the value
3708     IntOp $2 $2 - $1                        ; Total length
3709     System::Call "${RegSetValueEx}(r0, '$REG_VALUE', 0, ${REG_MULTI_SZ}, r1, r2) .r9"
3710     ; Failed?
3711     IntCmp $9 0 done
3712       MessageBox MB_OK|MB_ICONSTOP "Can't set key value! ($9)"
3713       Goto done
3714
3715   done:
3716     ; Close the registry key
3717     System::Call "${RegCloseKey}(r0)"
3718
3719 noClose:
3720   ; Clear the buffer
3721   SetPluginUnload manual
3722   System::Free $1
3723
3724   Pop $9
3725   Pop $2
3726   Pop $1
3727   Exch $R0
3728 FunctionEnd