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