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