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