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