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