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