1ae1183158a88f5dcdca54d5ba7138f6091b6bfd
[obnox/wireshark/wip.git] / packaging / nsis / wireshark.nsi
1 ;
2 ; wireshark.nsi
3 ;
4 ; $Id$
5
6  
7 !ifdef MAKENSIS_MODERN_UI
8 ; Set the compression mechanism first.
9 ; As of NSIS 2.07, solid compression which makes installer about 1MB smaller 
10 ; is no longer the default, so use the /SOLID switch.
11 ; This unfortunately is unknown to NSIS prior to 2.07 and creates an error.
12 ; So if you get an error here, please update to at least NSIS 2.07!
13 SetCompressor /SOLID lzma
14 !endif
15
16 !ifdef GTK1_DIR & GTK2_DIR
17 InstType "Wireshark (GTK2 user interface)"
18 InstType "Wireshark (legacy GTK1 user interface)"
19 !endif
20
21 InstType "un.Default (keep Personal Settings and WinPcap)"
22 InstType "un.All (remove all)"
23
24 ; Used to refresh the display of file association
25 !define SHCNE_ASSOCCHANGED 0x08000000
26 !define SHCNF_IDLIST 0
27
28 ; Used to add associations between file extensions and Wireshark
29 !define WIRESHARK_ASSOC "wireshark-file"
30
31 ; ============================================================================
32 ; Header configuration
33 ; ============================================================================
34 ; The name of the installer
35 !define PROGRAM_NAME "Wireshark"
36
37 Name "${PROGRAM_NAME} ${VERSION}"
38
39 ; The file to write
40 OutFile "${DEST}-setup-${VERSION}.exe"
41
42 ; Icon of installer and uninstaller
43 Icon "..\..\image\wireshark.ico"
44 UninstallIcon "..\..\image\wireshark.ico"
45
46 ; Uninstall stuff (NSIS 2.08: "\r\n" don't work here)
47 !define MUI_UNCONFIRMPAGE_TEXT_TOP "The following Wireshark installation will be uninstalled. Click 'Next' to continue."
48 ; Uninstall stuff (this text isn't used with the MODERN_UI!)
49 ;UninstallText "This will uninstall Wireshark.\r\nBefore starting the uninstallation, make sure Wireshark is not running.\r\nClick 'Next' to continue."
50
51 XPStyle on
52
53
54 !ifdef MAKENSIS_MODERN_UI
55
56 ; ============================================================================
57 ; Modern UI
58 ; ============================================================================
59 ; The modern user interface will look much better than the common one.
60 ; However, as the development of the modern UI is still going on, and the script
61 ; syntax changes, you will need exactly that NSIS version, which this script is
62 ; made for. This is the current (December 2003) latest version: V2.0b4
63 ; If you are using a different version, it's not predictable what will happen.
64
65 !include "MUI.nsh"
66 ;!addplugindir ".\Plugins"
67
68 !define MUI_ICON "..\..\image\wireshark.ico"
69 !define MUI_UNICON "..\..\image\wireshark.ico"
70
71 !define MUI_COMPONENTSPAGE_SMALLDESC
72 !define MUI_FINISHPAGE_NOAUTOCLOSE
73 !define MUI_UNFINISHPAGE_NOAUTOCLOSE
74 !define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Wireshark.\r\n\r\nBefore starting the installation, make sure Wireshark is not running.\r\n\r\nClick 'Next' to continue."
75 ;!define MUI_FINISHPAGE_LINK "Install WinPcap to be able to capture packets from a network!"
76 ;!define MUI_FINISHPAGE_LINK_LOCATION "http://www.winpcap.org"
77
78 ; NSIS shows Readme files by opening the Readme file with the default application for
79 ; the file's extension. "README.win32" won't work in most cases, because extension "win32" 
80 ; is usually not associated with an appropriate text editor. We should use extension "txt" 
81 ; for a text file or "html" for an html README file.  
82 !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\NEWS.txt"
83 !define MUI_FINISHPAGE_SHOWREADME_TEXT "Show News"
84 !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
85 !define MUI_FINISHPAGE_RUN "$INSTDIR\wireshark.exe"
86 !define MUI_FINISHPAGE_RUN_NOTCHECKED
87
88
89
90 !define MUI_PAGE_CUSTOMFUNCTION_SHOW myShowCallback
91
92 ; ============================================================================
93 ; MUI Pages
94 ; ============================================================================
95
96 !insertmacro MUI_PAGE_WELCOME
97 !insertmacro MUI_PAGE_LICENSE "..\..\COPYING"
98 !insertmacro MUI_PAGE_COMPONENTS
99 Page custom DisplayAdditionalTasksPage
100 !insertmacro MUI_PAGE_DIRECTORY
101 Page custom DisplayWinPcapPage
102 !insertmacro MUI_PAGE_INSTFILES
103 !insertmacro MUI_PAGE_FINISH
104  
105 !insertmacro MUI_UNPAGE_WELCOME
106 !insertmacro MUI_UNPAGE_CONFIRM
107 !insertmacro MUI_UNPAGE_COMPONENTS
108 !insertmacro MUI_UNPAGE_INSTFILES
109 !insertmacro MUI_UNPAGE_FINISH
110
111 ; ============================================================================
112 ; MUI Languages
113 ; ============================================================================
114  
115 !insertmacro MUI_LANGUAGE "English"
116
117 !endif ; MAKENSIS_MODERN_UI
118
119 ; ============================================================================
120 ; Reserve Files
121 ; ============================================================================
122   
123   ;Things that need to be extracted on first (keep these lines before any File command!)
124   ;Only useful for BZIP2 compression
125   
126   ReserveFile "AdditionalTasksPage.ini"
127   ReserveFile "WinPcapPage.ini"
128   !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
129
130 ; ============================================================================
131 ; Section macros
132 ; ============================================================================
133 !include "Sections.nsh"
134
135 ; ========= Macro to unselect and disable a section =========
136
137 !macro DisableSection SECTION
138
139   Push $0
140     SectionGetFlags "${SECTION}" $0
141     IntOp $0 $0 & ${SECTION_OFF}
142     IntOp $0 $0 | ${SF_RO}
143     SectionSetFlags "${SECTION}" $0
144   Pop $0
145
146 !macroend
147
148 ; ========= Macro to enable (unreadonly) a section =========
149 !define SECTION_ENABLE   0xFFFFFFEF
150 !macro EnableSection SECTION
151
152   Push $0
153     SectionGetFlags "${SECTION}" $0
154     IntOp $0 $0 & ${SECTION_ENABLE}
155     SectionSetFlags "${SECTION}" $0
156   Pop $0
157
158 !macroend
159
160 ; ============================================================================
161 ; Services
162 ; ============================================================================
163 !include "servicelib.nsh"
164
165 ; ============================================================================
166 ; Command Line
167 ; ============================================================================
168 !include "FileFunc.nsh"
169
170 !insertmacro GetParameters
171 !insertmacro GetOptions
172
173 ; ============================================================================
174 ; License page configuration
175 ; ============================================================================
176 LicenseText "Wireshark is distributed under the GNU General Public License."
177 LicenseData "..\..\COPYING"
178
179 ; ============================================================================
180 ; Component page configuration
181 ; ============================================================================
182 ComponentText "The following components are available for installation."
183
184 ; Component check boxes
185 ; Commented out for NSIS v 2.0
186 ; EnabledBitmap "..\..\image\nsis-checked.bmp"
187 ; DisabledBitmap "..\..\image\nsis-unchecked.bmp"
188
189 ; ============================================================================
190 ; Directory selection page configuration
191 ; ============================================================================
192 ; The text to prompt the user to enter a directory
193 DirText "Choose a directory in which to install Wireshark."
194
195 ; The default installation directory
196 InstallDir $PROGRAMFILES\Wireshark\
197
198 ; See if this is an upgrade; if so, use the old InstallDir as default
199 InstallDirRegKey HKEY_LOCAL_MACHINE SOFTWARE\Wireshark "InstallDir"
200
201
202 ; ============================================================================
203 ; Install page configuration
204 ; ============================================================================
205 ShowInstDetails show
206 ShowUninstDetails show
207
208 ; ============================================================================
209 ; Functions and macros
210 ; ============================================================================
211 !macro UpdateIcons
212         Push $R0
213         Push $R1
214         Push $R2
215
216         !define UPDATEICONS_UNIQUE ${__LINE__}
217
218         IfFileExists "$SYSDIR\shell32.dll" UpdateIcons.next1_${UPDATEICONS_UNIQUE} UpdateIcons.error1_${UPDATEICONS_UNIQUE} 
219 UpdateIcons.next1_${UPDATEICONS_UNIQUE}:        
220         GetDllVersion "$SYSDIR\shell32.dll" $R0 $R1
221         IntOp $R2 $R0 / 0x00010000
222         IntCmp $R2 4 UpdateIcons.next2_${UPDATEICONS_UNIQUE} UpdateIcons.error2_${UPDATEICONS_UNIQUE}
223 UpdateIcons.next2_${UPDATEICONS_UNIQUE}:        
224         System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' 
225         Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}     
226         
227 UpdateIcons.error1_${UPDATEICONS_UNIQUE}: 
228         MessageBox MB_OK|MB_ICONSTOP  "Can't find 'shell32.dll' library. Impossible to update icons" 
229         Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
230 UpdateIcons.error2_${UPDATEICONS_UNIQUE}:       
231         MessageBox MB_OK|MB_ICONINFORMATION "You should install the free 'Microsoft Layer for Unicode' to update Wireshark capture file icons" 
232         Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
233 UpdateIcons.quit_${UPDATEICONS_UNIQUE}: 
234         !undef UPDATEICONS_UNIQUE
235         Pop $R2
236         Pop $R1
237         Pop $R0
238
239 !macroend
240
241 Function Associate
242         ; $R0 should contain the prefix to associate to Wireshark
243         Push $R1
244         
245         ReadRegStr $R1 HKCR $R0 ""
246         StrCmp $R1 "" Associate.doRegister
247         Goto Associate.end
248 Associate.doRegister:
249         ;The extension is not associated to any program, we can do the link
250         WriteRegStr HKCR $R0 "" ${WIRESHARK_ASSOC}
251 Associate.end:
252         pop $R1
253 FunctionEnd
254
255 Function un.unlink
256         ; $R0 should contain the prefix to unlink
257         Push $R1
258         
259         ReadRegStr $R1 HKCR $R0 ""
260         StrCmp $R1 ${WIRESHARK_ASSOC} un.unlink.doUnlink
261         Goto un.unlink.end
262 un.unlink.doUnlink:
263         ; The extension is associated with Wireshark so, we must destroy this!
264         DeleteRegKey HKCR $R0   
265 un.unlink.end:  
266         pop $R1
267 FunctionEnd
268
269 Function .onInit
270   ;Extract InstallOptions INI files
271   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "AdditionalTasksPage.ini"  
272   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "WinpcapPage.ini"  
273 FunctionEnd
274
275 Function DisplayAdditionalTasksPage
276   !insertmacro MUI_HEADER_TEXT "Select Additional Tasks" "Which additional tasks should be done?"
277   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "AdditionalTasksPage.ini"
278 FunctionEnd
279
280 Function DisplayWinPcapPage
281   !insertmacro MUI_HEADER_TEXT "Install WinPcap?" "WinPcap is required to capture live network data. Should WinPcap be installed?"
282   !insertmacro MUI_INSTALLOPTIONS_DISPLAY "WinPcapPage.ini"
283 FunctionEnd
284
285 ; ============================================================================
286 ; Installation execution commands
287 ; ============================================================================
288
289 Var WINPCAP_UNINSTALL ;declare variable for holding the value of a registry key
290 ;Var WIRESHARK_UNINSTALL ;declare variable for holding the value of a registry key
291
292 Section "-Required"
293 ;-------------------------------------------
294
295 ;
296 ; Install for every user
297 ;
298 !ifdef GTK1_DIR & GTK2_DIR
299 SectionIn 1 2 RO
300 !endif
301 SetShellVarContext all
302
303
304
305 SetOutPath $INSTDIR
306 File "..\..\wiretap\wiretap-${WTAP_VERSION}.dll"
307 !ifdef ENABLE_LIBWIRESHARK
308 File "..\..\epan\libwireshark.dll"
309 !endif
310 File "${GLIB_DIR}\bin\libglib-2.0-0.dll"
311 File "${GLIB_DIR}\bin\libgmodule-2.0-0.dll"
312 File "${GLIB_DIR}\bin\libgobject-2.0-0.dll"
313 File "${ICONV_DIR}\bin\iconv.dll"
314 File "${GETTEXT_DIR}\bin\intl.dll"
315 !ifdef ZLIB_DIR
316 File "${ZLIB_DIR}\zlib1.dll"
317 !endif
318 !ifdef ADNS_DIR
319 File "${ADNS_DIR}\adns_win32\LIB\adns_dll.dll"
320 !endif
321 !ifdef PCRE_DIR
322 File "${PCRE_DIR}\bin\pcre.dll"
323 File "${PCRE_DIR}\man\cat3\pcrepattern.3.txt"
324 !endif
325 File "..\..\FAQ"
326 File "..\..\README"
327 File "..\..\README.win32"
328 File "..\..\AUTHORS-SHORT"
329 File "..\..\AUTHORS-SHORT-FORMAT"
330 File "..\..\COPYING"
331 File "NEWS.txt"
332 File "..\..\manuf"
333 File "..\..\doc\wireshark.html"
334 File "..\..\doc\wireshark-filter.html"
335 File "..\..\dumpcap.exe"
336 File "..\..\doc\dumpcap.html"
337
338 ; global config files - don't overwrite if already existing 
339 ;IfFileExists cfilters dont_overwrite_cfilters
340 File "..\..\cfilters"
341 ;dont_overwrite_cfilters:
342 ;IfFileExists colorfilters dont_overwrite_colorfilters
343 File "..\..\colorfilters"
344 ;dont_overwrite_colorfilters:
345 ;IfFileExists dfilters dont_overwrite_dfilters
346 File "..\..\dfilters"
347 ;dont_overwrite_dfilters:
348
349
350 ;
351 ; Install the Diameter DTD and XML files in the "diameter" subdirectory
352 ; of the installation directory.
353
354 SetOutPath $INSTDIR\diameter
355 File "..\..\diameter\chargecontrol.xml"
356 File "..\..\diameter\dictionary.dtd"
357 File "..\..\diameter\dictionary.xml"
358 File "..\..\diameter\imscxdx.xml"
359 File "..\..\diameter\mobileipv4.xml"
360 File "..\..\diameter\nasreq.xml"
361 File "..\..\diameter\sunping.xml"
362 File "..\..\diameter\TGPPSh.xml"
363 SetOutPath $INSTDIR
364
365
366
367 ;
368 ; Install the RADIUS directory files in the "radius" subdirectory
369 ; of the installation directory.
370 ;
371 SetOutPath $INSTDIR\radius
372 File "..\..\radius\dictionary"
373 File "..\..\radius\dictionary.3com"
374 File "..\..\radius\dictionary.3gpp"
375 File "..\..\radius\dictionary.3gpp2"
376 File "..\..\radius\dictionary.acc"
377 File "..\..\radius\dictionary.alcatel"
378 File "..\..\radius\dictionary.alteon"
379 File "..\..\radius\dictionary.altiga"
380 File "..\..\radius\dictionary.aptis"
381 File "..\..\radius\dictionary.ascend"
382 File "..\..\radius\dictionary.bay"
383 File "..\..\radius\dictionary.bintec"
384 File "..\..\radius\dictionary.bristol"
385 File "..\..\radius\dictionary.cablelabs"
386 File "..\..\radius\dictionary.cabletron"
387 File "..\..\radius\dictionary.cisco"
388 File "..\..\radius\dictionary.cisco.bbsm"
389 File "..\..\radius\dictionary.cisco.vpn3000"
390 File "..\..\radius\dictionary.cisco.vpn5000"
391 File "..\..\radius\dictionary.colubris"
392 File "..\..\radius\dictionary.columbia_university"
393 File "..\..\radius\dictionary.compat"
394 File "..\..\radius\dictionary.cosine"
395 File "..\..\radius\dictionary.ericsson"
396 File "..\..\radius\dictionary.erx"
397 File "..\..\radius\dictionary.extreme"
398 File "..\..\radius\dictionary.foundry"
399 File "..\..\radius\dictionary.freeradius"
400 File "..\..\radius\dictionary.gandalf"
401 File "..\..\radius\dictionary.garderos"
402 File "..\..\radius\dictionary.gemtek"
403 File "..\..\radius\dictionary.itk"
404 File "..\..\radius\dictionary.juniper"
405 File "..\..\radius\dictionary.karlnet"
406 File "..\..\radius\dictionary.livingston"
407 File "..\..\radius\dictionary.localweb"
408 File "..\..\radius\dictionary.merit"
409 File "..\..\radius\dictionary.microsoft"
410 File "..\..\radius\dictionary.mikrotik"
411 File "..\..\radius\dictionary.navini"
412 File "..\..\radius\dictionary.netscreen"
413 File "..\..\radius\dictionary.nokia"
414 File "..\..\radius\dictionary.nomadix"
415 File "..\..\radius\dictionary.propel"
416 File "..\..\radius\dictionary.quintum"
417 File "..\..\radius\dictionary.redback"
418 File "..\..\radius\dictionary.redcreek"
419 File "..\..\radius\dictionary.shasta"
420 File "..\..\radius\dictionary.shiva"
421 File "..\..\radius\dictionary.sonicwall"
422 File "..\..\radius\dictionary.springtide"
423 File "..\..\radius\dictionary.t_systems_nova"
424 File "..\..\radius\dictionary.telebit"
425 File "..\..\radius\dictionary.trapeze"
426 File "..\..\radius\dictionary.tunnel"
427 File "..\..\radius\dictionary.unisphere"
428 File "..\..\radius\dictionary.unix"
429 File "..\..\radius\dictionary.usr"
430 File "..\..\radius\dictionary.valemount"
431 File "..\..\radius\dictionary.versanet"
432 File "..\..\radius\dictionary.wispr"
433 File "..\..\radius\dictionary.xedia"
434 SetOutPath $INSTDIR
435
436 ;
437 ; install the dtds in the dtds subdirectory
438 ;
439 SetOutPath $INSTDIR\dtds
440 File "..\..\dtds\dc.dtd"
441 File "..\..\dtds\itunes.dtd"
442 File "..\..\dtds\pocsettings.dtd"
443 File "..\..\dtds\presence.dtd"
444 File "..\..\dtds\reginfo.dtd"
445 File "..\..\dtds\rss.dtd"
446 File "..\..\dtds\smil.dtd"
447 File "..\..\dtds\watcherinfo.dtd"
448 SetOutPath $INSTDIR
449
450 SetOutPath $INSTDIR\help
451 File "..\..\help\toc"
452 File "..\..\help\overview.txt"
453 File "..\..\help\getting_started.txt"
454 File "..\..\help\capturing.txt"
455 File "..\..\help\capture_filters.txt"
456 File "..\..\help\display_filters.txt"
457 File "..\..\help\faq.txt"
458
459 ; Write the uninstall keys for Windows
460 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "DisplayVersion" "${VERSION}"
461 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "DisplayName" "Wireshark ${VERSION}"
462 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "UninstallString" '"$INSTDIR\uninstall.exe"'
463 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "Publisher" "The Wireshark developer community, http://www.wireshark.org"
464 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "HelpLink" "mailto:wireshark-users@wireshark.org"
465 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "URLInfoAbout" "http://www.wireshark.org"
466 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "URLUpdateInfo" "http://www.wireshark.org/distribution/win32/"
467 WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "NoModify" 1
468 WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "NoRepair" 1
469 WriteUninstaller "uninstall.exe"
470
471 ; Write an entry for ShellExecute
472 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\wireshark.exe" "" '$INSTDIR\wireshark.exe'
473 WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\wireshark.exe" "Path" '$INSTDIR'
474
475 ; Create start menu entries (depending on additional tasks page)
476 ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 2" "State"
477 StrCmp $0 "0" SecRequired_skip_StartMenu
478 SetOutPath $PROFILE
479 CreateDirectory "$SMPROGRAMS\Wireshark"
480 ; To qoute "http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch11d.asp":
481 ; "Do not include Readme, Help, or Uninstall entries on the Programs menu."
482 Delete "$SMPROGRAMS\Wireshark\Wireshark Web Site.lnk"
483 ;WriteINIStr "$SMPROGRAMS\Wireshark\Wireshark Web Site.url" "InternetShortcut" "URL" "http://www.wireshark.org/"
484 CreateShortCut "$SMPROGRAMS\Wireshark\Wireshark.lnk" "$INSTDIR\wireshark.exe" "" "$INSTDIR\wireshark.exe" 0 "" "" "The Wireshark Network Protocol Analyzer"
485 ;CreateShortCut "$SMPROGRAMS\Wireshark\Wireshark Manual.lnk" "$INSTDIR\wireshark.html"
486 ;CreateShortCut "$SMPROGRAMS\Wireshark\Display Filters Manual.lnk" "$INSTDIR\wireshark-filter.html"
487 CreateShortCut "$SMPROGRAMS\Wireshark\Wireshark Program Directory.lnk" \
488           "$INSTDIR"
489 ;CreateShortCut "$SMPROGRAMS\Wireshark\Uninstall Wireshark.lnk" "$INSTDIR\uninstall.exe"
490 SecRequired_skip_StartMenu:
491
492 ; is command line option "/desktopicon" set?
493 ${GetParameters} $R0
494 ${GetOptions} $R0 "/desktopicon=" $R1
495 StrCmp $R1 "no" SecRequired_skip_DesktopIcon
496 StrCmp $R1 "yes" SecRequired_install_DesktopIcon
497
498 ; Create desktop icon (depending on additional tasks page and command line option)
499 ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 3" "State"
500 StrCmp $0 "0" SecRequired_skip_DesktopIcon
501 SecRequired_install_DesktopIcon:
502 CreateShortCut "$DESKTOP\Wireshark.lnk" "$INSTDIR\wireshark.exe" "" "$INSTDIR\wireshark.exe" 0 "" "" "The Wireshark Network Protocol Analyzer"
503 SecRequired_skip_DesktopIcon:
504
505 ; is command line option "/quicklaunchicon" set?
506 ${GetParameters} $R0
507 ${GetOptions} $R0 "/quicklaunchicon=" $R1
508 StrCmp $R1 "no" SecRequired_skip_QuickLaunchIcon
509 StrCmp $R1 "yes" SecRequired_install_QuickLaunchIcon
510
511 ; Create quick launch icon (depending on additional tasks page and command line option)
512 ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 4" "State"
513 StrCmp $0 "0" SecRequired_skip_QuickLaunchIcon
514 SecRequired_install_QuickLaunchIcon:
515 CreateShortCut "$QUICKLAUNCH\Wireshark.lnk" "$INSTDIR\wireshark.exe" "" "$INSTDIR\wireshark.exe" 0 "" "" "The Wireshark Network Protocol Analyzer"
516 SecRequired_skip_QuickLaunchIcon:
517
518 ; Create File Extensions (depending on additional tasks page)
519 ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 6" "State"
520 StrCmp $0 "0" SecRequired_skip_FileExtensions
521 WriteRegStr HKCR ${WIRESHARK_ASSOC} "" "Wireshark file"
522 WriteRegStr HKCR "${WIRESHARK_ASSOC}\Shell\open\command" "" '"$INSTDIR\wireshark.exe" "%1"'
523 WriteRegStr HKCR "${WIRESHARK_ASSOC}\DefaultIcon" "" '"$INSTDIR\wireshark.exe",0'
524 push $R0
525         StrCpy $R0 ".5vw"
526         Call Associate
527         StrCpy $R0 ".acp"
528         Call Associate
529         StrCpy $R0 ".apc"
530         Call Associate
531         StrCpy $R0 ".atc"
532         Call Associate
533         StrCpy $R0 ".bfr"
534         Call Associate
535         StrCpy $R0 ".cap"
536         Call Associate
537         StrCpy $R0 ".enc"
538         Call Associate
539         StrCpy $R0 ".erf"
540         Call Associate
541         StrCpy $R0 ".fdc"
542         Call Associate
543         StrCpy $R0 ".pcap"
544         Call Associate
545         StrCpy $R0 ".pkt"
546         Call Associate
547         StrCpy $R0 ".snoop"
548         Call Associate
549         StrCpy $R0 ".syc"
550         Call Associate
551         StrCpy $R0 ".tpc"
552         Call Associate
553         StrCpy $R0 ".tr1"
554         Call Associate
555         StrCpy $R0 ".trace"
556         Call Associate
557         StrCpy $R0 ".trc"
558         Call Associate          
559         StrCpy $R0 ".wpc"
560         Call Associate
561         StrCpy $R0 ".wpz"
562         Call Associate
563 ; if somethings added here, add it also to the uninstall section and the AdditionalTask page
564 pop $R0
565 !insertmacro UpdateIcons
566 SecRequired_skip_FileExtensions:
567
568 ; if running as a silent installer, don't try to install winpcap
569 IfSilent SecRequired_skip_Winpcap
570
571 ; Install WinPcap (depending on winpcap page setting)
572 ReadINIStr $0 "$PLUGINSDIR\WinPcapPage.ini" "Field 4" "State"
573 StrCmp $0 "0" SecRequired_skip_Winpcap
574 ; Uinstall old WinPcap first
575 ReadRegStr $WINPCAP_UNINSTALL HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString"
576 IfErrors lbl_winpcap_notinstalled ;if RegKey is unavailable, WinPcap is not installed
577 ; from released version 3.1, WinPcap will uninstall an old version by itself
578 ;ExecWait '$WINPCAP_UNINSTALL' $0
579 ;DetailPrint "WinPcap uninstaller returned $0"
580 lbl_winpcap_notinstalled:
581 SetOutPath $INSTDIR
582 File "WinPcap_3_1.exe"
583 ExecWait '"$INSTDIR\WinPcap_3_1.exe"' $0
584 DetailPrint "WinPcap installer returned $0"
585 SecRequired_skip_Winpcap:
586
587 ; Load Winpcap NPF service at startup (depending on winpcap page)
588 ReadINIStr $0 "$PLUGINSDIR\WinPcapPage.ini" "Field 8" "State"
589 StrCmp $0 "0" SecRequired_no_WinpcapService
590 WriteRegDWORD HKEY_LOCAL_MACHINE "SYSTEM\CurrentControlSet\Services\NPF" "Start" 2 ;set NPF to (SERVICE_AUTO_START)
591 !insertmacro SERVICE "start" "NPF" ""
592 Goto SecRequired_done_WinpcapService
593 SecRequired_no_WinpcapService:
594 WriteRegDWORD HKEY_LOCAL_MACHINE "SYSTEM\CurrentControlSet\Services\NPF" "Start" 3 ;set NPF to (SERVICE_DEMAND_START)
595 !insertmacro SERVICE "stop" "NPF" ""
596 SecRequired_done_WinpcapService:
597
598 ; If no user profile exists for Wireshark but for Ethereal, copy it over
599 SetShellVarContext current
600 IfFileExists $APPDATA\Wireshark profile_done
601 IfFileExists $APPDATA\Ethereal 0 profile_done
602 ;MessageBox MB_YESNO "This seems to be the first time you use Wireshark. Copy over the personal settings from Ethereal?" /SD IDYES IDNO profile_done
603 CreateDirectory $APPDATA\Wireshark
604 CopyFiles $APPDATA\Ethereal\*.* $APPDATA\Wireshark
605 profile_done:
606 SetShellVarContext all
607
608 SectionEnd ; "Required"
609
610
611 SectionGroup "!Wireshark" SecWiresharkGroup
612
613 !ifdef GTK1_DIR
614 Section "Wireshark GTK1" SecWiresharkGTK1
615 ;-------------------------------------------
616 !ifdef GTK1_DIR & GTK2_DIR
617 SectionIn 2 RO
618 !endif
619 SetOutPath $INSTDIR
620 File "..\..\wireshark.exe"
621 File "${GTK1_DIR}\lib\libgtk-0.dll"
622 File "${GTK1_DIR}\lib\libgdk-0.dll"
623 SectionEnd
624 !endif
625
626 !ifdef GTK2_DIR
627 Section "Wireshark GTK2" SecWiresharkGTK2
628 ;-------------------------------------------
629 !ifdef GTK1_DIR & GTK2_DIR
630 SectionIn 1 RO
631 !endif
632 SetOutPath $INSTDIR
633 File /oname=wireshark.exe "..\..\wireshark-gtk2.exe"
634 File "${GTK2_DIR}\bin\libgdk-win32-2.0-0.dll"
635 File "${GTK2_DIR}\bin\libgdk_pixbuf-2.0-0.dll"
636 File "${GTK2_DIR}\bin\libgtk-win32-2.0-0.dll"
637 File "${GTK2_DIR}\bin\libatk-1.0-0.dll"
638 File "${GTK2_DIR}\bin\libpango-1.0-0.dll"
639 File "${GTK2_DIR}\bin\libpangowin32-1.0-0.dll"
640 !ifdef NEED_CAIRO_DLL
641 File "${GTK2_DIR}\bin\libcairo-2.dll"
642 File "${GTK2_DIR}\bin\libpangocairo-1.0-0.dll"
643 !endif
644 !ifdef NEED_LIBPNG_DLL
645 File "${GTK2_DIR}\bin\libpng13.dll"
646 !endif
647 SetOutPath $INSTDIR\etc\gtk-2.0
648 File "${GTK2_DIR}\etc\gtk-2.0\*.*"
649 SetOutPath $INSTDIR\etc\pango
650 File "${GTK2_DIR}\etc\pango\pango.*"
651 SetOutPath $INSTDIR\lib\gtk-2.0\${GTK2_LIB_DIR}\loaders
652 File "${GTK2_DIR}\lib\gtk-2.0\${GTK2_LIB_DIR}\loaders\libpixbufloader-*.dll"
653 SetOutPath $INSTDIR\lib\gtk-2.0\${GTK2_LIB_DIR}\immodules
654 File "${GTK2_DIR}\lib\gtk-2.0\${GTK2_LIB_DIR}\immodules\im-*.dll"
655 SetOutPath $INSTDIR\lib\pango\${PANGO_LIB_DIR}\modules
656 File "${GTK2_DIR}\lib\pango\${PANGO_LIB_DIR}\modules\pango-*.dll"
657
658 SectionEnd
659  
660 !ifdef GTK_WIMP_DIR
661 Section "GTK-Wimp" SecGTKWimp
662 ;-------------------------------------------
663 SectionIn 1
664 SetOutPath $INSTDIR\lib\gtk-2.0\${GTK2_LIB_DIR}\engines
665 File "${GTK_WIMP_DIR}\libwimp.dll"
666 ; GTK+ 2.8 looks for themes in "etc".  We should really pick one
667 ; directory and install there.
668 SetOutPath $INSTDIR\share\themes\Default\gtk-2.0
669 File "${GTK_THEME_DIR}\gtkrc"
670 SetOutPath $INSTDIR\etc\gtk-2.0
671 File "${GTK_THEME_DIR}\gtkrc"
672 SectionEnd
673 !endif
674 !endif
675
676 SectionGroupEnd ; "Wireshark"
677
678
679 Section "TShark" SecTShark
680 ;-------------------------------------------
681 !ifdef GTK1_DIR & GTK2_DIR
682 SectionIn 1 2
683 !endif
684 SetOutPath $INSTDIR
685 File "..\..\tshark.exe"
686 File "..\..\doc\tshark.html"
687 SectionEnd
688
689 SectionGroup "Plugins / Extensions" SecPluginsGroup
690
691 Section "Dissector Plugins" SecPlugins
692 ;-------------------------------------------
693 !ifdef GTK1_DIR & GTK2_DIR
694 SectionIn 1 2
695 !endif
696 SetOutPath $INSTDIR\plugins\${VERSION}
697 File "..\..\plugins\acn\acn.dll"
698 File "..\..\plugins\agentx\agentx.dll"
699 File "..\..\plugins\artnet\artnet.dll"
700 File "..\..\plugins\asn1\asn1.dll"
701 File "..\..\plugins\ciscosm\ciscosm.dll"
702 File "..\..\plugins\docsis\docsis.dll"
703 File "..\..\plugins\enttec\enttec.dll"
704 File "..\..\plugins\giop\coseventcomm.dll"
705 File "..\..\plugins\giop\cosnaming.dll"
706 File "..\..\plugins\giop\parlay.dll"
707 File "..\..\plugins\giop\tango.dll"
708 File "..\..\plugins\gryphon\gryphon.dll"
709 File "..\..\plugins\h223\h223.dll"
710 File "..\..\plugins\irda\irda.dll"
711 File "..\..\plugins\lwres\lwres.dll"
712 File "..\..\plugins\megaco\megaco.dll"
713 File "..\..\plugins\mgcp\mgcp.dll"
714 File "..\..\plugins\opsi\opsi.dll"
715 File "..\..\plugins\pcli\pcli.dll"
716 File "..\..\plugins\profinet\profinet.dll"
717 File "..\..\plugins\rdm\rdm.dll"
718 File "..\..\plugins\rlm\rlm.dll"
719 File "..\..\plugins\rtnet\rtnet.dll"
720 File "..\..\plugins\rudp\rudp.dll"
721 File "..\..\plugins\sbus\sbus.dll"
722 File "..\..\plugins\v5ua\v5ua.dll"
723 SectionEnd
724
725 Section "Tree Statistics Plugin" SecStatsTree
726 ;-------------------------------------------
727 !ifdef GTK1_DIR & GTK2_DIR
728 SectionIn 1 2
729 !endif
730 SetOutPath $INSTDIR\plugins\${VERSION}
731 File "..\..\plugins\stats_tree\stats_tree.dll"
732 SectionEnd
733
734 Section "Mate - Meta Analysis and Tracing Engine" SecMate
735 ;-------------------------------------------
736 SetOutPath $INSTDIR\plugins\${VERSION}
737 File "..\..\plugins\mate\mate.dll"
738 SectionEnd
739
740 !ifdef LUA_DIR
741 Section "LUA Plugin" SecLua
742 ;-------------------------------------------
743 SetOutPath $INSTDIR\plugins\${VERSION}
744 File "..\..\plugins\lua\lua.dll"
745 SetOutPath $INSTDIR
746 File "..\..\plugins\lua\init.lua"
747 SectionEnd
748 !endif
749
750 Section "SNMP MIBs" SecMIBs
751 ;-------------------------------------------
752 !ifdef GTK1_DIR & GTK2_DIR
753 SectionIn 1 2
754 !endif
755 SetOutPath $INSTDIR\snmp\mibs
756 File "${NET_SNMP_DIR}\mibs\*.txt"
757 SectionEnd
758
759 SectionGroupEnd ; "Plugins / Extensions"
760
761
762 SectionGroup "Tools" SecToolsGroup
763
764 Section "Editcap" SecEditcap
765 ;-------------------------------------------
766 !ifdef GTK1_DIR & GTK2_DIR
767 SectionIn 1 2
768 !endif
769 SetOutPath $INSTDIR
770 File "..\..\editcap.exe"
771 File "..\..\doc\editcap.html"
772 SectionEnd
773
774 Section "Text2Pcap" SecText2Pcap
775 ;-------------------------------------------
776 !ifdef GTK1_DIR & GTK2_DIR
777 SectionIn 1 2
778 !endif
779 SetOutPath $INSTDIR
780 File "..\..\text2pcap.exe"
781 File "..\..\doc\text2pcap.html"
782 SectionEnd
783
784 Section "Mergecap" SecMergecap
785 ;-------------------------------------------
786 !ifdef GTK1_DIR & GTK2_DIR
787 SectionIn 1 2
788 !endif
789 SetOutPath $INSTDIR
790 File "..\..\mergecap.exe"
791 File "..\..\doc\mergecap.html"
792 SectionEnd
793
794 Section "Capinfos" SecCapinfos
795 ;-------------------------------------------
796 !ifdef GTK1_DIR & GTK2_DIR
797 SectionIn 1 2
798 !endif
799 SetOutPath $INSTDIR
800 File "..\..\capinfos.exe"
801 File "..\..\doc\capinfos.html"
802 SectionEnd
803
804 SectionGroupEnd ; "Tools"
805
806 !ifdef HHC_DIR
807 Section "User's Guide" SecUsersGuide
808 ;-------------------------------------------
809 !ifdef GTK1_DIR & GTK2_DIR
810 SectionIn 1 2
811 !endif
812 SetOutPath $INSTDIR
813 File "..\..\docbook\user-guide.chm"
814 SectionEnd
815 !endif
816
817 Section "Uninstall" un.SecUinstall
818 ;-------------------------------------------
819
820 ;
821 ; UnInstall for every user
822 ;
823 SectionIn 1 2
824 SetShellVarContext all
825
826 Delete "$INSTDIR\tshark.exe"
827 IfErrors 0 NoTSharkErrorMsg
828         MessageBox MB_OK "Please note: tshark.exe could not be removed, it's probably in use!" IDOK 0 ;skipped if tshark.exe removed
829         Abort "Please note: tshark.exe could not be removed, it's probably in use! Abort uninstall process!"
830 NoTSharkErrorMsg:
831
832 Delete "$INSTDIR\wireshark.exe"
833 IfErrors 0 NoWiresharkErrorMsg
834         MessageBox MB_OK "Please note: wireshark.exe could not be removed, it's probably in use!" IDOK 0 ;skipped if wireshark.exe removed
835         Abort "Please note: wireshark.exe could not be removed, it's probably in use! Abort uninstall process!"
836 NoWiresharkErrorMsg:
837
838 DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark"
839 DeleteRegKey HKEY_LOCAL_MACHINE "Software\Wireshark"
840 DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\wireshark.exe"
841
842 push $R0
843         StrCpy $R0 ".5vw"
844         Call un.unlink
845         StrCpy $R0 ".acp"
846         Call un.unlink
847         StrCpy $R0 ".apc"
848         Call un.unlink
849         StrCpy $R0 ".atc"
850         Call un.unlink
851         StrCpy $R0 ".bfr"
852         Call un.unlink
853         StrCpy $R0 ".cap"
854         Call un.unlink
855         StrCpy $R0 ".enc"
856         Call un.unlink
857         StrCpy $R0 ".erf"
858         Call un.unlink
859         StrCpy $R0 ".fdc"
860         Call un.unlink
861         StrCpy $R0 ".pcap"
862         Call un.unlink
863         StrCpy $R0 ".pkt"
864         Call un.unlink
865         StrCpy $R0 ".snoop"
866         Call un.unlink
867         StrCpy $R0 ".syc"
868         Call un.unlink
869         StrCpy $R0 ".tpc"
870         Call un.unlink
871         StrCpy $R0 ".tr1"
872         Call un.unlink
873         StrCpy $R0 ".trace"
874         Call un.unlink
875         StrCpy $R0 ".trc"
876         Call un.unlink          
877         StrCpy $R0 ".wpc"
878         Call un.unlink
879         StrCpy $R0 ".wpz"
880         Call un.unlink
881 pop $R0
882
883 DeleteRegKey HKCR ${WIRESHARK_ASSOC} 
884 DeleteRegKey HKCR "${WIRESHARK_ASSOC}\Shell\open\command"
885 DeleteRegKey HKCR "${WIRESHARK_ASSOC}\DefaultIcon"
886 !insertmacro UpdateIcons
887
888 ; regardless if we currently installed GTK1 or 2, try to uninstall GTK2 files too
889 Delete "$INSTDIR\etc\gtk-2.0\*.*"
890 Delete "$INSTDIR\etc\pango\*.*"
891 Delete "$INSTDIR\lib\gtk-2.0\2.2.0\engines\*.*"
892 Delete "$INSTDIR\lib\gtk-2.0\2.2.0\loaders\*.*"
893 Delete "$INSTDIR\lib\gtk-2.0\2.2.0\immodules\*.*"
894 Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\*.*"
895 Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\*.*"
896 Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\*.*"
897 Delete "$INSTDIR\lib\pango\1.2.0\modules\*.*"
898 Delete "$INSTDIR\lib\pango\1.4.0\modules\*.*"
899 Delete "$INSTDIR\share\themes\Default\gtk-2.0\*.*"
900 Delete "$INSTDIR\help\*.*"
901 Delete "$INSTDIR\diameter\*.*"
902 Delete "$INSTDIR\snmp\mibs\*.*"
903 Delete "$INSTDIR\snmp\*.*"
904 Delete "$INSTDIR\*.exe"
905 Delete "$INSTDIR\*.dll"
906 Delete "$INSTDIR\*.html"
907 Delete "$INSTDIR\COPYING"
908 Delete "$INSTDIR\AUTHORS-SHORT"
909 Delete "$INSTDIR\AUTHORS-SHORT-FORMAT"
910 Delete "$INSTDIR\README*"
911 Delete "$INSTDIR\FAQ"
912 Delete "$INSTDIR\NEWS.txt"
913 Delete "$INSTDIR\manuf"
914 Delete "$INSTDIR\pcrepattern.3.txt"
915 Delete "$INSTDIR\user-guide.chm"
916 Delete "$INSTDIR\radius\*.*"
917 Delete "$INSTDIR\dtds\*.*"
918 Delete "$SMPROGRAMS\Wireshark\*.*"
919 Delete "$DESKTOP\Wireshark.lnk"
920 Delete "$QUICKLAUNCH\Wireshark.lnk"
921
922 RMDir "$INSTDIR\etc\gtk-2.0"
923 RMDir "$INSTDIR\etc\pango"
924 RMDir "$INSTDIR\etc"
925 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0\engines"
926 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0\loaders"
927 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0\immodules"
928 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0"
929 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\engines"
930 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\loaders"
931 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\immodules"
932 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0"
933 RMDir "$INSTDIR\lib\gtk-2.0"
934 RMDir "$INSTDIR\lib\pango\1.2.0\modules"
935 RMDir "$INSTDIR\lib\pango\1.2.0"
936 RMDir "$INSTDIR\lib\pango\1.4.0\modules"
937 RMDir "$INSTDIR\lib\pango\1.4.0"
938 RMDir "$INSTDIR\lib\pango"
939 RMDir "$INSTDIR\lib"
940 RMDir "$INSTDIR\share\themes\Default\gtk-2.0"
941 RMDir "$INSTDIR\share\themes\Default"
942 RMDir "$INSTDIR\share\themes"
943 RMDir "$INSTDIR\share"
944 RMDir "$SMPROGRAMS\Wireshark"
945 RMDir "$INSTDIR\help"
946 RMDir "$INSTDIR\diameter"
947 RMDir "$INSTDIR\snmp\mibs"
948 RMDir "$INSTDIR\snmp"
949 RMDir "$INSTDIR\radius"
950 RMDir "$INSTDIR\dtds"
951 RMDir "$INSTDIR"
952
953 SectionEnd ; "Uinstall"
954
955 Section "Un.Plugins" un.SecPlugins
956 ;-------------------------------------------
957 SectionIn 1 2
958 ;Delete "$INSTDIR\plugins\${VERSION}\*.*"
959 ;Delete "$INSTDIR\plugins\*.*"
960 ;RMDir "$INSTDIR\plugins\${VERSION}"
961 ;RMDir "$INSTDIR\plugins"
962 RMDir /r "$INSTDIR\plugins"
963 SectionEnd
964
965 Section "Un.Global Settings" un.SecGlobalSettings
966 ;-------------------------------------------
967 SectionIn 1 2
968 Delete "$INSTDIR\cfilters"
969 Delete "$INSTDIR\colorfilters"
970 Delete "$INSTDIR\dfilters"
971 Delete "$INSTDIR\init.lua"
972 RMDir "$INSTDIR"
973 SectionEnd
974
975 Section /o "Un.Personal Settings" un.SecPersonalSettings
976 ;-------------------------------------------
977 SectionIn 2
978 SetShellVarContext current
979 Delete "$APPDATA\Wireshark\*.*"
980 RMDir "$APPDATA\Wireshark"
981 SectionEnd
982
983 ;VAR un.WINPCAP_UNINSTALL
984
985 Section /o "Un.WinPcap" un.SecWinPcap
986 ;-------------------------------------------
987 SectionIn 2
988 ReadRegStr $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString"
989 ;IfErrors un.lbl_winpcap_notinstalled ;if RegKey is unavailable, WinPcap is not installed
990 ;MessageBox MB_OK "WinPcap $1"
991 ExecWait '$1' $0
992 DetailPrint "WinPcap uninstaller returned $0"
993 ;SetRebootFlag true
994 ;un.lbl_winpcap_notinstalled:
995 SectionEnd
996
997 Section "-Un.Finally"
998 ;-------------------------------------------
999 SectionIn 1 2
1000 ; this test must be done after all other things uninstalled (e.g. Global Settings)
1001 IfFileExists "$INSTDIR" 0 NoFinalErrorMsg
1002     MessageBox MB_OK "Please note: The directory $INSTDIR could not be removed!" IDOK 0 ; skipped if dir doesn't exist
1003 NoFinalErrorMsg: 
1004 SectionEnd
1005
1006
1007 ; ============================================================================
1008 ; PLEASE MAKE SURE, THAT THE DESCRIPTIVE TEXT FITS INTO THE DESCRIPTION FIELD!
1009 ; ============================================================================
1010 !ifdef MAKENSIS_MODERN_UI
1011 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
1012   !insertmacro MUI_DESCRIPTION_TEXT ${SecWiresharkGroup} "${PROGRAM_NAME} is a GUI network protocol analyzer."
1013 !ifdef GTK1_DIR
1014   !insertmacro MUI_DESCRIPTION_TEXT ${SecWiresharkGTK1} "${PROGRAM_NAME} using the classical GTK1 user interface."
1015 !endif  
1016 !ifdef GTK2_DIR  
1017   !insertmacro MUI_DESCRIPTION_TEXT ${SecWiresharkGTK2} "${PROGRAM_NAME} using the modern GTK2 user interface."
1018 !ifdef GTK_WIMP_DIR
1019   !insertmacro MUI_DESCRIPTION_TEXT ${SecGTKWimp} "GTK-Wimp is the GTK2 windows impersonator (native Win32 look and feel, for Win2000 and up)."
1020 !endif  
1021 !endif
1022   !insertmacro MUI_DESCRIPTION_TEXT ${SecTShark} "TShark is a text based network protocol analyzer."
1023   !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsGroup} "Some plugins and extensions for both Wireshark and TShark."
1024   !insertmacro MUI_DESCRIPTION_TEXT ${SecPlugins} "Plugins with some extended dissections."
1025   !insertmacro MUI_DESCRIPTION_TEXT ${SecStatsTree} "Plugin for some extended statistics."
1026   !insertmacro MUI_DESCRIPTION_TEXT ${SecMate} "Plugin - Meta Analysis and Tracing Engine (Experimental)."
1027 !ifdef LUA_DIR
1028   !insertmacro MUI_DESCRIPTION_TEXT ${SecLua} "Plugin - LUA (Experimental)."
1029 !endif
1030   !insertmacro MUI_DESCRIPTION_TEXT ${SecMIBs} "SNMP MIBs for better SNMP dissection."
1031   !insertmacro MUI_DESCRIPTION_TEXT ${SecToolsGroup} "Additional command line based tools."
1032   !insertmacro MUI_DESCRIPTION_TEXT ${SecEditCap} "Editcap is a program that reads a capture file and writes some or all of the packets into another capture file."
1033   !insertmacro MUI_DESCRIPTION_TEXT ${SecText2Pcap} "Text2pcap is a program that reads in an ASCII hex dump and writes the data into a libpcap-style capture file."
1034   !insertmacro MUI_DESCRIPTION_TEXT ${SecMergecap} "Mergecap is a program that combines multiple saved capture files into a single output file"
1035   !insertmacro MUI_DESCRIPTION_TEXT ${SecCapinfos} "Capinfos is a program that provides information on capture files."
1036   !insertmacro MUI_DESCRIPTION_TEXT ${SecUsersGuide} "The user's guide as the online help system."
1037 !insertmacro MUI_FUNCTION_DESCRIPTION_END
1038
1039 !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN 
1040   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUinstall} "Uninstall all Wireshark components."
1041   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPlugins} "Uninstall all Plugins (even from previous Wireshark versions)."
1042   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecGlobalSettings} "Uninstall global settings like: $INSTDIR\cfilters"
1043   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPersonalSettings} "Uninstall personal settings like your preferences file from your profile: $PROFILE."
1044   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecWinPcap} "Call WinPcap's uninstall program."
1045 !insertmacro MUI_UNFUNCTION_DESCRIPTION_END
1046   
1047 !endif ; MAKENSIS_MODERN_UI
1048
1049 ; ============================================================================
1050 ; Callback functions
1051 ; ============================================================================
1052 !ifdef GTK1_DIR & GTK2_DIR
1053 ;Disable GTK-Wimp for GTK1
1054
1055 Function .onSelChange
1056         Push $0
1057         SectionGetFlags ${SecWiresharkGTK1} $0
1058         IntOp  $0 $0 & 1
1059         IntCmp $0 1 onSelChange.disableGTK2Sections
1060         ;enable GTK2Sections
1061         !insertmacro EnableSection ${SecGTKWimp}
1062         Goto onSelChange.end
1063 onSelChange.disableGTK2Sections:
1064         !insertmacro DisableSection ${SecGTKWimp}
1065         Goto onSelChange.end
1066 onSelChange.end:
1067         Pop $0
1068 FunctionEnd     
1069
1070 !else
1071 !ifdef GTK1_DIR | GTK2_DIR
1072 ; Disable FileExtension if Wireshark isn't selected
1073 Function .onSelChange
1074         Push $0
1075 !ifdef GTK1_DIR
1076         SectionGetFlags ${SecWiresharkGTK1} $0
1077         IntOp  $0 $0 & 1
1078         IntCmp $0 0 onSelChange.unselect
1079         SectionGetFlags ${SecFileExtensions} $0
1080         IntOp  $0 $0 & 16
1081         IntCmp $0 16 onSelChange.unreadonly
1082         Goto onSelChange.end
1083 !else
1084         SectionGetFlags ${SecWiresharkGTK2} $0
1085         IntOp  $0 $0 & 1
1086         IntCmp $0 0 onSelChange.unselect
1087         SectionGetFlags ${SecFileExtensions} $0
1088         IntOp  $0 $0 & 16
1089         IntCmp $0 16 onSelChange.unreadonly
1090         Goto onSelChange.end    
1091 !endif
1092 onSelChange.unselect:   
1093         SectionGetFlags ${SecFileExtensions} $0
1094         IntOp $0 $0 & 0xFFFFFFFE
1095         IntOp $0 $0 | 0x10
1096         SectionSetFlags ${SecFileExtensions} $0
1097         Goto onSelChange.end
1098 onSelChange.unreadonly:
1099         SectionGetFlags ${SecFileExtensions} $0
1100         IntOp $0 $0 & 0xFFFFFFEF
1101         SectionSetFlags ${SecFileExtensions} $0
1102         Goto onSelChange.end
1103 onSelChange.end:
1104         Pop $0
1105 FunctionEnd
1106 !endif
1107 !endif
1108
1109
1110 !include "GetWindowsVersion.nsh"
1111 !include WinMessages.nsh
1112
1113 Var NPF_START ;declare variable for holding the value of a registry key
1114 Var WINPCAP_VERSION ;declare variable for holding the value of a registry key
1115
1116 Function myShowCallback
1117
1118 ; Uinstall old Wireshark first
1119 ; XXX - doesn't work, but kept here for further experiments
1120 ;ReadRegStr $WIRESHARK_UNINSTALL HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "UninstallString"
1121 ;IfErrors lbl_wireshark_notinstalled ;if RegKey is unavailable, WinPcap is not installed
1122 ;MessageBox MB_YESNO|MB_ICONQUESTION "Uninstall the old Wireshark version first (recommended)?" 
1123 ; Hide the installer while uninstalling
1124 ;GetDlgItem $0 $HWNDPARENT 1
1125 ;FindWindow $0 "#32770" "" $HWNDPARENT
1126 ;MessageBox MB_OK "Window $0" 
1127 ;ShowWindow $0 ${SW_HIDE}
1128 ;HideWindow
1129 ;ExecWait '$WIRESHARK_UNINSTALL' $0
1130 ;DetailPrint "WinPcap uninstaller returned $0"
1131 ;GetDlgItem $0 $HWNDPARENT 1
1132 ;ShowWindow $0 ${SW_SHOW}
1133 ;MessageBox MB_OK "Uninstalled" 
1134 ;lbl_wireshark_notinstalled:
1135
1136
1137         ; Get the Windows version
1138         Call GetWindowsVersion
1139         Pop $R0 ; Windows Version
1140 !ifdef GTK2_DIR
1141         ; Enable GTK-Wimp only for Windows 2000/XP/2003
1142         ; ...as Win9x/ME/NT known to have problems with it!
1143         
1144         ;DetailPrint 'Windows Version: $R0'
1145         StrCmp $R0 '2000' lbl_select_wimp
1146         StrCmp $R0 'XP' lbl_select_wimp
1147         StrCmp $R0 '2003' lbl_select_wimp
1148         DetailPrint "Windows $R0 doesn't support GTK-Wimp!"
1149
1150         Goto lbl_ignore_wimp
1151 lbl_select_wimp:
1152         !insertmacro SelectSection ${SecGTKWimp}
1153
1154 lbl_ignore_wimp:
1155 !endif
1156
1157
1158         ; detect if WinPcap should be installed
1159         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 4" "Text" "Install WinPcap 3.1"
1160         ReadRegStr $WINPCAP_VERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayName"
1161         IfErrors 0 lbl_winpcap_installed ;if RegKey is available, WinPcap is already installed
1162         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 2" "Text" "WinPcap is currently not installed"
1163         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 2" "Flags" "DISABLED"
1164         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 5" "Text" "(Use Add/Remove Programs first to uninstall any undetected old WinPcap versions)"
1165         Goto lbl_winpcap_done
1166
1167 lbl_winpcap_installed:
1168         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 2" "Text" "$WINPCAP_VERSION"
1169         ; WinPcap 2.x (including betas): the version string starts with "WinPcap 2."
1170         StrCpy $1 "$WINPCAP_VERSION" 10
1171         StrCmp $1 "WinPcap 2." lbl_winpcap_do_install
1172         ; WinPcap 3.0 (including betas): the version string starts with "WinPcap 3.0"
1173         StrCpy $1 "$WINPCAP_VERSION" 11
1174         StrCmp $1 "WinPcap 3.0" lbl_winpcap_do_install
1175         ; WinPcap 3.1 previous beta's; exact string match
1176         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta" lbl_winpcap_do_install
1177         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta2" lbl_winpcap_do_install
1178         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta3" lbl_winpcap_do_install
1179         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta4" lbl_winpcap_do_install
1180
1181 ;lbl_winpcap_dont_install:
1182         ; seems to be the current or even a newer version, so don't install
1183         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 4" "State" "0"
1184         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 5" "Text" "If selected, the currently installed $WINPCAP_VERSION will be uninstalled first."
1185         Goto lbl_winpcap_done
1186
1187 lbl_winpcap_do_install:
1188         ; seems to be an old version, install newer one
1189         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 4" "State" "1"
1190         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 5" "Text" "The currently installed $WINPCAP_VERSION will be uninstalled first."
1191
1192 lbl_winpcap_done:
1193
1194         ; Disable NPF service setting for Win OT 
1195         StrCmp $R0 '95' lbl_npf_disable
1196         StrCmp $R0 '98' lbl_npf_disable
1197         StrCmp $R0 'ME' lbl_npf_disable
1198         ReadRegDWORD $NPF_START HKEY_LOCAL_MACHINE "SYSTEM\CurrentControlSet\Services\NPF" "Start"
1199         ; (Winpcap may not be installed already, so no regKey is no error here)
1200         IfErrors lbl_npf_done ;RegKey not available, so do not set it
1201         IntCmp $NPF_START 2 0 lbl_npf_done lbl_npf_done
1202         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 8" "State" "1"
1203         Goto lbl_npf_done
1204         ;disable
1205 lbl_npf_disable:
1206         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 8" "State" "0"
1207         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 8" "Flags" "DISABLED"
1208         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 9" "Flags" "DISABLED"  
1209 lbl_npf_done:
1210
1211
1212         ; if Wireshark was previously installed, unselect previously not installed icons etc.
1213         ; detect if Wireshark is already installed -> 
1214         ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "UninstallString"
1215         IfErrors lbl_wireshark_notinstalled ;if RegKey is unavailable, Wireshark is not installed
1216
1217         ; only select Start Menu Group, if previously installed
1218         ; (we use the "all users" start menu, so select it first)
1219         SetShellVarContext all
1220         IfFileExists "$SMPROGRAMS\Wireshark\Wireshark.lnk" lbl_have_startmenu
1221         WriteINIStr "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 2" "State" "0"
1222 lbl_have_startmenu:
1223
1224         ; only select Desktop Icon, if previously installed
1225         IfFileExists "$DESKTOP\Wireshark.lnk" lbl_have_desktopicon
1226         WriteINIStr "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 3" "State" "0"
1227 lbl_have_desktopicon:
1228
1229         ; only select Quick Launch Icon, if previously installed
1230         IfFileExists "$QUICKLAUNCH\Wireshark.lnk" lbl_have_quicklaunchicon
1231         WriteINIStr "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 4" "State" "0"
1232 lbl_have_quicklaunchicon:
1233
1234 lbl_wireshark_notinstalled:
1235
1236
1237 FunctionEnd