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