From Martin Mathieson:
[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 SectionEnd ; "Required"
599
600
601 SectionGroup "!Wireshark" SecWiresharkGroup
602
603 !ifdef GTK1_DIR
604 Section "Wireshark GTK1" SecWiresharkGTK1
605 ;-------------------------------------------
606 !ifdef GTK1_DIR & GTK2_DIR
607 SectionIn 2 RO
608 !endif
609 SetOutPath $INSTDIR
610 File "..\..\wireshark.exe"
611 File "${GTK1_DIR}\lib\libgtk-0.dll"
612 File "${GTK1_DIR}\lib\libgdk-0.dll"
613 SectionEnd
614 !endif
615
616 !ifdef GTK2_DIR
617 Section "Wireshark GTK2" SecWiresharkGTK2
618 ;-------------------------------------------
619 !ifdef GTK1_DIR & GTK2_DIR
620 SectionIn 1 RO
621 !endif
622 SetOutPath $INSTDIR
623 File /oname=wireshark.exe "..\..\wireshark-gtk2.exe"
624 File "${GTK2_DIR}\bin\libgdk-win32-2.0-0.dll"
625 File "${GTK2_DIR}\bin\libgdk_pixbuf-2.0-0.dll"
626 File "${GTK2_DIR}\bin\libgtk-win32-2.0-0.dll"
627 File "${GTK2_DIR}\bin\libatk-1.0-0.dll"
628 File "${GTK2_DIR}\bin\libpango-1.0-0.dll"
629 File "${GTK2_DIR}\bin\libpangowin32-1.0-0.dll"
630 !ifdef NEED_CAIRO_DLL
631 File "${GTK2_DIR}\bin\libcairo-2.dll"
632 File "${GTK2_DIR}\bin\libpangocairo-1.0-0.dll"
633 !endif
634 !ifdef NEED_LIBPNG_DLL
635 File "${GTK2_DIR}\bin\libpng13.dll"
636 !endif
637 SetOutPath $INSTDIR\etc\gtk-2.0
638 File "${GTK2_DIR}\etc\gtk-2.0\*.*"
639 SetOutPath $INSTDIR\etc\pango
640 File "${GTK2_DIR}\etc\pango\pango.*"
641 SetOutPath $INSTDIR\lib\gtk-2.0\${GTK2_LIB_DIR}\loaders
642 File "${GTK2_DIR}\lib\gtk-2.0\${GTK2_LIB_DIR}\loaders\libpixbufloader-*.dll"
643 SetOutPath $INSTDIR\lib\gtk-2.0\${GTK2_LIB_DIR}\immodules
644 File "${GTK2_DIR}\lib\gtk-2.0\${GTK2_LIB_DIR}\immodules\im-*.dll"
645 SetOutPath $INSTDIR\lib\pango\${PANGO_LIB_DIR}\modules
646 File "${GTK2_DIR}\lib\pango\${PANGO_LIB_DIR}\modules\pango-*.dll"
647 SectionEnd
648  
649 !ifdef GTK_WIMP_DIR
650 Section "GTK-Wimp" SecGTKWimp
651 ;-------------------------------------------
652 SectionIn 1
653 SetOutPath $INSTDIR\lib\gtk-2.0\${GTK2_LIB_DIR}\engines
654 File "${GTK_WIMP_DIR}\libwimp.dll"
655 ; GTK+ 2.8 looks for themes in "etc".  We should really pick one
656 ; directory and install there.
657 SetOutPath $INSTDIR\share\themes\Default\gtk-2.0
658 File "${GTK_THEME_DIR}\gtkrc"
659 SetOutPath $INSTDIR\etc\gtk-2.0
660 File "${GTK_THEME_DIR}\gtkrc"
661 SectionEnd
662 !endif
663 !endif
664
665 SectionGroupEnd ; "Wireshark"
666
667
668 Section "TShark" SecTShark
669 ;-------------------------------------------
670 !ifdef GTK1_DIR & GTK2_DIR
671 SectionIn 1 2
672 !endif
673 SetOutPath $INSTDIR
674 File "..\..\tshark.exe"
675 File "..\..\doc\tshark.html"
676 SectionEnd
677
678 SectionGroup "Plugins / Extensions" SecPluginsGroup
679
680 Section "Dissector Plugins" SecPlugins
681 ;-------------------------------------------
682 !ifdef GTK1_DIR & GTK2_DIR
683 SectionIn 1 2
684 !endif
685 SetOutPath $INSTDIR\plugins\${VERSION}
686 File "..\..\plugins\acn\acn.dll"
687 File "..\..\plugins\agentx\agentx.dll"
688 File "..\..\plugins\artnet\artnet.dll"
689 File "..\..\plugins\asn1\asn1.dll"
690 File "..\..\plugins\ciscosm\ciscosm.dll"
691 File "..\..\plugins\docsis\docsis.dll"
692 File "..\..\plugins\enttec\enttec.dll"
693 File "..\..\plugins\giop\coseventcomm.dll"
694 File "..\..\plugins\giop\cosnaming.dll"
695 File "..\..\plugins\giop\parlay.dll"
696 File "..\..\plugins\giop\tango.dll"
697 File "..\..\plugins\gryphon\gryphon.dll"
698 File "..\..\plugins\h223\h223.dll"
699 File "..\..\plugins\irda\irda.dll"
700 File "..\..\plugins\lwres\lwres.dll"
701 File "..\..\plugins\megaco\megaco.dll"
702 File "..\..\plugins\mgcp\mgcp.dll"
703 File "..\..\plugins\opsi\opsi.dll"
704 File "..\..\plugins\pcli\pcli.dll"
705 File "..\..\plugins\profinet\profinet.dll"
706 File "..\..\plugins\rdm\rdm.dll"
707 File "..\..\plugins\rlm\rlm.dll"
708 File "..\..\plugins\rtnet\rtnet.dll"
709 File "..\..\plugins\rudp\rudp.dll"
710 File "..\..\plugins\v5ua\v5ua.dll"
711 SectionEnd
712
713 Section "Tree Statistics Plugin" SecStatsTree
714 ;-------------------------------------------
715 !ifdef GTK1_DIR & GTK2_DIR
716 SectionIn 1 2
717 !endif
718 SetOutPath $INSTDIR\plugins\${VERSION}
719 File "..\..\plugins\stats_tree\stats_tree.dll"
720 SectionEnd
721
722 Section "Mate - Meta Analysis and Tracing Engine" SecMate
723 ;-------------------------------------------
724 SetOutPath $INSTDIR\plugins\${VERSION}
725 File "..\..\plugins\mate\mate.dll"
726 SectionEnd
727
728 !ifdef LUA_DIR
729 Section "LUA Plugin" SecLua
730 ;-------------------------------------------
731 SetOutPath $INSTDIR\plugins\${VERSION}
732 File "..\..\plugins\lua\lua.dll"
733 SetOutPath $INSTDIR
734 File "..\..\plugins\lua\init.lua"
735 SectionEnd
736 !endif
737
738 Section "SNMP MIBs" SecMIBs
739 ;-------------------------------------------
740 !ifdef GTK1_DIR & GTK2_DIR
741 SectionIn 1 2
742 !endif
743 SetOutPath $INSTDIR\snmp\mibs
744 File "${NET_SNMP_DIR}\mibs\*.txt"
745 SectionEnd
746
747 SectionGroupEnd ; "Plugins / Extensions"
748
749
750 SectionGroup "Tools" SecToolsGroup
751
752 Section "Editcap" SecEditcap
753 ;-------------------------------------------
754 !ifdef GTK1_DIR & GTK2_DIR
755 SectionIn 1 2
756 !endif
757 SetOutPath $INSTDIR
758 File "..\..\editcap.exe"
759 File "..\..\doc\editcap.html"
760 SectionEnd
761
762 Section "Text2Pcap" SecText2Pcap
763 ;-------------------------------------------
764 !ifdef GTK1_DIR & GTK2_DIR
765 SectionIn 1 2
766 !endif
767 SetOutPath $INSTDIR
768 File "..\..\text2pcap.exe"
769 File "..\..\doc\text2pcap.html"
770 SectionEnd
771
772 Section "Mergecap" SecMergecap
773 ;-------------------------------------------
774 !ifdef GTK1_DIR & GTK2_DIR
775 SectionIn 1 2
776 !endif
777 SetOutPath $INSTDIR
778 File "..\..\mergecap.exe"
779 File "..\..\doc\mergecap.html"
780 SectionEnd
781
782 Section "Capinfos" SecCapinfos
783 ;-------------------------------------------
784 !ifdef GTK1_DIR & GTK2_DIR
785 SectionIn 1 2
786 !endif
787 SetOutPath $INSTDIR
788 File "..\..\capinfos.exe"
789 File "..\..\doc\capinfos.html"
790 SectionEnd
791
792 SectionGroupEnd ; "Tools"
793
794 !ifdef HHC_DIR
795 Section "User's Guide" SecUsersGuide
796 ;-------------------------------------------
797 !ifdef GTK1_DIR & GTK2_DIR
798 SectionIn 1 2
799 !endif
800 SetOutPath $INSTDIR
801 File "..\..\docbook\user-guide.chm"
802 SectionEnd
803 !endif
804
805 Section "Uninstall" un.SecUinstall
806 ;-------------------------------------------
807
808 ;
809 ; UnInstall for every user
810 ;
811 SectionIn 1 2
812 SetShellVarContext all
813
814 Delete "$INSTDIR\tshark.exe"
815 IfErrors 0 NoTSharkErrorMsg
816         MessageBox MB_OK "Please note: tshark.exe could not be removed, it's probably in use!" IDOK 0 ;skipped if tshark.exe removed
817         Abort "Please note: tshark.exe could not be removed, it's probably in use! Abort uninstall process!"
818 NoTSharkErrorMsg:
819
820 Delete "$INSTDIR\wireshark.exe"
821 IfErrors 0 NoWiresharkErrorMsg
822         MessageBox MB_OK "Please note: wireshark.exe could not be removed, it's probably in use!" IDOK 0 ;skipped if wireshark.exe removed
823         Abort "Please note: wireshark.exe could not be removed, it's probably in use! Abort uninstall process!"
824 NoWiresharkErrorMsg:
825
826 DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark"
827 DeleteRegKey HKEY_LOCAL_MACHINE "Software\Wireshark"
828 DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\wireshark.exe"
829
830 push $R0
831         StrCpy $R0 ".5vw"
832         Call un.unlink
833         StrCpy $R0 ".acp"
834         Call un.unlink
835         StrCpy $R0 ".apc"
836         Call un.unlink
837         StrCpy $R0 ".atc"
838         Call un.unlink
839         StrCpy $R0 ".bfr"
840         Call un.unlink
841         StrCpy $R0 ".cap"
842         Call un.unlink
843         StrCpy $R0 ".enc"
844         Call un.unlink
845         StrCpy $R0 ".erf"
846         Call un.unlink
847         StrCpy $R0 ".fdc"
848         Call un.unlink
849         StrCpy $R0 ".pcap"
850         Call un.unlink
851         StrCpy $R0 ".pkt"
852         Call un.unlink
853         StrCpy $R0 ".snoop"
854         Call un.unlink
855         StrCpy $R0 ".syc"
856         Call un.unlink
857         StrCpy $R0 ".tpc"
858         Call un.unlink
859         StrCpy $R0 ".tr1"
860         Call un.unlink
861         StrCpy $R0 ".trace"
862         Call un.unlink
863         StrCpy $R0 ".trc"
864         Call un.unlink          
865         StrCpy $R0 ".wpc"
866         Call un.unlink
867         StrCpy $R0 ".wpz"
868         Call un.unlink
869 pop $R0
870
871 DeleteRegKey HKCR ${WIRESHARK_ASSOC} 
872 DeleteRegKey HKCR "${WIRESHARK_ASSOC}\Shell\open\command"
873 DeleteRegKey HKCR "${WIRESHARK_ASSOC}\DefaultIcon"
874 !insertmacro UpdateIcons
875
876 ; regardless if we currently installed GTK1 or 2, try to uninstall GTK2 files too
877 Delete "$INSTDIR\etc\gtk-2.0\*.*"
878 Delete "$INSTDIR\etc\pango\*.*"
879 Delete "$INSTDIR\lib\gtk-2.0\2.2.0\engines\*.*"
880 Delete "$INSTDIR\lib\gtk-2.0\2.2.0\loaders\*.*"
881 Delete "$INSTDIR\lib\gtk-2.0\2.2.0\immodules\*.*"
882 Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\*.*"
883 Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\*.*"
884 Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\*.*"
885 Delete "$INSTDIR\lib\pango\1.2.0\modules\*.*"
886 Delete "$INSTDIR\lib\pango\1.4.0\modules\*.*"
887 Delete "$INSTDIR\share\themes\Default\gtk-2.0\*.*"
888 Delete "$INSTDIR\help\*.*"
889 Delete "$INSTDIR\diameter\*.*"
890 Delete "$INSTDIR\snmp\mibs\*.*"
891 Delete "$INSTDIR\snmp\*.*"
892 Delete "$INSTDIR\*.exe"
893 Delete "$INSTDIR\*.dll"
894 Delete "$INSTDIR\*.html"
895 Delete "$INSTDIR\COPYING"
896 Delete "$INSTDIR\AUTHORS-SHORT"
897 Delete "$INSTDIR\AUTHORS-SHORT-FORMAT"
898 Delete "$INSTDIR\README*"
899 Delete "$INSTDIR\FAQ"
900 Delete "$INSTDIR\NEWS.txt"
901 Delete "$INSTDIR\manuf"
902 Delete "$INSTDIR\pcrepattern.3.txt"
903 Delete "$INSTDIR\user-guide.chm"
904 Delete "$INSTDIR\radius\*.*"
905 Delete "$INSTDIR\dtds\*.*"
906 Delete "$SMPROGRAMS\Wireshark\*.*"
907 Delete "$DESKTOP\Wireshark.lnk"
908 Delete "$QUICKLAUNCH\Wireshark.lnk"
909
910 RMDir "$INSTDIR\etc\gtk-2.0"
911 RMDir "$INSTDIR\etc\pango"
912 RMDir "$INSTDIR\etc"
913 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0\engines"
914 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0\loaders"
915 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0\immodules"
916 RMDir "$INSTDIR\lib\gtk-2.0\2.2.0"
917 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\engines"
918 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\loaders"
919 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\immodules"
920 RMDir "$INSTDIR\lib\gtk-2.0\2.4.0"
921 RMDir "$INSTDIR\lib\gtk-2.0"
922 RMDir "$INSTDIR\lib\pango\1.2.0\modules"
923 RMDir "$INSTDIR\lib\pango\1.2.0"
924 RMDir "$INSTDIR\lib\pango\1.4.0\modules"
925 RMDir "$INSTDIR\lib\pango\1.4.0"
926 RMDir "$INSTDIR\lib\pango"
927 RMDir "$INSTDIR\lib"
928 RMDir "$INSTDIR\share\themes\Default\gtk-2.0"
929 RMDir "$INSTDIR\share\themes\Default"
930 RMDir "$INSTDIR\share\themes"
931 RMDir "$INSTDIR\share"
932 RMDir "$SMPROGRAMS\Wireshark"
933 RMDir "$INSTDIR\help"
934 RMDir "$INSTDIR\diameter"
935 RMDir "$INSTDIR\snmp\mibs"
936 RMDir "$INSTDIR\snmp"
937 RMDir "$INSTDIR\radius"
938 RMDir "$INSTDIR\dtds"
939 RMDir "$INSTDIR"
940
941 SectionEnd ; "Uinstall"
942
943 Section "Un.Plugins" un.SecPlugins
944 ;-------------------------------------------
945 SectionIn 1 2
946 ;Delete "$INSTDIR\plugins\${VERSION}\*.*"
947 ;Delete "$INSTDIR\plugins\*.*"
948 ;RMDir "$INSTDIR\plugins\${VERSION}"
949 ;RMDir "$INSTDIR\plugins"
950 RMDir /r "$INSTDIR\plugins"
951 SectionEnd
952
953 Section "Un.Global Settings" un.SecGlobalSettings
954 ;-------------------------------------------
955 SectionIn 1 2
956 Delete "$INSTDIR\cfilters"
957 Delete "$INSTDIR\colorfilters"
958 Delete "$INSTDIR\dfilters"
959 Delete "$INSTDIR\init.lua"
960 RMDir "$INSTDIR"
961 SectionEnd
962
963 Section /o "Un.Personal Settings" un.SecPersonalSettings
964 ;-------------------------------------------
965 SectionIn 2
966 SetShellVarContext current
967 Delete "$APPDATA\Wireshark\*.*"
968 RMDir "$APPDATA\Wireshark"
969 SectionEnd
970
971 ;VAR un.WINPCAP_UNINSTALL
972
973 Section /o "Un.WinPcap" un.SecWinPcap
974 ;-------------------------------------------
975 SectionIn 2
976 ReadRegStr $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "UninstallString"
977 ;IfErrors un.lbl_winpcap_notinstalled ;if RegKey is unavailable, WinPcap is not installed
978 ;MessageBox MB_OK "WinPcap $1"
979 ExecWait '$1' $0
980 DetailPrint "WinPcap uninstaller returned $0"
981 ;SetRebootFlag true
982 ;un.lbl_winpcap_notinstalled:
983 SectionEnd
984
985 Section "-Un.Finally"
986 ;-------------------------------------------
987 SectionIn 1 2
988 ; this test must be done after all other things uninstalled (e.g. Global Settings)
989 IfFileExists "$INSTDIR" 0 NoFinalErrorMsg
990     MessageBox MB_OK "Please note: The directory $INSTDIR could not be removed!" IDOK 0 ; skipped if dir doesn't exist
991 NoFinalErrorMsg: 
992 SectionEnd
993
994
995 ; ============================================================================
996 ; PLEASE MAKE SURE, THAT THE DESCRIPTIVE TEXT FITS INTO THE DESCRIPTION FIELD!
997 ; ============================================================================
998 !ifdef MAKENSIS_MODERN_UI
999 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
1000   !insertmacro MUI_DESCRIPTION_TEXT ${SecWiresharkGroup} "${PROGRAM_NAME} is a GUI network protocol analyzer."
1001 !ifdef GTK1_DIR
1002   !insertmacro MUI_DESCRIPTION_TEXT ${SecWiresharkGTK1} "${PROGRAM_NAME} using the classical GTK1 user interface."
1003 !endif  
1004 !ifdef GTK2_DIR  
1005   !insertmacro MUI_DESCRIPTION_TEXT ${SecWiresharkGTK2} "${PROGRAM_NAME} using the modern GTK2 user interface."
1006 !ifdef GTK_WIMP_DIR
1007   !insertmacro MUI_DESCRIPTION_TEXT ${SecGTKWimp} "GTK-Wimp is the GTK2 windows impersonator (native Win32 look and feel, for Win2000 and up)."
1008 !endif  
1009 !endif
1010   !insertmacro MUI_DESCRIPTION_TEXT ${SecTShark} "TShark is a text based network protocol analyzer."
1011   !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsGroup} "Some plugins and extensions for both Wireshark and TShark."
1012   !insertmacro MUI_DESCRIPTION_TEXT ${SecPlugins} "Plugins with some extended dissections."
1013   !insertmacro MUI_DESCRIPTION_TEXT ${SecStatsTree} "Plugin for some extended statistics."
1014   !insertmacro MUI_DESCRIPTION_TEXT ${SecMate} "Plugin - Meta Analysis and Tracing Engine (Experimental)."
1015 !ifdef LUA_DIR
1016   !insertmacro MUI_DESCRIPTION_TEXT ${SecLua} "Plugin - LUA (Experimental)."
1017 !endif
1018   !insertmacro MUI_DESCRIPTION_TEXT ${SecMIBs} "SNMP MIBs for better SNMP dissection."
1019   !insertmacro MUI_DESCRIPTION_TEXT ${SecToolsGroup} "Additional command line based tools."
1020   !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."
1021   !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."
1022   !insertmacro MUI_DESCRIPTION_TEXT ${SecMergecap} "Mergecap is a program that combines multiple saved capture files into a single output file"
1023   !insertmacro MUI_DESCRIPTION_TEXT ${SecCapinfos} "Capinfos is a program that provides information on capture files."
1024   !insertmacro MUI_DESCRIPTION_TEXT ${SecUsersGuide} "The user's guide as the online help system."
1025 !insertmacro MUI_FUNCTION_DESCRIPTION_END
1026
1027 !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN 
1028   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUinstall} "Uninstall all Wireshark components."
1029   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPlugins} "Uninstall all Plugins (even from previous Wireshark versions)."
1030   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecGlobalSettings} "Uninstall global settings like: $INSTDIR\cfilters"
1031   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPersonalSettings} "Uninstall personal settings like your preferences file from your profile: $PROFILE."
1032   !insertmacro MUI_DESCRIPTION_TEXT ${un.SecWinPcap} "Call WinPcap's uninstall program."
1033 !insertmacro MUI_UNFUNCTION_DESCRIPTION_END
1034   
1035 !endif ; MAKENSIS_MODERN_UI
1036
1037 ; ============================================================================
1038 ; Callback functions
1039 ; ============================================================================
1040 !ifdef GTK1_DIR & GTK2_DIR
1041 ;Disable GTK-Wimp for GTK1
1042
1043 Function .onSelChange
1044         Push $0
1045         SectionGetFlags ${SecWiresharkGTK1} $0
1046         IntOp  $0 $0 & 1
1047         IntCmp $0 1 onSelChange.disableGTK2Sections
1048         ;enable GTK2Sections
1049         !insertmacro EnableSection ${SecGTKWimp}
1050         Goto onSelChange.end
1051 onSelChange.disableGTK2Sections:
1052         !insertmacro DisableSection ${SecGTKWimp}
1053         Goto onSelChange.end
1054 onSelChange.end:
1055         Pop $0
1056 FunctionEnd     
1057
1058 !else
1059 !ifdef GTK1_DIR | GTK2_DIR
1060 ; Disable FileExtension if Wireshark isn't selected
1061 Function .onSelChange
1062         Push $0
1063 !ifdef GTK1_DIR
1064         SectionGetFlags ${SecWiresharkGTK1} $0
1065         IntOp  $0 $0 & 1
1066         IntCmp $0 0 onSelChange.unselect
1067         SectionGetFlags ${SecFileExtensions} $0
1068         IntOp  $0 $0 & 16
1069         IntCmp $0 16 onSelChange.unreadonly
1070         Goto onSelChange.end
1071 !else
1072         SectionGetFlags ${SecWiresharkGTK2} $0
1073         IntOp  $0 $0 & 1
1074         IntCmp $0 0 onSelChange.unselect
1075         SectionGetFlags ${SecFileExtensions} $0
1076         IntOp  $0 $0 & 16
1077         IntCmp $0 16 onSelChange.unreadonly
1078         Goto onSelChange.end    
1079 !endif
1080 onSelChange.unselect:   
1081         SectionGetFlags ${SecFileExtensions} $0
1082         IntOp $0 $0 & 0xFFFFFFFE
1083         IntOp $0 $0 | 0x10
1084         SectionSetFlags ${SecFileExtensions} $0
1085         Goto onSelChange.end
1086 onSelChange.unreadonly:
1087         SectionGetFlags ${SecFileExtensions} $0
1088         IntOp $0 $0 & 0xFFFFFFEF
1089         SectionSetFlags ${SecFileExtensions} $0
1090         Goto onSelChange.end
1091 onSelChange.end:
1092         Pop $0
1093 FunctionEnd
1094 !endif
1095 !endif
1096
1097
1098 !include "GetWindowsVersion.nsh"
1099 !include WinMessages.nsh
1100
1101 Var NPF_START ;declare variable for holding the value of a registry key
1102 Var WINPCAP_VERSION ;declare variable for holding the value of a registry key
1103
1104 Function myShowCallback
1105
1106 ; Uinstall old Wireshark first
1107 ; XXX - doesn't work, but kept here for further experiments
1108 ;ReadRegStr $WIRESHARK_UNINSTALL HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "UninstallString"
1109 ;IfErrors lbl_wireshark_notinstalled ;if RegKey is unavailable, WinPcap is not installed
1110 ;MessageBox MB_YESNO|MB_ICONQUESTION "Uninstall the old Wireshark version first (recommended)?" 
1111 ; Hide the installer while uninstalling
1112 ;GetDlgItem $0 $HWNDPARENT 1
1113 ;FindWindow $0 "#32770" "" $HWNDPARENT
1114 ;MessageBox MB_OK "Window $0" 
1115 ;ShowWindow $0 ${SW_HIDE}
1116 ;HideWindow
1117 ;ExecWait '$WIRESHARK_UNINSTALL' $0
1118 ;DetailPrint "WinPcap uninstaller returned $0"
1119 ;GetDlgItem $0 $HWNDPARENT 1
1120 ;ShowWindow $0 ${SW_SHOW}
1121 ;MessageBox MB_OK "Uninstalled" 
1122 ;lbl_wireshark_notinstalled:
1123
1124
1125         ; Get the Windows version
1126         Call GetWindowsVersion
1127         Pop $R0 ; Windows Version
1128 !ifdef GTK2_DIR
1129         ; Enable GTK-Wimp only for Windows 2000/XP/2003
1130         ; ...as Win9x/ME/NT known to have problems with it!
1131         
1132         ;DetailPrint 'Windows Version: $R0'
1133         StrCmp $R0 '2000' lbl_select_wimp
1134         StrCmp $R0 'XP' lbl_select_wimp
1135         StrCmp $R0 '2003' lbl_select_wimp
1136         DetailPrint "Windows $R0 doesn't support GTK-Wimp!"
1137
1138         Goto lbl_ignore_wimp
1139 lbl_select_wimp:
1140         !insertmacro SelectSection ${SecGTKWimp}
1141
1142 lbl_ignore_wimp:
1143 !endif
1144
1145
1146         ; detect if WinPcap should be installed
1147         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 4" "Text" "Install WinPcap 3.1"
1148         ReadRegStr $WINPCAP_VERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayName"
1149         IfErrors 0 lbl_winpcap_installed ;if RegKey is available, WinPcap is already installed
1150         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 2" "Text" "WinPcap is currently not installed"
1151         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 2" "Flags" "DISABLED"
1152         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 5" "Text" "(Use Add/Remove Programs first to uninstall any undetected old WinPcap versions)"
1153         Goto lbl_winpcap_done
1154
1155 lbl_winpcap_installed:
1156         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 2" "Text" "$WINPCAP_VERSION"
1157         ; WinPcap 2.x (including betas): the version string starts with "WinPcap 2."
1158         StrCpy $1 "$WINPCAP_VERSION" 10
1159         StrCmp $1 "WinPcap 2." lbl_winpcap_do_install
1160         ; WinPcap 3.0 (including betas): the version string starts with "WinPcap 3.0"
1161         StrCpy $1 "$WINPCAP_VERSION" 11
1162         StrCmp $1 "WinPcap 3.0" lbl_winpcap_do_install
1163         ; WinPcap 3.1 previous beta's; exact string match
1164         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta" lbl_winpcap_do_install
1165         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta2" lbl_winpcap_do_install
1166         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta3" lbl_winpcap_do_install
1167         StrCmp "$WINPCAP_VERSION" "WinPcap 3.1 beta4" lbl_winpcap_do_install
1168
1169 ;lbl_winpcap_dont_install:
1170         ; seems to be the current or even a newer version, so don't install
1171         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 4" "State" "0"
1172         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 5" "Text" "If selected, the currently installed $WINPCAP_VERSION will be uninstalled first."
1173         Goto lbl_winpcap_done
1174
1175 lbl_winpcap_do_install:
1176         ; seems to be an old version, install newer one
1177         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 4" "State" "1"
1178         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 5" "Text" "The currently installed $WINPCAP_VERSION will be uninstalled first."
1179
1180 lbl_winpcap_done:
1181
1182         ; Disable NPF service setting for Win OT 
1183         StrCmp $R0 '95' lbl_npf_disable
1184         StrCmp $R0 '98' lbl_npf_disable
1185         StrCmp $R0 'ME' lbl_npf_disable
1186         ReadRegDWORD $NPF_START HKEY_LOCAL_MACHINE "SYSTEM\CurrentControlSet\Services\NPF" "Start"
1187         ; (Winpcap may not be installed already, so no regKey is no error here)
1188         IfErrors lbl_npf_done ;RegKey not available, so do not set it
1189         IntCmp $NPF_START 2 0 lbl_npf_done lbl_npf_done
1190         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 8" "State" "1"
1191         Goto lbl_npf_done
1192         ;disable
1193 lbl_npf_disable:
1194         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 8" "State" "0"
1195         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 8" "Flags" "DISABLED"
1196         WriteINIStr "$PLUGINSDIR\WinPcapPage.ini" "Field 9" "Flags" "DISABLED"  
1197 lbl_npf_done:
1198
1199
1200         ; if Wireshark was previously installed, unselect previously not installed icons etc.
1201         ; detect if Wireshark is already installed -> 
1202         ReadRegStr $0 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark" "UninstallString"
1203         IfErrors lbl_wireshark_notinstalled ;if RegKey is unavailable, Wireshark is not installed
1204
1205         ; only select Start Menu Group, if previously installed
1206         ; (we use the "all users" start menu, so select it first)
1207         SetShellVarContext all
1208         IfFileExists "$SMPROGRAMS\Wireshark\Wireshark.lnk" lbl_have_startmenu
1209         WriteINIStr "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 2" "State" "0"
1210 lbl_have_startmenu:
1211
1212         ; only select Desktop Icon, if previously installed
1213         IfFileExists "$DESKTOP\Wireshark.lnk" lbl_have_desktopicon
1214         WriteINIStr "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 3" "State" "0"
1215 lbl_have_desktopicon:
1216
1217         ; only select Quick Launch Icon, if previously installed
1218         IfFileExists "$QUICKLAUNCH\Wireshark.lnk" lbl_have_quicklaunchicon
1219         WriteINIStr "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 4" "State" "0"
1220 lbl_have_quicklaunchicon:
1221
1222 lbl_wireshark_notinstalled:
1223
1224
1225 FunctionEnd