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