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