diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 20:34:10 +0000 |
commit | e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch) | |
tree | 68cb5ef9081156392f1dd62a00c6ccc1451b93df /packaging/nsis/wireshark.nsi | |
parent | Initial commit. (diff) | |
download | wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip |
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'packaging/nsis/wireshark.nsi')
-rw-r--r-- | packaging/nsis/wireshark.nsi | 1657 |
1 files changed, 1657 insertions, 0 deletions
diff --git a/packaging/nsis/wireshark.nsi b/packaging/nsis/wireshark.nsi new file mode 100644 index 00000000..5271cd33 --- /dev/null +++ b/packaging/nsis/wireshark.nsi @@ -0,0 +1,1657 @@ +; +; wireshark.nsi +; + +; Set the compression mechanism first. +; As of NSIS 2.07, solid compression which makes installer about 1MB smaller +; is no longer the default, so use the /SOLID switch. +; This unfortunately is unknown to NSIS prior to 2.07 and creates an error. +; So if you get an error here, please update to at least NSIS 2.07! +SetCompressor /SOLID lzma +SetCompressorDictSize 64 ; MB + +!include "wireshark-common.nsh" +!include 'LogicLib.nsh' +!include "StrFunc.nsh" +!include "WordFunc.nsh" + +${StrRep} +${UnStrRep} + +; See https://nsis.sourceforge.io/Check_if_a_file_exists_at_compile_time for documentation +!macro !defineifexist _VAR_NAME _FILE_NAME + !tempfile _TEMPFILE + !ifdef NSIS_WIN32_MAKENSIS + ; Windows - cmd.exe + !system 'if exist "${_FILE_NAME}" echo !define ${_VAR_NAME} > "${_TEMPFILE}"' + !else + ; Posix - sh + !system 'if [ -e "${_FILE_NAME}" ]; then echo "!define ${_VAR_NAME}" > "${_TEMPFILE}"; fi' + !endif + !include '${_TEMPFILE}' + !delfile '${_TEMPFILE}' + !undef _TEMPFILE +!macroend +!define !defineifexist "!insertmacro !defineifexist" + +; ============================================================================ +; Header configuration +; ============================================================================ + +; The file to write +OutFile "${OUTFILE_DIR}\${PROGRAM_NAME}-${VERSION}-${WIRESHARK_TARGET_PLATFORM}.exe" +; Installer icon +Icon "${TOP_SRC_DIR}\resources\icons\wiresharkinst.ico" +; Uninstaller icon +UninstallIcon "${TOP_SRC_DIR}\resources\icons\wiresharkinst.ico" + +; ============================================================================ +; Modern UI +; ============================================================================ +; The modern user interface will look much better than the common one. +; However, as the development of the modern UI is still going on, and the script +; syntax changes, you will need exactly that NSIS version, which this script is +; made for. This is the current (December 2003) latest version: V2.0b4 +; If you are using a different version, it's not predictable what will happen. + +!include "MUI2.nsh" +!include "InstallOptions.nsh" +;!addplugindir ".\Plugins" + +!define MUI_ICON "${TOP_SRC_DIR}\resources\icons\wiresharkinst.ico" +!define MUI_UNICON "${TOP_SRC_DIR}\resources\icons\wiresharkinst.ico" +BrandingText "Wireshark${U+00ae} Installer" + +!define MUI_COMPONENTSPAGE_SMALLDESC +!define MUI_FINISHPAGE_NOAUTOCLOSE +!define MUI_WELCOMEPAGE_TITLE_3LINES +!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of ${PROGRAM_NAME}.$\r$\n$\r$\nBefore starting the installation, make sure ${PROGRAM_NAME} is not running.$\r$\n$\r$\nClick 'Next' to continue." +;!define MUI_FINISHPAGE_LINK "Install Npcap to be able to capture packets from a network." +;!define MUI_FINISHPAGE_LINK_LOCATION "https://npcap.com/" + +; NSIS shows Readme files by opening the Readme file with the default application for +; the file's extension. "README.win32" won't work in most cases, because extension "win32" +; is usually not associated with an appropriate text editor. We should use extension "txt" +; for a text file or "html" for an html README file. +!define MUI_FINISHPAGE_TITLE_3LINES +!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\NEWS.txt" +!define MUI_FINISHPAGE_SHOWREADME_TEXT "Show News" +!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED +; NSIS runs as Administrator and will run Wireshark as Administrator +; if these are enabled. +;!define MUI_FINISHPAGE_RUN "$INSTDIR\${PROGRAM_NAME_PATH}" +;!define MUI_FINISHPAGE_RUN_NOTCHECKED + +!define MUI_PAGE_CUSTOMFUNCTION_SHOW myShowCallback + +; ============================================================================ +; MUI Pages +; ============================================================================ + +!insertmacro MUI_PAGE_WELCOME + +!define MUI_LICENSEPAGE_TEXT_TOP "Wireshark is distributed under the GNU General Public License." +!define MUI_LICENSEPAGE_TEXT_BOTTOM "This is not an end user license agreement (EULA). It is provided here for informational purposes only." +!define MUI_LICENSEPAGE_BUTTON "Noted" +!insertmacro MUI_PAGE_LICENSE "${STAGING_DIR}\COPYING.txt" + +Page custom DisplayDonatePage + +!insertmacro MUI_PAGE_COMPONENTS +!ifdef QT_DIR +Page custom DisplayAdditionalTasksPage LeaveAdditionalTasksPage +!endif +!insertmacro MUI_PAGE_DIRECTORY +Page custom DisplayNpcapPage +Page custom DisplayUSBPcapPage +!insertmacro MUI_PAGE_INSTFILES +!insertmacro MUI_PAGE_FINISH + +; Uninstall stuff (NSIS 2.08: "\r\n" don't work here) +!define MUI_UNCONFIRMPAGE_TEXT_TOP "The following ${PROGRAM_NAME} installation will be removed. Click 'Next' to continue." +; Uninstall stuff (this text isn't used with the MODERN_UI!) +;UninstallText "This will uninstall ${PROGRAM_NAME}.\r\nBefore starting the uninstallation, make sure ${PROGRAM_NAME} is not running.\r\nClick 'Next' to continue." + +!define MUI_UNFINISHPAGE_NOAUTOCLOSE +!define MUI_WELCOMEPAGE_TITLE_3LINES +!define MUI_FINISHPAGE_TITLE_3LINES + +!insertmacro MUI_UNPAGE_WELCOME +!insertmacro MUI_UNPAGE_CONFIRM +!insertmacro MUI_UNPAGE_COMPONENTS +!insertmacro MUI_UNPAGE_INSTFILES +!insertmacro MUI_UNPAGE_FINISH + +; ============================================================================ +; MUI Languages +; ============================================================================ + +!insertmacro MUI_LANGUAGE "English" + +; ============================================================================ +; Reserve Files +; ============================================================================ + + ;Things that need to be extracted on first (keep these lines before any File command!) + ;Only useful for BZIP2 compression + + ; Old Modern 1 UI: https://nsis.sourceforge.io/Docs/Modern%20UI/Readme.html + ; To do: Upgrade to the Modern 2 UI: + ;ReserveFile "AdditionalTasksPage.ini" + ReserveFile "DonatePage.ini" + ReserveFile "NpcapPage.ini" + ReserveFile "USBPcapPage.ini" + ReserveFile /plugin InstallOptions.dll + + ; Modern UI 2 / nsDialog pages. + ; https://nsis.sourceforge.io/Docs/Modern%20UI%202/Readme.html + ; https://nsis.sourceforge.io/Docs/nsDialogs/Readme.html + !ifdef QT_DIR + !include "wireshark-additional-tasks.nsdinc" + !endif + +; ============================================================================ +; Section macros +; ============================================================================ +!include "Sections.nsh" + +; ============================================================================ +; Command Line +; ============================================================================ +!include "FileFunc.nsh" + +!insertmacro GetParameters +!insertmacro GetOptions + +; ========= Install extcap binary and help file ========= +!macro InstallExtcap EXTCAP_NAME + + SetOutPath $INSTDIR + File "${STAGING_DIR}\${EXTCAP_NAME}.html" + SetOutPath $INSTDIR\extcap + File "${STAGING_DIR}\extcap\${EXTCAP_NAME}.exe" + +!macroend + +; ========= Check if silent mode install of /EXTRACOMPONENTS ========= +!macro CheckExtrasFlag EXTRAS_NAME + !define EXTRAS_FLAG ${__LINE__} +Section + IfSilent +1 skip_${EXTRAS_FLAG} + push $R0 + push $R1 + push $R2 + ${GetParameters} $R0 + ${GetOptions} $R0 "/EXTRACOMPONENTS=" $R1 + IfErrors popreg_${EXTRAS_FLAG} + ${WordFind} $R1 "," "E+1" $R0 + +; No delimiters found - check for single word match + ${If} $R0 = 1 + StrCmp $R1 ${EXTRAS_NAME} install_${EXTRAS_FLAG} popreg_${EXTRAS_FLAG} + ${ENDIF} + +; Loop through all delimited words checking for match + IntOp $R2 0 + 1 + ${While} $R0 != 2 + StrCmp $R0 ${EXTRAS_NAME} install_${EXTRAS_FLAG} 0 + IntOp $R2 $R2 + 1 + ${WordFind} $R1 "," "E+$R2" $R0 + ${EndWhile} + Goto popreg_${EXTRAS_FLAG} + +install_${EXTRAS_FLAG}: + !insertmacro InstallExtcap ${EXTRAS_NAME} +popreg_${EXTRAS_FLAG}: + pop $R2 + pop $R1 + pop $R0 +skip_${EXTRAS_FLAG}: + !undef EXTRAS_FLAG +SectionEnd +!macroend + +; ============================================================================ +; Component page configuration +; ============================================================================ +ComponentText "The following components are available for installation." + +; ============================================================================ +; Directory selection page configuration +; ============================================================================ +; The text to prompt the user to enter a directory +DirText "Choose a directory in which to install ${PROGRAM_NAME}." + +; The default installation directory +InstallDir $PROGRAMFILES64\${PROGRAM_NAME} + +; See if this is an upgrade; if so, use the old InstallDir as default +InstallDirRegKey HKEY_LOCAL_MACHINE SOFTWARE\${PROGRAM_NAME} InstallDir + + +; ============================================================================ +; Install page configuration +; ============================================================================ +ShowInstDetails show + +; ============================================================================ +; Functions and macros +; ============================================================================ + +Var EXTENSION +; https://docs.microsoft.com/en-us/windows/win32/shell/fa-file-types +Function Associate + Push $R0 + !insertmacro PushFileExtensions + + Pop $EXTENSION + + ${DoUntil} $EXTENSION == ${FILE_EXTENSION_MARKER} + ReadRegStr $R0 HKCR $EXTENSION "" + StrCmp $R0 "" Associate.doRegister + Goto Associate.end + +Associate.doRegister: + ;The extension is not associated to any program, we can do the link + WriteRegStr HKCR $EXTENSION "" ${WIRESHARK_ASSOC} + DetailPrint "Registered file type: $EXTENSION" + +Associate.end: + Pop $EXTENSION + ${Loop} + + Pop $R0 +FunctionEnd + +; Control states +Var START_MENU_STATE +Var DESKTOP_ICON_STATE +Var FILE_ASSOCIATE_STATE + +; NSIS +Var OLD_UNINSTALLER +Var OLD_INSTDIR +Var OLD_DISPLAYNAME +Var TMP_UNINSTALLER + +; WiX +Var REGISTRY_BITS +Var TMP_PRODUCT_GUID +Var WIX_DISPLAYNAME +Var WIX_DISPLAYVERSION +Var WIX_UNINSTALLSTRING + +; ============================================================================ +; 64-bit support +; ============================================================================ +!include x64.nsh + +!include "GetWindowsVersion.nsh" +!include WinMessages.nsh + +Function .onInit + ; http://forums.winamp.com/printthread.php?s=16ffcdd04a8c8d52bee90c0cae273ac5&threadid=262873 + ${IfNot} ${RunningX64} + MessageBox MB_OK "Wireshark only runs on 64 bit machines.$\nTry installing a 32 bit version (3.6 or earlier) instead." /SD IDOK + Abort + ${EndIf} + + !if ${WIRESHARK_TARGET_PLATFORM} == "x64" + ${If} ${IsNativeARM64} + MessageBox MB_OK "You're installing the x64 version of Wireshark on an Arm64 system.$\nThe native Arm64 installer might work better." /SD IDOK + ${EndIf} + !endif + + !if ${WIRESHARK_TARGET_PLATFORM} == "arm64" + ${IfNot} ${IsNativeARM64} + MessageBox MB_OK "You're trying to install the Arm64 version of Wireshark on an x64 system.$\nTry the native x64 installer instead." /SD IDOK + Abort + ${EndIf} + !endif + + ; Get the Windows version + ${GetWindowsVersion} $R0 + + ; This should match the following: + ; - The NTDDI_VERSION and _WIN32_WINNT parts of cmakeconfig.h.in + ; - The <compatibility><application> section in image\wireshark.exe.manifest.in + ; - The VersionNT parts of packaging\wix\Prerequisites.wxi + + ; Uncomment to test. + ; MessageBox MB_OK "You're running Windows $R0." + + ; Check if we're able to run with this version + StrCmp $R0 '95' lbl_winversion_unsupported + StrCmp $R0 '98' lbl_winversion_unsupported + StrCmp $R0 'ME' lbl_winversion_unsupported + StrCmp $R0 'NT 4.0' lbl_winversion_unsupported_nt4 + StrCmp $R0 '2000' lbl_winversion_unsupported_2000 + StrCmp $R0 'XP' lbl_winversion_unsupported_xp_2003 + StrCmp $R0 '2003' lbl_winversion_unsupported_xp_2003 + StrCmp $R0 'Vista' lbl_winversion_unsupported_vista_2008 + StrCmp $R0 '2008' lbl_winversion_unsupported_vista_2008 + Goto lbl_winversion_supported + +lbl_winversion_unsupported: + MessageBox MB_OK \ + "Windows $R0 is no longer supported.$\nPlease install Ethereal 0.99.0 instead." \ + /SD IDOK + Quit + +lbl_winversion_unsupported_nt4: + MessageBox MB_OK \ + "Windows $R0 is no longer supported.$\nPlease install Wireshark 0.99.4 instead." \ + /SD IDOK + Quit + +lbl_winversion_unsupported_2000: + MessageBox MB_OK \ + "Windows $R0 is no longer supported.$\nPlease install Wireshark 1.2 or 1.0 instead." \ + /SD IDOK + Quit + +lbl_winversion_unsupported_xp_2003: + MessageBox MB_OK \ + "Windows $R0 is no longer supported.$\nPlease install ${PROGRAM_NAME} 1.12 or 1.10 instead." \ + /SD IDOK + Quit + +lbl_winversion_unsupported_vista_2008: + MessageBox MB_OK \ + "Windows $R0 is no longer supported.$\nPlease install ${PROGRAM_NAME} 2.2 instead." \ + /SD IDOK + Quit + +lbl_winversion_supported: +!insertmacro IsWiresharkRunning + + ; Default control values. + StrCpy $START_MENU_STATE ${BST_CHECKED} + StrCpy $DESKTOP_ICON_STATE ${BST_UNCHECKED} + StrCpy $FILE_ASSOCIATE_STATE ${BST_CHECKED} + + ; Copied from https://nsis.sourceforge.io/Auto-uninstall_old_before_installing_new + ReadRegStr $OLD_UNINSTALLER HKLM \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" \ + "UninstallString" + StrCmp $OLD_UNINSTALLER "" check_wix + + ReadRegStr $OLD_INSTDIR HKLM \ + "Software\Microsoft\Windows\CurrentVersion\App Paths\${PROGRAM_NAME}.exe" \ + "Path" + StrCmp $OLD_INSTDIR "" check_wix + + ReadRegStr $OLD_DISPLAYNAME HKLM \ + "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" \ + "DisplayName" + StrCmp $OLD_DISPLAYNAME "" done + + ; We're reinstalling. Flip our control states according to what the + ; user chose before. + ; (we use the "all users" start menu, so select it first) + SetShellVarContext all + ; MessageBox MB_OK|MB_ICONINFORMATION "oninit 1 sm $START_MENU_STATE di $DESKTOP_ICON_STATE" + ${IfNot} ${FileExists} $SMPROGRAMS\${PROGRAM_NAME}.lnk + StrCpy $START_MENU_STATE ${BST_UNCHECKED} + ${Endif} + ${If} ${FileExists} $DESKTOP\${PROGRAM_NAME}.lnk + StrCpy $DESKTOP_ICON_STATE ${BST_CHECKED} + ${Endif} + ; Leave FILE_ASSOCIATE_STATE checked. + ; MessageBox MB_OK|MB_ICONINFORMATION "oninit 2 sm $START_MENU_STATE $SMPROGRAMS\${PROGRAM_NAME}\${PROGRAM_NAME}.lnk \ + ; $\ndi $DESKTOP_ICON_STATE $DESKTOP\${PROGRAM_NAME}.lnk + + MessageBox MB_YESNOCANCEL|MB_ICONQUESTION \ + "$OLD_DISPLAYNAME is already installed.\ + $\n$\nWould you like to uninstall it first?" \ + /SD IDYES \ + IDYES prep_nsis_uninstaller \ + IDNO done + Abort + +; Copy the uninstaller to $TEMP and run it. +; The uninstaller normally does this by itself, but doesn't wait around +; for the executable to finish, which means ExecWait won't work correctly. +prep_nsis_uninstaller: + ClearErrors + StrCpy $TMP_UNINSTALLER "$TEMP\${PROGRAM_NAME}_uninstaller.exe" + ; ...because we surround UninstallString in quotes. + StrCpy $0 $OLD_UNINSTALLER -1 1 + StrCpy $1 "$TEMP\${PROGRAM_NAME}_uninstaller.exe" + StrCpy $2 1 + System::Call 'kernel32::CopyFile(t r0, t r1, b r2) 1' + ExecWait "$TMP_UNINSTALLER /S _?=$OLD_INSTDIR" + + Delete "$TMP_UNINSTALLER" + +; Look for a WiX-installed package. + +check_wix: + StrCpy $REGISTRY_BITS 64 + SetRegView 64 + check_wix_restart: + StrCpy $0 0 + wix_reg_enum_loop: + EnumRegKey $TMP_PRODUCT_GUID HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $0 + StrCmp $TMP_PRODUCT_GUID "" wix_enum_reg_done + IntOp $0 $0 + 1 + ReadRegStr $WIX_DISPLAYNAME HKLM \ + "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$TMP_PRODUCT_GUID" \ + "DisplayName" + ; MessageBox MB_OK|MB_ICONINFORMATION "Reading HKLM SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$1 DisplayName = $2" + ; Look for "Wireshark". + StrCmp $WIX_DISPLAYNAME "${PROGRAM_NAME}" wix_found wix_reg_enum_loop + + wix_found: + ReadRegStr $WIX_DISPLAYVERSION HKLM \ + "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$TMP_PRODUCT_GUID" \ + "DisplayVersion" + ReadRegStr $WIX_UNINSTALLSTRING HKLM \ + "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$TMP_PRODUCT_GUID" \ + "UninstallString" + StrCmp $WIX_UNINSTALLSTRING "" done + MessageBox MB_YESNOCANCEL|MB_ICONQUESTION \ + "$WIX_DISPLAYNAME $WIX_DISPLAYVERSION (msi) is already installed.\ + $\n$\nWould you like to uninstall it first?" \ + /SD IDYES \ + IDYES prep_wix_uninstaller \ + IDNO done + Abort + + ; Run the WiX-provided UninstallString. + prep_wix_uninstaller: + ClearErrors + ExecWait "$WIX_UNINSTALLSTRING" + + Goto done + + wix_enum_reg_done: + ; MessageBox MB_OK|MB_ICONINFORMATION "Checked $0 $REGISTRY_BITS bit keys" + IntCmp $REGISTRY_BITS 32 done + StrCpy $REGISTRY_BITS 32 + SetRegView 32 + Goto check_wix_restart + +done: + + ; Command line parameters + ${GetParameters} $R0 + + ${GetOptions} $R0 "/desktopicon=" $R1 + ${If} $R1 == "yes" + StrCpy $DESKTOP_ICON_STATE ${BST_CHECKED} + ${ElseIf} $R1 == "no" + StrCpy $DESKTOP_ICON_STATE ${BST_UNCHECKED} + ${Endif} + + ;Extract InstallOptions INI files + ;!insertmacro INSTALLOPTIONS_EXTRACT "AdditionalTasksPage.ini" + !insertmacro INSTALLOPTIONS_EXTRACT "DonatePage.ini" + !insertmacro INSTALLOPTIONS_EXTRACT "NpcapPage.ini" + !insertmacro INSTALLOPTIONS_EXTRACT "USBPcapPage.ini" +FunctionEnd + +!ifdef QT_DIR +Function DisplayAdditionalTasksPage + Call fnc_AdditionalTasksPage_Show +FunctionEnd +!endif + +Function DisplayDonatePage + !insertmacro MUI_HEADER_TEXT "Your donations keep these releases coming" "Donate today" + !insertmacro INSTALLOPTIONS_DISPLAY "DonatePage.ini" +FunctionEnd + +Function DisplayNpcapPage + !insertmacro MUI_HEADER_TEXT "Packet Capture" "Wireshark requires either Npcap or WinPcap to capture live network data." + !insertmacro INSTALLOPTIONS_DISPLAY "NpcapPage.ini" +FunctionEnd + +Function DisplayUSBPcapPage + !insertmacro MUI_HEADER_TEXT "USB Capture" "USBPcap is required to capture USB traffic. Should USBPcap be installed (experimental)?" + !insertmacro INSTALLOPTIONS_DISPLAY "USBPcapPage.ini" +FunctionEnd + +; ============================================================================ +; Installation execution commands +; ============================================================================ + +Var USBPCAP_UNINSTALL ;declare variable for holding the value of a registry key +;Var WIRESHARK_UNINSTALL ;declare variable for holding the value of a registry key + +Section "-Required" +;------------------------------------------- + +; +; Install for every user +; +SetShellVarContext all + +SetOutPath $INSTDIR +!ifndef SKIP_UNINSTALLER +WriteUninstaller "$INSTDIR\${UNINSTALLER_NAME}" +!endif +File "${STAGING_DIR}\libwiretap.dll" +File "${STAGING_DIR}\libwireshark.dll" +File "${STAGING_DIR}\libwsutil.dll" + +!include wireshark-manifest.nsh + +File "${STAGING_DIR}\COPYING.txt" +File "${STAGING_DIR}\NEWS.txt" +File "${STAGING_DIR}\README.txt" +File "${STAGING_DIR}\README.windows.txt" +File "${STAGING_DIR}\wka" +File "${STAGING_DIR}\pdml2html.xsl" +File "${STAGING_DIR}\ws.css" +File "${STAGING_DIR}\wireshark.html" +File "${STAGING_DIR}\wireshark-filter.html" +File "${STAGING_DIR}\dumpcap.exe" +File "${STAGING_DIR}\dumpcap.html" +File "${STAGING_DIR}\extcap.html" +File "${STAGING_DIR}\ipmap.html" +File "${STAGING_DIR}\release-notes.html" + +!ifdef USE_VCREDIST +; C-runtime redistributable +; vc_redist.x64.exe or vc_redist.x86.exe - copy and execute the redistributable installer +File "${VCREDIST_DIR}\${VCREDIST_EXE}" +; If the user already has the redistributable installed they will see a +; Big Ugly Dialog by default, asking if they want to uninstall or repair. +; Ideally we should add a checkbox for this somewhere. In the meantime, +; just do a "quiet" install. + +; http://asawicki.info/news_1597_installing_visual_c_redistributable_package_from_command_line.html +ExecWait '"$INSTDIR\${VCREDIST_EXE}" /install /quiet /norestart' $0 +DetailPrint "${VCREDIST_EXE} returned $0" + +; https://docs.microsoft.com/en-us/windows/desktop/Msi/error-codes +!define ERROR_SUCCESS 0 +!define ERROR_SUCCESS_REBOOT_INITIATED 1641 +!define ERROR_PRODUCT_VERSION 1638 +!define ERROR_SUCCESS_REBOOT_REQUIRED 3010 +${Switch} $0 + ${Case} ${ERROR_SUCCESS} + ${Case} ${ERROR_PRODUCT_VERSION} + ${Break} + ${Case} ${ERROR_SUCCESS_REBOOT_INITIATED} ; Shouldn't happen. + ${Case} ${ERROR_SUCCESS_REBOOT_REQUIRED} + SetRebootFlag true + ${Break} + ${Default} + MessageBox MB_OK "The Visual C++ Redistributable installer failed with error $0.$\nUnable to continue installation." /SD IDOK + Abort + ${Break} +${EndSwitch} + +Delete "$INSTDIR\${VCREDIST_EXE}" +!endif + + +; global config files - don't overwrite if already existing +;IfFileExists cfilters dont_overwrite_cfilters +File "${STAGING_DIR}\cfilters" +;dont_overwrite_cfilters: +;IfFileExists colorfilters dont_overwrite_colorfilters +File "${STAGING_DIR}\colorfilters" +;dont_overwrite_colorfilters: +;IfFileExists dfilters dont_overwrite_dfilters +File "${STAGING_DIR}\dfilters" +;dont_overwrite_dfilters: +;IfFileExists smi_modules dont_overwrite_smi_modules +File "${STAGING_DIR}\smi_modules" +;dont_overwrite_smi_modules: + + +; +; Install the Diameter DTD and XML files in the "diameter" subdirectory +; of the installation directory. +; +SetOutPath $INSTDIR\diameter +File "${STAGING_DIR}\diameter\AlcatelLucent.xml" +File "${STAGING_DIR}\diameter\chargecontrol.xml" +File "${STAGING_DIR}\diameter\Cisco.xml" +File "${STAGING_DIR}\diameter\CiscoSystems.xml" +File "${STAGING_DIR}\diameter\Custom.xml" +File "${STAGING_DIR}\diameter\dictionary.dtd" +File "${STAGING_DIR}\diameter\dictionary.xml" +File "${STAGING_DIR}\diameter\eap.xml" +File "${STAGING_DIR}\diameter\Ericsson.xml" +File "${STAGING_DIR}\diameter\etsie2e4.xml" +File "${STAGING_DIR}\diameter\HP.xml" +File "${STAGING_DIR}\diameter\Huawei.xml" +File "${STAGING_DIR}\diameter\Inovar.xml" +File "${STAGING_DIR}\diameter\Juniper.xml" +File "${STAGING_DIR}\diameter\Metaswitch.xml" +File "${STAGING_DIR}\diameter\Microsoft.xml" +File "${STAGING_DIR}\diameter\mobileipv4.xml" +File "${STAGING_DIR}\diameter\mobileipv6.xml" +File "${STAGING_DIR}\diameter\nasreq.xml" +File "${STAGING_DIR}\diameter\Nokia.xml" +File "${STAGING_DIR}\diameter\NokiaSolutionsAndNetworks.xml" +File "${STAGING_DIR}\diameter\Oracle.xml" +File "${STAGING_DIR}\diameter\Siemens.xml" +File "${STAGING_DIR}\diameter\sip.xml" +File "${STAGING_DIR}\diameter\Starent.xml" +File "${STAGING_DIR}\diameter\sunping.xml" +File "${STAGING_DIR}\diameter\Telefonica.xml" +File "${STAGING_DIR}\diameter\TGPP.xml" +File "${STAGING_DIR}\diameter\TGPP2.xml" +File "${STAGING_DIR}\diameter\Vodafone.xml" +File "${STAGING_DIR}\diameter\VerizonWireless.xml" +!include "custom_diameter_xmls.txt" +SetOutPath $INSTDIR + +; +; Install the RADIUS directory files in the "radius" subdirectory +; of the installation directory. +; +SetOutPath $INSTDIR\radius +File "${STAGING_DIR}\radius\README.radius_dictionary" +File "${STAGING_DIR}\radius\custom.includes" +File "${STAGING_DIR}\radius\dictionary" +File "${STAGING_DIR}\radius\dictionary.3com" +File "${STAGING_DIR}\radius\dictionary.3gpp" +File "${STAGING_DIR}\radius\dictionary.3gpp2" +File "${STAGING_DIR}\radius\dictionary.5x9" +File "${STAGING_DIR}\radius\dictionary.acc" +File "${STAGING_DIR}\radius\dictionary.acme" +File "${STAGING_DIR}\radius\dictionary.actelis" +File "${STAGING_DIR}\radius\dictionary.aerohive" +File "${STAGING_DIR}\radius\dictionary.airespace" +File "${STAGING_DIR}\radius\dictionary.alcatel" +File "${STAGING_DIR}\radius\dictionary.alcatel-lucent.aaa" +File "${STAGING_DIR}\radius\dictionary.alcatel.esam" +File "${STAGING_DIR}\radius\dictionary.alcatel.sr" +File "${STAGING_DIR}\radius\dictionary.alteon" +File "${STAGING_DIR}\radius\dictionary.altiga" +File "${STAGING_DIR}\radius\dictionary.alvarion" +File "${STAGING_DIR}\radius\dictionary.alvarion.wimax.v2_2" +File "${STAGING_DIR}\radius\dictionary.apc" +File "${STAGING_DIR}\radius\dictionary.aptilo" +File "${STAGING_DIR}\radius\dictionary.aptis" +File "${STAGING_DIR}\radius\dictionary.arbor" +File "${STAGING_DIR}\radius\dictionary.aruba" +File "${STAGING_DIR}\radius\dictionary.ascend" +File "${STAGING_DIR}\radius\dictionary.asn" +File "${STAGING_DIR}\radius\dictionary.audiocodes" +File "${STAGING_DIR}\radius\dictionary.avaya" +File "${STAGING_DIR}\radius\dictionary.azaire" +File "${STAGING_DIR}\radius\dictionary.bay" +File "${STAGING_DIR}\radius\dictionary.bintec" +File "${STAGING_DIR}\radius\dictionary.bluecoat" +File "${STAGING_DIR}\radius\dictionary.bristol" +File "${STAGING_DIR}\radius\dictionary.broadsoft" +File "${STAGING_DIR}\radius\dictionary.brocade" +File "${STAGING_DIR}\radius\dictionary.bskyb" +File "${STAGING_DIR}\radius\dictionary.bt" +File "${STAGING_DIR}\radius\dictionary.cablelabs" +File "${STAGING_DIR}\radius\dictionary.cabletron" +File "${STAGING_DIR}\radius\dictionary.camiant" +File "${STAGING_DIR}\radius\dictionary.chillispot" +File "${STAGING_DIR}\radius\dictionary.cisco" +File "${STAGING_DIR}\radius\dictionary.cisco.asa" +File "${STAGING_DIR}\radius\dictionary.cisco.bbsm" +File "${STAGING_DIR}\radius\dictionary.cisco.vpn3000" +File "${STAGING_DIR}\radius\dictionary.cisco.vpn5000" +File "${STAGING_DIR}\radius\dictionary.citrix" +File "${STAGING_DIR}\radius\dictionary.clavister" +File "${STAGING_DIR}\radius\dictionary.cnergee" +File "${STAGING_DIR}\radius\dictionary.colubris" +File "${STAGING_DIR}\radius\dictionary.columbia_university" +File "${STAGING_DIR}\radius\dictionary.compat" +File "${STAGING_DIR}\radius\dictionary.compatible" +File "${STAGING_DIR}\radius\dictionary.cosine" +File "${STAGING_DIR}\radius\dictionary.dante" +File "${STAGING_DIR}\radius\dictionary.dellemc" +File "${STAGING_DIR}\radius\dictionary.dhcp" +File "${STAGING_DIR}\radius\dictionary.digium" +File "${STAGING_DIR}\radius\dictionary.dlink" +File "${STAGING_DIR}\radius\dictionary.dragonwave" +File "${STAGING_DIR}\radius\dictionary.efficientip" +File "${STAGING_DIR}\radius\dictionary.eltex" +File "${STAGING_DIR}\radius\dictionary.enterasys" +File "${STAGING_DIR}\radius\dictionary.epygi" +File "${STAGING_DIR}\radius\dictionary.equallogic" +File "${STAGING_DIR}\radius\dictionary.ericsson" +File "${STAGING_DIR}\radius\dictionary.ericsson.ab" +File "${STAGING_DIR}\radius\dictionary.ericsson.packet.core.networks" +File "${STAGING_DIR}\radius\dictionary.extreme" +File "${STAGING_DIR}\radius\dictionary.f5" +File "${STAGING_DIR}\radius\dictionary.fdxtended" +File "${STAGING_DIR}\radius\dictionary.fortinet" +File "${STAGING_DIR}\radius\dictionary.foundry" +File "${STAGING_DIR}\radius\dictionary.freedhcp" +File "${STAGING_DIR}\radius\dictionary.freeradius" +File "${STAGING_DIR}\radius\dictionary.freeradius.internal" +File "${STAGING_DIR}\radius\dictionary.freeswitch" +File "${STAGING_DIR}\radius\dictionary.gandalf" +File "${STAGING_DIR}\radius\dictionary.garderos" +File "${STAGING_DIR}\radius\dictionary.gemtek" +File "${STAGING_DIR}\radius\dictionary.h3c" +File "${STAGING_DIR}\radius\dictionary.hp" +File "${STAGING_DIR}\radius\dictionary.huawei" +File "${STAGING_DIR}\radius\dictionary.iana" +File "${STAGING_DIR}\radius\dictionary.identity_engines" +File "${STAGING_DIR}\radius\dictionary.iea" +File "${STAGING_DIR}\radius\dictionary.infoblox" +File "${STAGING_DIR}\radius\dictionary.infonet" +File "${STAGING_DIR}\radius\dictionary.ipunplugged" +File "${STAGING_DIR}\radius\dictionary.issanni" +File "${STAGING_DIR}\radius\dictionary.itk" +File "${STAGING_DIR}\radius\dictionary.jradius" +File "${STAGING_DIR}\radius\dictionary.juniper" +File "${STAGING_DIR}\radius\dictionary.karlnet" +File "${STAGING_DIR}\radius\dictionary.kineto" +File "${STAGING_DIR}\radius\dictionary.lancom" +File "${STAGING_DIR}\radius\dictionary.livingston" +File "${STAGING_DIR}\radius\dictionary.localweb" +File "${STAGING_DIR}\radius\dictionary.lucent" +File "${STAGING_DIR}\radius\dictionary.manzara" +File "${STAGING_DIR}\radius\dictionary.meinberg" +File "${STAGING_DIR}\radius\dictionary.meraki" +File "${STAGING_DIR}\radius\dictionary.merit" +File "${STAGING_DIR}\radius\dictionary.meru" +File "${STAGING_DIR}\radius\dictionary.microsemi" +File "${STAGING_DIR}\radius\dictionary.microsoft" +File "${STAGING_DIR}\radius\dictionary.mikrotik" +File "${STAGING_DIR}\radius\dictionary.motorola" +File "${STAGING_DIR}\radius\dictionary.motorola.wimax" +File "${STAGING_DIR}\radius\dictionary.navini" +File "${STAGING_DIR}\radius\dictionary.netscreen" +File "${STAGING_DIR}\radius\dictionary.networkphysics" +File "${STAGING_DIR}\radius\dictionary.nexans" +File "${STAGING_DIR}\radius\dictionary.nokia" +File "${STAGING_DIR}\radius\dictionary.nokia.conflict" +File "${STAGING_DIR}\radius\dictionary.nomadix" +File "${STAGING_DIR}\radius\dictionary.nortel" +File "${STAGING_DIR}\radius\dictionary.ntua" +File "${STAGING_DIR}\radius\dictionary.openser" +File "${STAGING_DIR}\radius\dictionary.packeteer" +File "${STAGING_DIR}\radius\dictionary.paloalto" +File "${STAGING_DIR}\radius\dictionary.patton" +File "${STAGING_DIR}\radius\dictionary.perle" +File "${STAGING_DIR}\radius\dictionary.propel" +File "${STAGING_DIR}\radius\dictionary.prosoft" +File "${STAGING_DIR}\radius\dictionary.proxim" +File "${STAGING_DIR}\radius\dictionary.purewave" +File "${STAGING_DIR}\radius\dictionary.quiconnect" +File "${STAGING_DIR}\radius\dictionary.quintum" +File "${STAGING_DIR}\radius\dictionary.redcreek" +File "${STAGING_DIR}\radius\dictionary.rfc2865" +File "${STAGING_DIR}\radius\dictionary.rfc2866" +File "${STAGING_DIR}\radius\dictionary.rfc2867" +File "${STAGING_DIR}\radius\dictionary.rfc2868" +File "${STAGING_DIR}\radius\dictionary.rfc2869" +File "${STAGING_DIR}\radius\dictionary.rfc3162" +File "${STAGING_DIR}\radius\dictionary.rfc3576" +File "${STAGING_DIR}\radius\dictionary.rfc3580" +File "${STAGING_DIR}\radius\dictionary.rfc4072" +File "${STAGING_DIR}\radius\dictionary.rfc4372" +File "${STAGING_DIR}\radius\dictionary.rfc4603" +File "${STAGING_DIR}\radius\dictionary.rfc4675" +File "${STAGING_DIR}\radius\dictionary.rfc4679" +File "${STAGING_DIR}\radius\dictionary.rfc4818" +File "${STAGING_DIR}\radius\dictionary.rfc4849" +File "${STAGING_DIR}\radius\dictionary.rfc5090" +File "${STAGING_DIR}\radius\dictionary.rfc5176" +File "${STAGING_DIR}\radius\dictionary.rfc5447" +File "${STAGING_DIR}\radius\dictionary.rfc5580" +File "${STAGING_DIR}\radius\dictionary.rfc5607" +File "${STAGING_DIR}\radius\dictionary.rfc5904" +File "${STAGING_DIR}\radius\dictionary.rfc6519" +File "${STAGING_DIR}\radius\dictionary.rfc6572" +File "${STAGING_DIR}\radius\dictionary.rfc6677" +File "${STAGING_DIR}\radius\dictionary.rfc6911" +File "${STAGING_DIR}\radius\dictionary.rfc6929" +File "${STAGING_DIR}\radius\dictionary.rfc6930" +File "${STAGING_DIR}\radius\dictionary.rfc7055" +File "${STAGING_DIR}\radius\dictionary.rfc7155" +File "${STAGING_DIR}\radius\dictionary.rfc7268" +File "${STAGING_DIR}\radius\dictionary.rfc7499" +File "${STAGING_DIR}\radius\dictionary.rfc7930" +File "${STAGING_DIR}\radius\dictionary.riverbed" +File "${STAGING_DIR}\radius\dictionary.riverstone" +File "${STAGING_DIR}\radius\dictionary.roaringpenguin" +File "${STAGING_DIR}\radius\dictionary.ruckus" +File "${STAGING_DIR}\radius\dictionary.ruggedcom" +File "${STAGING_DIR}\radius\dictionary.sangoma" +File "${STAGING_DIR}\radius\dictionary.sg" +File "${STAGING_DIR}\radius\dictionary.shasta" +File "${STAGING_DIR}\radius\dictionary.shiva" +File "${STAGING_DIR}\radius\dictionary.siemens" +File "${STAGING_DIR}\radius\dictionary.slipstream" +File "${STAGING_DIR}\radius\dictionary.sofaware" +File "${STAGING_DIR}\radius\dictionary.sonicwall" +File "${STAGING_DIR}\radius\dictionary.springtide" +File "${STAGING_DIR}\radius\dictionary.starent" +File "${STAGING_DIR}\radius\dictionary.starent.vsa1" +File "${STAGING_DIR}\radius\dictionary.surfnet" +File "${STAGING_DIR}\radius\dictionary.symbol" +File "${STAGING_DIR}\radius\dictionary.t_systems_nova" +File "${STAGING_DIR}\radius\dictionary.telebit" +File "${STAGING_DIR}\radius\dictionary.telkom" +File "${STAGING_DIR}\radius\dictionary.terena" +File "${STAGING_DIR}\radius\dictionary.trapeze" +File "${STAGING_DIR}\radius\dictionary.travelping" +File "${STAGING_DIR}\radius\dictionary.tropos" +File "${STAGING_DIR}\radius\dictionary.ukerna" +File "${STAGING_DIR}\radius\dictionary.unisphere" +File "${STAGING_DIR}\radius\dictionary.unix" +File "${STAGING_DIR}\radius\dictionary.usr" +File "${STAGING_DIR}\radius\dictionary.utstarcom" +File "${STAGING_DIR}\radius\dictionary.valemount" +File "${STAGING_DIR}\radius\dictionary.versanet" +File "${STAGING_DIR}\radius\dictionary.verizon" +File "${STAGING_DIR}\radius\dictionary.vqp" +File "${STAGING_DIR}\radius\dictionary.walabi" +File "${STAGING_DIR}\radius\dictionary.waverider" +File "${STAGING_DIR}\radius\dictionary.wichorus" +File "${STAGING_DIR}\radius\dictionary.wimax" +File "${STAGING_DIR}\radius\dictionary.wimax.alvarion" +File "${STAGING_DIR}\radius\dictionary.wimax.wichorus" +File "${STAGING_DIR}\radius\dictionary.wispr" +File "${STAGING_DIR}\radius\dictionary.xedia" +File "${STAGING_DIR}\radius\dictionary.xylan" +File "${STAGING_DIR}\radius\dictionary.yubico" +File "${STAGING_DIR}\radius\dictionary.zeus" +File "${STAGING_DIR}\radius\dictionary.zte" +File "${STAGING_DIR}\radius\dictionary.zyxel" +!include "custom_radius_dict.txt" +SetOutPath $INSTDIR + +; +; install the dtds in the dtds subdirectory +; +SetOutPath $INSTDIR\dtds +File "${STAGING_DIR}\dtds\dc.dtd" +File "${STAGING_DIR}\dtds\itunes.dtd" +File "${STAGING_DIR}\dtds\mscml.dtd" +File "${STAGING_DIR}\dtds\pocsettings.dtd" +File "${STAGING_DIR}\dtds\presence.dtd" +File "${STAGING_DIR}\dtds\reginfo.dtd" +File "${STAGING_DIR}\dtds\rlmi.dtd" +File "${STAGING_DIR}\dtds\rss.dtd" +File "${STAGING_DIR}\dtds\smil.dtd" +File "${STAGING_DIR}\dtds\xcap-caps.dtd" +File "${STAGING_DIR}\dtds\xcap-error.dtd" +File "${STAGING_DIR}\dtds\watcherinfo.dtd" +SetOutPath $INSTDIR + +; Create the extcap directory +CreateDirectory $INSTDIR\extcap + +; +; install the protobuf .proto definitions in the protobuf subdirectory +; +SetOutPath $INSTDIR\protobuf +File "${STAGING_DIR}\protobuf\*.proto" + +; Install the TPNCP DAT file in the "tpncp" subdirectory +; of the installation directory. +SetOutPath $INSTDIR\tpncp +File "${STAGING_DIR}\tpncp\tpncp.dat" + +; +; install the wimaxasncp TLV definitions in the wimaxasncp subdirectory +; +SetOutPath $INSTDIR\wimaxasncp +File "${STAGING_DIR}\wimaxasncp\dictionary.xml" +File "${STAGING_DIR}\wimaxasncp\dictionary.dtd" +SetOutPath $INSTDIR + +; Write the installation path into the registry for InstallDirRegKey +WriteRegStr HKEY_LOCAL_MACHINE SOFTWARE\${PROGRAM_NAME} InstallDir "$INSTDIR" + +; Write the uninstall keys for Windows +; https://nsis.sourceforge.io/Add_uninstall_information_to_Add/Remove_Programs +; https://docs.microsoft.com/en-us/previous-versions/ms954376(v=msdn.10) +; https://docs.microsoft.com/en-us/windows/win32/msi/uninstall-registry-key +!define UNINSTALL_PATH "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" + +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "Comments" "${DISPLAY_NAME}" +!ifdef QT_DIR +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "DisplayIcon" "$INSTDIR\${PROGRAM_NAME_PATH},0" +!endif +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "DisplayName" "${DISPLAY_NAME}" +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "DisplayVersion" "${VERSION}" +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "HelpLink" "https://ask.wireshark.org/" +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "InstallLocation" "$INSTDIR" +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "Publisher" "The Wireshark developer community, https://www.wireshark.org" +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "URLInfoAbout" "https://www.wireshark.org" +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "URLUpdateInfo" "https://www.wireshark.org/download.html" + +WriteRegDWORD HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "NoModify" 1 +WriteRegDWORD HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "NoRepair" 1 +WriteRegDWORD HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "VersionMajor" ${MAJOR_VERSION} +WriteRegDWORD HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "VersionMinor" ${MINOR_VERSION} + +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "UninstallString" '"$INSTDIR\${UNINSTALLER_NAME}"' +WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "QuietUninstallString" '"$INSTDIR\${UNINSTALLER_NAME}" /S' + +; To quote https://web.archive.org/web/20150911221413/http://download.microsoft.com/download/0/4/6/046bbd36-0812-4c22-a870-41911c6487a6/WindowsUserExperience.pdf: +; "Do not include Readme, Help, or Uninstall entries on the Programs menu." +Delete "$SMPROGRAMS\${PROGRAM_NAME}\Wireshark Web Site.lnk" + +; Create file extensions if the Associated Tasks page check box +; is checked. +${If} $FILE_ASSOCIATE_STATE == ${BST_CHECKED} +WriteRegStr HKCR ${WIRESHARK_ASSOC} "" "Wireshark capture file" +WriteRegStr HKCR "${WIRESHARK_ASSOC}\Shell\open\command" "" '"$INSTDIR\${PROGRAM_NAME_PATH}" "%1"' +WriteRegStr HKCR "${WIRESHARK_ASSOC}\DefaultIcon" "" '"$INSTDIR\${PROGRAM_NAME_PATH}",1' +; We refresh the icon cache down in -Finally. +Call Associate +; If you add something here be sure to sync it with the uninstall section and the +; AdditionalTasks page +${Endif} + +; if running as a silent installer, don't try to install npcap +IfSilent SecRequired_skip_Npcap + +; Install Npcap (depending on npcap page setting) +ReadINIStr $0 "$PLUGINSDIR\NpcapPage.ini" "Field 4" "State" +StrCmp $0 "0" SecRequired_skip_Npcap +SetOutPath $INSTDIR +File "${EXTRA_INSTALLER_DIR}\npcap-${NPCAP_PACKAGE_VERSION}.exe" +ExecWait '"$INSTDIR\npcap-${NPCAP_PACKAGE_VERSION}.exe" /winpcap_mode=no /loopback_support=no' $0 +DetailPrint "Npcap installer returned $0" +SecRequired_skip_Npcap: + +; If running as a silent installer, don't try to install USBPcap +IfSilent SecRequired_skip_USBPcap + +ReadINIStr $0 "$PLUGINSDIR\USBPcapPage.ini" "Field 4" "State" +StrCmp $0 "0" SecRequired_skip_USBPcap +SetOutPath $INSTDIR +File "${EXTRA_INSTALLER_DIR}\USBPcapSetup-${USBPCAP_PACKAGE_VERSION}.exe" +ExecWait '"$INSTDIR\USBPcapSetup-${USBPCAP_PACKAGE_VERSION}.exe"' $0 +DetailPrint "USBPcap installer returned $0" +${If} $0 == "0" + ${If} ${RunningX64} + ${DisableX64FSRedirection} + SetRegView 64 + ${EndIf} + ReadRegStr $USBPCAP_UNINSTALL HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\USBPcap" "UninstallString" + ${If} ${RunningX64} + ${EnableX64FSRedirection} + SetRegView 32 + ${EndIf} + ${StrRep} $0 '$USBPCAP_UNINSTALL' 'Uninstall.exe' 'USBPcapCMD.exe' + ${StrRep} $1 '$0' '"' '' + CopyFiles /SILENT $1 $INSTDIR\extcap + SetRebootFlag true +${EndIf} +SecRequired_skip_USBPcap: + +; If no user profile exists for Wireshark but for Ethereal, copy it over +SetShellVarContext current +IfFileExists $APPDATA\Wireshark profile_done +IfFileExists $APPDATA\Ethereal 0 profile_done +;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 +CreateDirectory $APPDATA\Wireshark +CopyFiles $APPDATA\Ethereal\*.* $APPDATA\Wireshark +profile_done: +SetShellVarContext all + +SectionEnd ; "Required" + +!ifdef QT_DIR +Section "${PROGRAM_NAME}" SecWiresharkQt +;------------------------------------------- +; by default, Wireshark.exe is installed +SetOutPath $INSTDIR +File "${QT_DIR}\${PROGRAM_NAME_PATH}" +; Write an entry for ShellExecute +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\${PROGRAM_NAME_PATH}" "" '$INSTDIR\${PROGRAM_NAME_PATH}' +WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\${PROGRAM_NAME_PATH}" "Path" '$INSTDIR' + +!ifndef SKIP_NSIS_QT_DLLS +!include wireshark-qt-manifest.nsh +!endif + +${!defineifexist} TRANSLATIONS_FOLDER "${QT_DIR}\translations" +SetOutPath $INSTDIR +!ifdef TRANSLATIONS_FOLDER + ; Starting from Qt 5.5, *.qm files are put in a translations subfolder + File /r "${QT_DIR}\translations" +!else + File "${QT_DIR}\*.qm" +!endif + +; Is the Start Menu check box checked? +${If} $START_MENU_STATE == ${BST_CHECKED} + CreateShortCut "$SMPROGRAMS\${PROGRAM_NAME}.lnk" "$INSTDIR\${PROGRAM_NAME_PATH}" "" "$INSTDIR\${PROGRAM_NAME_PATH}" 0 "" "" "${PROGRAM_FULL_NAME}" +${Endif} + +${If} $DESKTOP_ICON_STATE == ${BST_CHECKED} + CreateShortCut "$DESKTOP\${PROGRAM_NAME}.lnk" "$INSTDIR\${PROGRAM_NAME_PATH}" "" "$INSTDIR\${PROGRAM_NAME_PATH}" 0 "" "" "${PROGRAM_FULL_NAME}" +${Endif} + +SectionEnd ; "SecWiresharkQt" +!endif + + +Section "TShark" SecTShark +;------------------------------------------- +SetOutPath $INSTDIR +File "${STAGING_DIR}\tshark.exe" +File "${STAGING_DIR}\tshark.html" +SectionEnd + +Section "-Plugins & Extensions" + +SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs' +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g711.dll" +!ifdef SPANDSP_FOUND +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g722.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g726.dll" +!endif +!ifdef BCG729_FOUND +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\g729.dll" +!endif +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\l16mono.dll" +!ifdef SBC_FOUND +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\sbc.dll" +!endif +!ifdef ILBC_FOUND +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\ilbc.dll" +!endif +!ifdef OPUS_FOUND +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\codecs\opus_dec.dll" +!endif + +; This should be a function or macro +SetOutPath '$INSTDIR\profiles\Bluetooth' +File "${STAGING_DIR}\profiles\Bluetooth\colorfilters" +File "${STAGING_DIR}\profiles\Bluetooth\preferences" +SetOutPath '$INSTDIR\profiles\Classic' +File "${STAGING_DIR}\profiles\Classic\colorfilters" +SetOutPath '$INSTDIR\profiles\No Reassembly' +File "${STAGING_DIR}\profiles\No Reassembly\preferences" + +SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan' +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\ethercat.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\gryphon.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\irda.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\opcua.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\profinet.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\unistim.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\wimax.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\wimaxasncp.dll" +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\wimaxmacphy.dll" +!include "custom_plugins.txt" + +SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\wiretap' +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\wiretap\usbdump.dll" + +SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan' +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\mate.dll" + +!ifdef SMI_DIR +SetOutPath '$INSTDIR\snmp\mibs' +File "${SMI_DIR}\share\mibs\iana\*" +File "${SMI_DIR}\share\mibs\ietf\*" +File "${SMI_DIR}\share\mibs\irtf\*" +File "${SMI_DIR}\share\mibs\tubs\*" +File "${SMI_DIR}\share\pibs\*" +File "${SMI_DIR}\share\yang\*.yang" +!include "custom_mibs.txt" +!endif + +SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan' +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\transum.dll" + +SetOutPath '$INSTDIR\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan' +File "${STAGING_DIR}\plugins\${MAJOR_VERSION}.${MINOR_VERSION}\epan\stats_tree.dll" + +SectionEnd ; "Plugins / Extensions" + +Section "-Additional command line tools" + +SetOutPath $INSTDIR +File "${STAGING_DIR}\capinfos.exe" +File "${STAGING_DIR}\capinfos.html" + +File "${STAGING_DIR}\captype.exe" +File "${STAGING_DIR}\captype.html" + +File "${STAGING_DIR}\editcap.exe" +File "${STAGING_DIR}\editcap.html" + +File "${STAGING_DIR}\mergecap.exe" +File "${STAGING_DIR}\mergecap.html" + +!ifdef MMDBRESOLVE_EXE +File "${STAGING_DIR}\mmdbresolve.html" +File "${STAGING_DIR}\mmdbresolve.exe" +!endif + +File "${STAGING_DIR}\randpkt.exe" +File "${STAGING_DIR}\randpkt.html" + +File "${STAGING_DIR}\rawshark.exe" +File "${STAGING_DIR}\rawshark.html" + +File "${STAGING_DIR}\reordercap.exe" +File "${STAGING_DIR}\reordercap.html" + +File "${STAGING_DIR}\sharkd.exe" +;File "${STAGING_DIR}\sharkd.html" + +File "${STAGING_DIR}\text2pcap.exe" +File "${STAGING_DIR}\text2pcap.html" + +SectionEnd ; "Tools" + +SectionGroup /e "External capture tools (extcap)" SecExtcapGroup + +Section /o "Androiddump" SecAndroiddump +;------------------------------------------- + !insertmacro InstallExtcap "androiddump" +SectionEnd +!insertmacro CheckExtrasFlag "androiddump" + +!ifdef BUILD_etwdump +Section "Etwdump" SecEtwdump +;------------------------------------------- + !insertmacro InstallExtcap "Etwdump" +SectionEnd +!insertmacro CheckExtrasFlag "Etwdump" +!endif + +Section /o "Randpktdump" SecRandpktdump +;------------------------------------------- + !insertmacro InstallExtcap "randpktdump" +SectionEnd +!insertmacro CheckExtrasFlag "randpktdump" + +!ifdef LIBSSH_FOUND +Section /o "Sshdump, Ciscodump, and Wifidump" SecSshdump +;------------------------------------------- + !insertmacro InstallExtcap "sshdump" + !insertmacro InstallExtcap "ciscodump" + !insertmacro InstallExtcap "wifidump" +SectionEnd +!insertmacro CheckExtrasFlag "sshdump" +!insertmacro CheckExtrasFlag "ciscodump" +!insertmacro CheckExtrasFlag "wifidump" +!endif + +Section /o "UDPdump" SecUDPdump +;------------------------------------------- + !insertmacro InstallExtcap "udpdump" +SectionEnd +!insertmacro CheckExtrasFlag "udpdump" + +SectionGroupEnd ; "External Capture (extcap)" + +Section "-Clear Partial Selected" +!insertmacro ClearSectionFlag ${SecExtcapGroup} ${SF_PSELECTED} +SectionEnd + +!ifdef DOCBOOK_DIR +Section "-Documentation" + +SetOutPath "$INSTDIR\Wireshark User's Guide" +File /r "${DOCBOOK_DIR}\wsug_html_chunked\*.*" + +SetOutPath $INSTDIR +File "${DOCBOOK_DIR}\faq.html" +SectionEnd +!endif + +Section "-Finally" + +!insertmacro UpdateIcons + +; Compute and write the installation directory size +${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 +IntFmt $0 "0x%08X" $0 +WriteRegDWORD HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}" "EstimatedSize" "$0" + +SectionEnd + +; ============================================================================ +; Section macros +; ============================================================================ +!include "Sections.nsh" + +; ============================================================================ +; Uninstall page configuration +; ============================================================================ +ShowUninstDetails show + +; ============================================================================ +; Functions and macros +; ============================================================================ + +Function un.Disassociate + Push $R0 +!insertmacro PushFileExtensions + + Pop $EXTENSION + ${DoUntil} $EXTENSION == ${FILE_EXTENSION_MARKER} + ReadRegStr $R0 HKCR $EXTENSION "" + StrCmp $R0 ${WIRESHARK_ASSOC} un.Disassociate.doDeregister + Goto un.Disassociate.end +un.Disassociate.doDeregister: + ; The extension is associated with Wireshark so, we must destroy this! + DeleteRegKey HKCR $EXTENSION + DetailPrint "Deregistered file type: $EXTENSION" +un.Disassociate.end: + Pop $EXTENSION + ${Loop} + + Pop $R0 +FunctionEnd + +Section "-Required" +SectionEnd + +!define EXECUTABLE_MARKER "EXECUTABLE_MARKER" +Var EXECUTABLE + +Section /o "Un.USBPcap" un.SecUSBPcap +;------------------------------------------- +SectionIn 2 +${If} ${RunningX64} + ${DisableX64FSRedirection} + SetRegView 64 +${EndIf} +ReadRegStr $1 HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\USBPcap" "UninstallString" +${If} ${RunningX64} + ${EnableX64FSRedirection} + SetRegView 32 +${EndIf} +${If} $1 != "" + ${UnStrRep} $2 '$1' '\Uninstall.exe' '' + ${UnStrRep} $3 '$2' '"' '' + ExecWait '$1 _?=$3' $0 + DetailPrint "USBPcap uninstaller returned $0" + ${If} $0 == "0" + Delete "$3\Uninstall.exe" + Delete "$INSTDIR\extcap\USBPcapCMD.exe" + ${EndIf} +${EndIf} +ClearErrors +SectionEnd + + +Section "Uninstall" un.SecUinstall +;------------------------------------------- +; +; UnInstall for every user +; +SectionIn 1 2 +SetShellVarContext all + +!insertmacro IsWiresharkRunning + +Push "${EXECUTABLE_MARKER}" +Push "${PROGRAM_NAME}" +Push "capinfos" +Push "captype" +Push "dftest" +Push "dumpcap" +Push "editcap" +Push "mergecap" +Push "randpkt" +Push "rawshark" +Push "reordercap" +Push "sharkd" +Push "text2pcap" +Push "tshark" + +!ifdef MMDBRESOLVE_EXE +Push "mmdbresolve" +!endif + +Pop $EXECUTABLE +${DoUntil} $EXECUTABLE == ${EXECUTABLE_MARKER} + + ; IsWiresharkRunning should make sure everything is closed down so we *shouldn't* run + ; into any problems here. + Delete "$INSTDIR\$EXECUTABLE.exe" + IfErrors 0 deletionSuccess + MessageBox MB_OK "$EXECUTABLE.exe could not be removed. Is it in use?" /SD IDOK IDOK 0 + Abort "$EXECUTABLE.exe could not be removed. Aborting the uninstall process." + +deletionSuccess: + Pop $EXECUTABLE + +${Loop} + + +DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" +DeleteRegKey HKEY_LOCAL_MACHINE "Software\${PROGRAM_NAME}" +DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\${PROGRAM_NAME}.exe" + +Call un.Disassociate + +DeleteRegKey HKCR ${WIRESHARK_ASSOC} +DeleteRegKey HKCR "${WIRESHARK_ASSOC}\Shell\open\command" +DeleteRegKey HKCR "${WIRESHARK_ASSOC}\DefaultIcon" + +Delete "$INSTDIR\*.dll" +Delete "$INSTDIR\*.exe" +Delete "$INSTDIR\*.html" +Delete "$INSTDIR\*.qm" +Delete "$INSTDIR\accessible\*.*" +Delete "$INSTDIR\AUTHORS-SHORT" +Delete "$INSTDIR\COPYING*" +Delete "$INSTDIR\audio\*.*" +Delete "$INSTDIR\bearer\*.*" +Delete "$INSTDIR\diameter\*.*" +Delete "$INSTDIR\extcap\androiddump.*" +Delete "$INSTDIR\extcap\ciscodump.*" +Delete "$INSTDIR\extcap\etwdump.*" +Delete "$INSTDIR\extcap\randpktdump.*" +Delete "$INSTDIR\extcap\sshdump.*" +Delete "$INSTDIR\extcap\udpdump.*" +Delete "$INSTDIR\extcap\wifidump.*" +Delete "$INSTDIR\gpl-2.0-standalone.html" +Delete "$INSTDIR\Acknowledgements.md" +Delete "$INSTDIR\generic\*.*" +Delete "$INSTDIR\help\*.*" +Delete "$INSTDIR\iconengines\*.*" +Delete "$INSTDIR\imageformats\*.*" +Delete "$INSTDIR\mediaservice\*.*" +Delete "$INSTDIR\multimedia\*.*" +Delete "$INSTDIR\networkinformation\*.*" +Delete "$INSTDIR\platforms\*.*" +Delete "$INSTDIR\playlistformats\*.*" +Delete "$INSTDIR\printsupport\*.*" +Delete "$INSTDIR\share\glib-2.0\schemas\*.*" +Delete "$INSTDIR\snmp\*.*" +Delete "$INSTDIR\snmp\mibs\*.*" +Delete "$INSTDIR\styles\translations\*.*" +Delete "$INSTDIR\styles\*.*" +Delete "$INSTDIR\protobuf\*.*" +Delete "$INSTDIR\tls\*.*" +Delete "$INSTDIR\tpncp\*.*" +Delete "$INSTDIR\translations\*.*" +Delete "$INSTDIR\ui\*.*" +Delete "$INSTDIR\wimaxasncp\*.*" +Delete "$INSTDIR\ws.css" +; previous versions installed these files +Delete "$INSTDIR\*.manifest" +; previous versions installed this file +Delete "$INSTDIR\AUTHORS-SHORT-FORMAT" +Delete "$INSTDIR\README*" +Delete "$INSTDIR\NEWS.txt" +Delete "$INSTDIR\manuf" +Delete "$INSTDIR\wka" +Delete "$INSTDIR\services" +Delete "$INSTDIR\pdml2html.xsl" +Delete "$INSTDIR\pcrepattern.3.txt" +Delete "$INSTDIR\user-guide.chm" +Delete "$INSTDIR\example_snmp_users_file" +Delete "$INSTDIR\ipmap.html" +Delete "$INSTDIR\radius\*.*" +Delete "$INSTDIR\dtds\*.*" +Delete "$INSTDIR\browser_sslkeylog.lua" +Delete "$INSTDIR\console.lua" +Delete "$INSTDIR\dtd_gen.lua" +Delete "$INSTDIR\init.lua" +Delete "$INSTDIR\release-notes.html" + +RMDir "$INSTDIR\accessible" +RMDir "$INSTDIR\audio" +RMDir "$INSTDIR\bearer" +RMDir "$INSTDIR\extcap" +RMDir "$INSTDIR\iconengines" +RMDir "$INSTDIR\imageformats" +RMDir "$INSTDIR\mediaservice" +RMDir "$INSTDIR\multimedia" +RMDir "$INSTDIR\networkinformation" +RMDir "$INSTDIR\platforms" +RMDir "$INSTDIR\playlistformats" +RMDir "$INSTDIR\printsupport" +RMDir "$INSTDIR\styles\translations" +RMDir "$INSTDIR\styles" +RMDir "$SMPROGRAMS\${PROGRAM_NAME}" +RMDir "$INSTDIR\help" +RMDir "$INSTDIR\generic" +RMDir /r "$INSTDIR\Wireshark User's Guide" +RMDir "$INSTDIR\diameter" +RMDir "$INSTDIR\snmp\mibs" +RMDir "$INSTDIR\snmp" +RMDir "$INSTDIR\radius" +RMDir "$INSTDIR\dtds" +RMDir "$INSTDIR\protobuf" +RMDir "$INSTDIR\tls" +RMDir "$INSTDIR\tpncp" +RMDir "$INSTDIR\translations" +RMDir "$INSTDIR\ui" +RMDir "$INSTDIR\wimaxasncp" +RMDir "$INSTDIR" + +SectionEnd ; "Uinstall" + +Section "Un.Plugins" un.SecPlugins +;------------------------------------------- +SectionIn 1 2 +;Delete "$INSTDIR\plugins\${VERSION}\*.*" +;Delete "$INSTDIR\plugins\*.*" +;RMDir "$INSTDIR\plugins\${VERSION}" +;RMDir "$INSTDIR\plugins" +RMDir /r "$INSTDIR\plugins" +SectionEnd + +Section "Un.Global Profiles" un.SecProfiles +;------------------------------------------- +SectionIn 1 2 +RMDir /r "$INSTDIR\profiles" +SectionEnd + +Section "Un.Global Settings" un.SecGlobalSettings +;------------------------------------------- +SectionIn 1 2 +Delete "$INSTDIR\cfilters" +Delete "$INSTDIR\colorfilters" +Delete "$INSTDIR\dfilters" +Delete "$INSTDIR\enterprises.tsv" +Delete "$INSTDIR\smi_modules" +RMDir "$INSTDIR" +SectionEnd + +Section /o "Un.Personal Settings" un.SecPersonalSettings +;------------------------------------------- +SectionIn 2 +SetShellVarContext current +Delete "$APPDATA\${PROGRAM_NAME}\*.*" +RMDir "$APPDATA\${PROGRAM_NAME}" +DeleteRegKey HKCU "Software\${PROGRAM_NAME}" +SectionEnd + +;VAR un.NPCAP_UNINSTALL + +Section /o "Un.Npcap" un.SecNpcap +;------------------------------------------- +SectionIn 2 +ReadRegStr $1 HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NpcapInst" "UninstallString" +;IfErrors un.lbl_npcap_notinstalled ;if RegKey is unavailable, Npcap is not installed +${If} $1 != "" + ;MessageBox MB_OK "Npcap $1" /SD IDOK + ExecWait '$1' $0 + DetailPrint "Npcap uninstaller returned $0" + ;SetRebootFlag true +${EndIf} +;un.lbl_npcap_notinstalled: +SectionEnd + +Section "-Un.Finally" +;------------------------------------------- +SectionIn 1 2 + +!insertmacro UpdateIcons + +; this test must be done after all other things uninstalled (e.g. Global Settings) +IfFileExists "$INSTDIR" 0 NoFinalErrorMsg + MessageBox MB_OK "Unable to remove $INSTDIR." /SD IDOK IDOK 0 ; skipped if dir doesn't exist +NoFinalErrorMsg: +SectionEnd + +; Sign our installer and uninstaller during compilation. +!ifdef ENABLE_SIGNED_NSIS +!finalize 'sign-wireshark.bat "%1"' = 0 ; %1 is replaced by the installer exe to be signed. +!uninstfinalize 'sign-wireshark.bat "%1"' = 0 ; %1 is replaced by the uninstaller exe to be signed. +!endif + +; ============================================================================ +; PLEASE MAKE SURE, THAT THE DESCRIPTIVE TEXT FITS INTO THE DESCRIPTION FIELD! +; ============================================================================ +!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN +!ifdef QT_DIR + !insertmacro MUI_DESCRIPTION_TEXT ${SecWiresharkQt} "The main network protocol analyzer application." +!endif + !insertmacro MUI_DESCRIPTION_TEXT ${SecTShark} "Text based network protocol analyzer." + + !insertmacro MUI_DESCRIPTION_TEXT ${SecExtcapGroup} "External Capture Interfaces" + !insertmacro MUI_DESCRIPTION_TEXT ${SecAndroiddump} "Provide capture interfaces from Android devices." + !ifdef BUILD_etwdump + !insertmacro MUI_DESCRIPTION_TEXT ${SecEtwdump} "Provide an interface to read Event Tracing for Windows (ETW) event trace (ETL)." + !endif + !insertmacro MUI_DESCRIPTION_TEXT ${SecRandpktdump} "Provide an interface to the random packet generator. (see also randpkt)" + !ifdef LIBSSH_FOUND + !insertmacro MUI_DESCRIPTION_TEXT ${SecSshdump} "Provide remote capture through SSH. (tcpdump, Cisco EPC, wifi)" + !endif + !insertmacro MUI_DESCRIPTION_TEXT ${SecUDPdump} "Provide capture interface to receive UDP packets streamed from network devices." + +!insertmacro MUI_FUNCTION_DESCRIPTION_END + +!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN + !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUinstall} "Uninstall all ${PROGRAM_NAME} components." + !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPlugins} "Uninstall all Plugins (even from previous ${PROGRAM_NAME} versions)." + !insertmacro MUI_DESCRIPTION_TEXT ${un.SecProfiles} "Uninstall all global configuration profiles." + !insertmacro MUI_DESCRIPTION_TEXT ${un.SecGlobalSettings} "Uninstall global settings like: $INSTDIR\cfilters" + !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPersonalSettings} "Uninstall personal settings like your preferences file from your profile: $PROFILE." + !insertmacro MUI_DESCRIPTION_TEXT ${un.SecNpcap} "Call Npcap's uninstall program." + !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUSBPcap} "Call USBPcap's uninstall program." +!insertmacro MUI_UNFUNCTION_DESCRIPTION_END + +; ============================================================================ +; Callback functions +; ============================================================================ +!ifdef QT_DIR + +Var QT_SELECTED + +; Called from fnc_AdditionalTasksPage_Create via DisplayAdditionalTasksPage. +Function InitAdditionalTasksPage + ; We've created the Additional tasks page. Update our control states + ; before they are shown. + ; We set XXX_STATE -> XxxCheckBox here and go the other direction below. + ${NSD_SetState} $hCtl_AdditionalTasksPage_StartMenuCheckBox $START_MENU_STATE + ${NSD_SetState} $hCtl_AdditionalTasksPage_DesktopIconCheckBox $DESKTOP_ICON_STATE + ${NSD_SetState} $hCtl_AdditionalTasksPage_AssociateExtensionsCheckBox $FILE_ASSOCIATE_STATE + + StrCpy $QT_SELECTED 0 + ${If} ${SectionIsSelected} ${SecWiresharkQt} + StrCpy $QT_SELECTED 1 + ${Endif} + EnableWindow $hCtl_AdditionalTasksPage_CreateShortcutsLabel $QT_SELECTED + EnableWindow $hCtl_AdditionalTasksPage_StartMenuCheckBox $QT_SELECTED + EnableWindow $hCtl_AdditionalTasksPage_DesktopIconCheckBox $QT_SELECTED + + EnableWindow $hCtl_AdditionalTasksPage_ExtensionsLabel $QT_SELECTED + EnableWindow $hCtl_AdditionalTasksPage_AssociateExtensionsCheckBox $QT_SELECTED + EnableWindow $hCtl_AdditionalTasksPage_FileExtensionsLabel $QT_SELECTED +FunctionEnd + +Function LeaveAdditionalTasksPage + ; We're leaving the Additional tasks page. Get our control states + ; before they're destroyed. + ; We set XxxCheckBox -> XXX_STATE here and go the other direction above. + ${NSD_GetState} $hCtl_AdditionalTasksPage_StartMenuCheckBox $START_MENU_STATE + ${NSD_GetState} $hCtl_AdditionalTasksPage_DesktopIconCheckBox $DESKTOP_ICON_STATE + ${NSD_GetState} $hCtl_AdditionalTasksPage_AssociateExtensionsCheckBox $FILE_ASSOCIATE_STATE +FunctionEnd + +!endif ; QT_DIR + +Var NPCAP_NAME ; DisplayName from Npcap installation +Var WINPCAP_NAME ; DisplayName from WinPcap installation +Var NPCAP_DISPLAY_VERSION ; DisplayVersion from Npcap installation +Var USBPCAP_NAME ; DisplayName from USBPcap installation + +Function myShowCallback + + ClearErrors + ; detect if WinPcap should be installed + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 4" "Text" "Install Npcap ${NPCAP_PACKAGE_VERSION}" + ReadRegStr $NPCAP_NAME HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NpcapInst" "DisplayName" + IfErrors 0 lbl_npcap_installed + ; check also if WinPcap is installed + ReadRegStr $WINPCAP_NAME HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinPcapInst" "DisplayName" + IfErrors 0 lbl_winpcap_installed ;if RegKey is available, WinPcap is already installed + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 2" "Text" "Neither of these are installed" + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 2" "Flags" "DISABLED" + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 5" "Text" "(Use Add/Remove Programs first to uninstall any undetected old Npcap or WinPcap versions)" + Goto lbl_npcap_done + +lbl_npcap_installed: + ReadRegStr $NPCAP_DISPLAY_VERSION HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\NpcapInst" "DisplayVersion" + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 1" "Text" "Currently installed Npcap version" + StrCmp $NPCAP_NAME "Npcap" 0 +3 + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 2" "Text" "Npcap $NPCAP_DISPLAY_VERSION" + Goto +2 + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 2" "Text" "$NPCAP_NAME" + + ; Compare the installed build against the one we have. + StrCmp $NPCAP_DISPLAY_VERSION "" lbl_npcap_do_install ; Npcap wasn't installed improperly? + ${VersionConvert} $NPCAP_DISPLAY_VERSION "" $R0 ; 0.99-r7 -> 0.99.114.7 + ${VersionConvert} "${NPCAP_PACKAGE_VERSION}" "" $R1 + ${VersionCompare} $R0 $R1 $1 + StrCmp $1 "2" lbl_npcap_do_install + + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 4" "State" "0" + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 4" "Flags" "DISABLED" + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 5" "Text" "If you wish to install Npcap, please uninstall $NPCAP_NAME manually first." + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 5" "Flags" "DISABLED" + Goto lbl_npcap_done + +lbl_winpcap_installed: + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 2" "Text" "$WINPCAP_NAME" + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 4" "State" "1" + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 5" "Text" "The currently installed $WINPCAP_NAME may be uninstalled first." + Goto lbl_npcap_done + +lbl_npcap_do_install: + ; seems to be an old version, install newer one + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 4" "State" "1" + StrCmp $NPCAP_NAME "Npcap" 0 +3 + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 5" "Text" "The currently installed Npcap $NPCAP_DISPLAY_VERSION will be uninstalled first." + Goto +2 + WriteINIStr "$PLUGINSDIR\NpcapPage.ini" "Field 5" "Text" "The currently installed $NPCAP_NAME will be uninstalled first." + +lbl_npcap_done: + + ; detect if USBPcap should be installed + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 4" "Text" "Install USBPcap ${USBPCAP_PACKAGE_VERSION}" + ${If} ${RunningX64} + ${DisableX64FSRedirection} + SetRegView 64 + ${EndIf} + ReadRegStr $USBPCAP_NAME HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\USBPcap" "DisplayName" + ${If} ${RunningX64} + ${EnableX64FSRedirection} + SetRegView 32 + ${EndIf} + IfErrors 0 lbl_usbpcap_installed ;if RegKey is available, USBPcap is already installed + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 2" "Text" "USBPcap is currently not installed" + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 2" "Flags" "DISABLED" + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 5" "Text" "(Use Add/Remove Programs first to uninstall any undetected old USBPcap versions)" + Goto lbl_usbpcap_done + +lbl_usbpcap_installed: + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 2" "Text" "$USBPCAP_NAME" + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 4" "State" "0" + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 4" "Flags" "DISABLED" + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 5" "Text" "If you wish to install USBPcap ${USBPCAP_PACKAGE_VERSION}, please uninstall $USBPCAP_NAME manually first." + WriteINIStr "$PLUGINSDIR\USBPcapPage.ini" "Field 5" "Flags" "DISABLED" + Goto lbl_usbpcap_done + +lbl_usbpcap_done: + +FunctionEnd |