summaryrefslogtreecommitdiffstats
path: root/packaging/wix
diff options
context:
space:
mode:
Diffstat (limited to 'packaging/wix')
-rw-r--r--packaging/wix/CMakeLists.txt341
-rw-r--r--packaging/wix/COPYING.rtf524
-rw-r--r--packaging/wix/ComponentGroups.wxi913
-rw-r--r--packaging/wix/DirectoryStructure.wxi53
-rw-r--r--packaging/wix/Features.wxi121
-rw-r--r--packaging/wix/InputPaths.wxi22
-rw-r--r--packaging/wix/Plugins.wxi150
-rw-r--r--packaging/wix/Prerequisites.wxi103
-rw-r--r--packaging/wix/README.adoc47
-rw-r--r--packaging/wix/StringOverrides.wxl4
-rw-r--r--packaging/wix/UserInterface.wxi18
-rw-r--r--packaging/wix/Wireshark.wxs58
-rw-r--r--packaging/wix/WiresharkOptionsDlg.wxs66
-rw-r--r--packaging/wix/WiresharkWixUI.wxs87
-rw-r--r--packaging/wix/banner.bmpbin0 -> 29846 bytes
-rw-r--r--packaging/wix/banner.svg69
-rw-r--r--packaging/wix/dialog.bmpbin0 -> 158078 bytes
-rw-r--r--packaging/wix/dialog.svg83
-rw-r--r--packaging/wix/windeployqt-to-wix.ps1165
19 files changed, 2824 insertions, 0 deletions
diff --git a/packaging/wix/CMakeLists.txt b/packaging/wix/CMakeLists.txt
new file mode 100644
index 00000000..eb9079e7
--- /dev/null
+++ b/packaging/wix/CMakeLists.txt
@@ -0,0 +1,341 @@
+# CMakeLists.txt
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+#
+
+# We should use CPack to help generate a .msi using WIX.
+
+set(WIX_GENERATED_FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/DependentComponents.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/Diameter.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/QtDependentComponents.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/QtTranslation.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/RadiusDict.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/SNMPMibs.wxs
+ ${CMAKE_CURRENT_BINARY_DIR}/UsersGuide.wxs
+)
+set(WIX_GENERATED_FILES ${WIX_GENERATED_FILES} PARENT_SCOPE)
+
+set(WIX_SOURCE_FILES
+ ${CMAKE_SOURCE_DIR}/packaging/wix/Wireshark.wxs
+ ${CMAKE_SOURCE_DIR}/packaging/wix/WiresharkOptionsDlg.wxs
+ ${CMAKE_SOURCE_DIR}/packaging/wix/WiresharkWixUI.wxs
+ ${WIX_GENERATED_FILES}
+)
+set(WIX_SOURCE_FILES ${WIX_SOURCE_FILES} PARENT_SCOPE)
+
+set(WIX_FILES
+ ComponentGroups.wxi
+ COPYING.rtf
+ DirectoryStructure.wxi
+ Features.wxi
+ InputPaths.wxi
+ Plugins.wxi
+ Prerequisites.wxi
+ UserInterface.wxi
+ ${WIX_SOURCE_FILES}
+ PARENT_SCOPE
+)
+
+set(WIX_OUT_FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/DependentComponents.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/Diameter.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/QtDependentComponents.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/QtTranslation.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/RadiusDict.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/SNMPMibs.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/UsersGuide.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/Wireshark.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/WiresharkOptionsDlg.wixobj
+ ${CMAKE_CURRENT_BINARY_DIR}/WiresharkWixUI.wixobj
+)
+set(WIX_OUT_FILES ${WIX_OUT_FILES} PARENT_SCOPE)
+
+# Variables required for Wireshark.wxs
+set(PROGRAM_NAME ${CMAKE_PROJECT_NAME})
+file(TO_NATIVE_PATH "${CMAKE_SOURCE_DIR}" TOP_SRC_DIR)
+# STAGING_DIR depends on the build configuration so we pass it
+# on the command line below.
+file(TO_NATIVE_PATH "${CMAKE_BINARY_DIR}/docbook" DOCBOOK_DIR)
+
+# To do:
+# - Sync the various version names between CMake and Wix.
+# - Set CMakeLists.txt version strings in tools/make-version.py
+# - Add a VERSION_EXTRA cmake option
+set (VERSION "${PROJECT_VERSION}")
+set(PRODUCT_VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_PATCH_VERSION}.${PROJECT_BUILD_VERSION})
+
+# Use the merge module that comes with our version of Visual Studio
+if(MSVC_VERSION GREATER_EQUAL 1930)
+ set (MSVC_CRT_VERSION "VC143")
+elseif(MSVC_VERSION GREATER_EQUAL 1920)
+ set (MSVC_CRT_VERSION "VC142")
+elseif(MSVC_VERSION GREATER_EQUAL 1910)
+ set (MSVC_CRT_VERSION "VC141")
+elseif(MSVC_VERSION GREATER_EQUAL 1900)
+ set (MSVC_CRT_VERSION "VC140")
+endif()
+
+# Starting with Visual Studio 2019 merge modules are deprecated but
+# are available as an individual component.
+# https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes#-deprecations
+set(MERGE_MODULE "Microsoft_${MSVC_CRT_VERSION}_CRT_${WIRESHARK_TARGET_PLATFORM}.msm")
+set (PF86_ENV "ProgramFiles(x86)")
+
+set(VC_TOOLS_MERGE_MODULES_DIR)
+if (DEFINED ENV{VCToolsRedistDir})
+ set(VC_TOOLS_MERGE_MODULES_DIR "$ENV{VCToolsRedistDir}/MergeModules")
+endif()
+
+find_path(MERGE_MODULE_DIR ${MERGE_MODULE}
+ PATHS
+ #"$ENV{VCINSTALLDIR}/VC/Redist/MSVC/how-do-we-get-this-version/Merge Modules"
+ ${VC_TOOLS_MERGE_MODULES_DIR}
+ "$ENV{${PF86_ENV}}/Common Files/Merge Modules"
+ "$ENV{PROGRAMFILES}/Common Files/Merge Modules"
+ NO_DEFAULT_PATH
+)
+file(TO_NATIVE_PATH "${MERGE_MODULE_DIR}/Microsoft_${MSVC_CRT_VERSION}_CRT_${WIRESHARK_TARGET_PLATFORM}.msm" MSM_NATIVE_PATH)
+message(STATUS "Using ${MSM_NATIVE_PATH} for the WiX installer")
+
+# DependentComponents.wxi. Can be created at configure time.
+set(_all_manifest_wix "${CMAKE_CURRENT_BINARY_DIR}/DependentComponents.wxs")
+file(WRITE "${_all_manifest_wix}" "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
+file(APPEND "${_all_manifest_wix}" "<Wix xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n\n")
+file(APPEND "${_all_manifest_wix}" " <!-- Files required for all sections. Generated by CMake. -->\n")
+file(APPEND "${_all_manifest_wix}" "<?include InputPaths.wxi ?>\n")
+file(APPEND "${_all_manifest_wix}" " <Fragment>\n")
+file(APPEND "${_all_manifest_wix}" " <DirectoryRef Id=\"INSTALLFOLDER\">\n")
+file(APPEND "${_all_manifest_wix}" " <?ifdef BUNDLE_DEBUG_DLLS ?>\n")
+foreach(_dll ${GLIB2_DLLS_DEBUG})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <Component Id=\"cmp${_wix_name}\" Guid=\"*\">\n")
+ file(APPEND "${_all_manifest_wix}" " <File Id=\"fil${_wix_name}\" KeyPath=\"yes\" Source=\"$(var.Staging.Dir)\\${_dll}\"/>\n")
+ file(APPEND "${_all_manifest_wix}" " </Component>\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?else?>\n")
+foreach(_dll ${GLIB2_DLLS_RELEASE})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <Component Id=\"cmp${_wix_name}\" Guid=\"*\">\n")
+ file(APPEND "${_all_manifest_wix}" " <File Id=\"fil${_wix_name}\" KeyPath=\"yes\" Source=\"$(var.Staging.Dir)\\${_dll}\"/>\n")
+ file(APPEND "${_all_manifest_wix}" " </Component>\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?endif?>\n")
+SET(unique_component "")
+set (_dll_list ${CARES_DLL} ${PCRE2_RELEASE_DLL} ${GCRYPT_DLLS}
+ ${GNUTLS_DLLS} ${KERBEROS_DLLS} ${LIBSSH_DLLS} ${LUA_DLL}
+ ${LZ4_DLL} ${MINIZIP_DLL} ${NGHTTP2_DLL} ${NGHTTP3_DLL} ${SBC_DLL} ${SMI_DLL}
+ ${SNAPPY_DLL} ${SPANDSP_DLL} ${BCG729_DLL} ${LIBXML2_DLLS} ${WINSPARKLE_DLL}
+ ${ZLIB_DLL} ${BROTLI_DLLS} ${ZSTD_DLL} ${ILBC_DLL} ${OPUS_DLL}
+ ${SPEEXDSP_DLL}
+ # Required for mmdbresolve
+ ${MAXMINDDB_DLL}
+ )
+foreach(_dll ${_dll_list})
+ #ensure uniqueness of files
+ IF(NOT "${unique_component}" MATCHES "(^|;)${_dll}(;|$)")
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <Component Id=\"cmp${_wix_name}\" Guid=\"*\">\n")
+ file(APPEND "${_all_manifest_wix}" " <File Id=\"fil${_wix_name}\" KeyPath=\"yes\" Source=\"$(var.Staging.Dir)\\${_dll}\"/>\n")
+ file(APPEND "${_all_manifest_wix}" " </Component>\n")
+ SET(unique_component ${unique_component} ${_dll})
+ ENDIF(NOT "${unique_component}" MATCHES "(^|;)${_dll}(;|$)")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " </DirectoryRef>\n")
+file(APPEND "${_all_manifest_wix}" " </Fragment>\n")
+file(APPEND "${_all_manifest_wix}" " <Fragment>\n")
+file(APPEND "${_all_manifest_wix}" " <ComponentGroup Id=\"CG.RequiredDependencies\">\n")
+file(APPEND "${_all_manifest_wix}" " <?ifdef BUNDLE_DEBUG_DLLS ?>\n")
+foreach(_dll ${GLIB2_DLLS_DEBUG})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <ComponentRef Id=\"cmp${_wix_name}\" />\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?else?>\n")
+foreach(_dll ${GLIB2_DLLS_RELEASE})
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <ComponentRef Id=\"cmp${_wix_name}\" />\n")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " <?endif?>\n")
+SET(unique_file "")
+foreach(_dll ${_dll_list})
+ #ensure uniqueness of files
+ IF(NOT "${unique_file}" MATCHES "(^|;)${_dll}(;|$)")
+ STRING(REGEX REPLACE "[-|\\.]" "_" _wix_name ${_dll})
+ file(APPEND "${_all_manifest_wix}" " <ComponentRef Id=\"cmp${_wix_name}\" />\n")
+ SET(unique_file ${unique_file} ${_dll})
+ ENDIF(NOT "${unique_file}" MATCHES "(^|;)${_dll}(;|$)")
+endforeach()
+file(APPEND "${_all_manifest_wix}" " </ComponentGroup>\n")
+file(APPEND "${_all_manifest_wix}" " </Fragment>\n")
+file(APPEND "${_all_manifest_wix}" "\n</Wix>\n")
+
+if(SMI_DIR)
+ set(d_smi_dir "-dSMI_DIR")
+endif()
+
+if (MAXMINDDB_FOUND)
+ set(d_mmdbresolve_exe "-dMMDBRESOLVE_EXE")
+endif()
+
+set(WIX_CANDLE_DEFINES
+ -v
+ -sw1076
+ -dPlatform=${WIRESHARK_TARGET_PLATFORM}
+ -dWiresharkName=${CMAKE_PROJECT_NAME}
+ -dWiresharkVersion=${PRODUCT_VERSION}
+ -dWiresharkMajorVersion=${PROJECT_MAJOR_VERSION}
+ -dWiresharkMinorVersion=${PROJECT_MINOR_VERSION}
+ -dAssetDir=${CMAKE_SOURCE_DIR}/packaging/wix
+ -dBuildOutputDir=${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}
+ -dDiameterDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/diameter
+ -dIconDir=${CMAKE_SOURCE_DIR}/resources/icons
+ -dQtTranslationDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/translations
+ -dRadiusDictDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/radius
+ -dSnmpMibDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/snmp/mibs
+ -dUsersGuideDir=${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/docbook/wsug_html_chunked
+ -dVCRedistVersion=${MSVC_CRT_VERSION}
+ -dVCRedistDir=${MERGE_MODULE_DIR}
+ ${d_smi_dir}
+ ${d_mmdbresolve_exe}
+ -arch ${WIRESHARK_TARGET_PLATFORM}
+ -ext WixUIExtension
+ -I${CMAKE_SOURCE_DIR}/packaging/wix
+ -out ${CMAKE_CURRENT_BINARY_DIR}/
+ PARENT_SCOPE
+)
+
+# The NSIS CMakeFile sets the program name + version slightly differently.
+set(WIX_LIGHT_DEFINES
+ -v
+ -out ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}-${PROJECT_VERSION}-${WIRESHARK_TARGET_PLATFORM}.msi
+ -sw1076
+ -ext WixUIExtension
+ -loc ${CMAKE_CURRENT_SOURCE_DIR}/StringOverrides.wxl
+ PARENT_SCOPE
+)
+
+set(WIX_HEAT_FLAGS
+ -v
+ -ag
+ -nologo
+ -srd
+ -sreg
+ PARENT_SCOPE
+)
+
+macro( ADD_WIX_PACKAGE_TARGET )
+ #
+ # XXX - if we're not building Wireshark, we can't build
+ # QtDependentComponents.wxs.. On the other hand, if we're
+ # not building Wireshark, we have no need to include Qt
+ # in the installer, so it's not clear we need that file.
+ #
+ # This should probably be fixed, so that people can produce
+ # command-line-only installer packages.
+ if(BUILD_wireshark)
+ set (_wix_source_dir ${CMAKE_SOURCE_DIR}/packaging/wix )
+ set (_wix_binary_dir ${CMAKE_BINARY_DIR}/packaging/wix )
+
+ # QtDependentComponents.wxs. Created using Wireshark.exe.
+ add_custom_command(OUTPUT ${_wix_binary_dir}/QtDependentComponents.wxs
+ COMMAND set "PATH=${QT_BIN_PATH};%PATH%"
+ COMMAND ${POWERSHELL_COMMAND} "${_wix_source_dir}/windeployqt-to-wix.ps1"
+ -Executable $<TARGET_FILE:wireshark>
+ -FilePath ${_wix_binary_dir}/QtDependentComponents.wxs
+ DEPENDS "${_wix_source_dir}/windeployqt-to-wix.ps1"
+ )
+
+ # UsersGuide.wxs. Collects the contents of wsug_html_chunked.
+ # Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/UsersGuide.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${CMAKE_BINARY_DIR}/docbook/wsug_html_chunked
+ ${WIX_HEAT_FLAGS} -cg CG.Documentation -dr dirUsersGuide -var var.UsersGuideDir
+ -out ${_wix_binary_dir}/UsersGuide.wxs
+ )
+
+ # SNMPMibs.wxs. Collects all MIBs in "output" snmp/mibs
+ # directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/SNMPMibs.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/snmp/mibs
+ ${WIX_HEAT_FLAGS} -cg CG.Plugins.SNMP -dr dirSnmpMibs -var var.SnmpMibDir
+ -out ${_wix_binary_dir}/SNMPMibs.wxs
+ )
+
+ # RadiusDict.wxs. Collects all Radius dictionary files in
+ # "output" radius directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/RadiusDict.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/radius
+ ${WIX_HEAT_FLAGS} -cg CG.RadiusDict -dr dirRadius -var var.RadiusDictDir
+ -out ${_wix_binary_dir}/RadiusDict.wxs
+ )
+
+ # Diameter.wxs. Collects all Diameter XML dictionary files
+ # in "output" diameter directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/Diameter.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/diameter
+ ${WIX_HEAT_FLAGS} -cg CG.Diameter -dr dirDiameter -var var.DiameterDir
+ -out ${_wix_binary_dir}/Diameter.wxs
+ )
+
+ # QtTranslation.wxs. Collects all Qt translation files in
+ # "output" translations directory. Generated with heat.exe
+ add_custom_command(OUTPUT ${_wix_binary_dir}/QtTranslation.wxs
+ COMMAND ${WIX_HEAT_EXECUTABLE} dir ${ARCHIVE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/translations
+ ${WIX_HEAT_FLAGS} -cg CG.QtTranslations -dr dirTranslations -var var.QtTranslationDir
+ -out ${_wix_binary_dir}/QtTranslation.wxs
+ )
+
+ # Build WiX package dependencies. We build the package in
+ # two stages so that wireshark_wix below doesn't trigger any
+ # dependencies that might clobber any signed executables.
+ # XXX Rename this to wireshark_wix_prep
+ add_custom_target(wireshark_wix_prep
+ DEPENDS
+ ${WIX_FILES}
+ copy_data_files
+ user_guide_html
+ faq_html
+ )
+ set_target_properties(wireshark_wix_prep PROPERTIES
+ FOLDER "Packaging"
+ EXCLUDE_FROM_DEFAULT_BUILD True
+ )
+
+ # Dump the installer into
+ # ${CMAKE_CURRENT_SOURCE_DIR}/packaging/wix
+ # Note that executables and DLLs *must* be built separately
+ # XXX Rename this to wireshark_wix
+ add_custom_target(wireshark_wix
+ COMMAND ${WIX_CANDLE_EXECUTABLE} ${WIX_CANDLE_DEFINES}
+ $<$<CONFIG:Debug>:-dBUNDLE_DEBUG_DLLS>
+ ${WIX_SOURCE_FILES}
+ WORKING_DIRECTORY ${_wix_source_dir}
+
+ COMMAND ${WIX_LIGHT_EXECUTABLE} ${WIX_LIGHT_DEFINES} ${WIX_OUT_FILES}
+ WORKING_DIRECTORY ${_wix_binary_dir}
+ )
+ set_target_properties(wireshark_wix PROPERTIES
+ FOLDER "Packaging"
+ EXCLUDE_FROM_DEFAULT_BUILD True
+ )
+ else()
+ message(WARNING "The WiX installer cannot be built if the Wireshark program isn't built.")
+ endif()
+endmacro( ADD_WIX_PACKAGE_TARGET )
+
+set(CLEAN_FILES
+ DependentComponents.wxs
+ QtDependentComponents.wxs
+ UsersGuide.wxs
+ SNMPMibs.wxs
+ RadiusDict.wxs
+ Diameter.wxs
+ QtTranslation.wxs
+ #NEWS.txt
+ #user-guide.chm
+ wireshark-${VERSION}-${WIRESHARK_TARGET_PLATFORM}.msi
+)
diff --git a/packaging/wix/COPYING.rtf b/packaging/wix/COPYING.rtf
new file mode 100644
index 00000000..ec2bde5e
--- /dev/null
+++ b/packaging/wix/COPYING.rtf
@@ -0,0 +1,524 @@
+{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}{\f1\froman\fprq2\fcharset0 Times New Roman;}}
+{\colortbl ;\red0\green0\blue255;}
+{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\f0\fs20 This text consists of three parts:\par
+\par
+Part I: Some remarks regarding the license given in\par
+Part II: The actual license that covers Wireshark.\par
+Part III: Other applicable licenses.\par
+\par
+When in doubt: Part II/III is the legally binding part, Part I is just\par
+there to make it easier for people that are not familiar with the GPLv2.\par
+\par
+\par
+------------------------------------------------------------------------\par
+Part I:\par
+\par
+Wireshark is distributed under the GNU GPLv2. There are no restrictions\par
+on its use. There are restrictions on its distribution in source or\par
+binary form.\par
+\par
+Most parts of Wireshark are covered by a "GPL version 2 or later" license.\par
+Some files are covered by different licenses that are compatible with\par
+the GPLv2.\par
+\par
+As a notable exception, some utilities distributed with the Wireshark source are\par
+covered by other licenses that are not themselves directly compatible with the\par
+GPLv2. This is OK, as only the tools themselves are licensed this way, the\par
+output of the tools is not considered a derived work, and so can be safely\par
+licensed for Wireshark's use. An incomplete selection of these tools includes:\par
+ - the pidl utility (tools/pidl) is licensed under the GPLv3+.\par
+\par
+Parts of Wireshark can be built and distributed as libraries. These\par
+parts are still covered by the GPL, and NOT by the Lesser General Public\par
+License or any other license.\par
+\par
+If you integrate all or part of Wireshark into your own application, then\par
+that application must be released under a license compatible with the GPL.\par
+\par
+The full text of the GNU GPL and some of the other applicable licenses follows.\par
+\par
+------------------------------------------------------------------------\par
+Part II:\par
+\par
+ GNU GENERAL PUBLIC LICENSE\par
+ Version 2, June 1991\par
+\par
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,\par
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA\par
+ Everyone is permitted to copy and distribute verbatim copies\par
+ of this license document, but changing it is not allowed.\par
+\par
+ Preamble\par
+\par
+ The licenses for most software are designed to take away your\par
+freedom to share and change it. By contrast, the GNU General Public\par
+License is intended to guarantee your freedom to share and change free\par
+software--to make sure the software is free for all its users. This\par
+General Public License applies to most of the Free Software\par
+Foundation's software and to any other program whose authors commit to\par
+using it. (Some other Free Software Foundation software is covered by\par
+the GNU Lesser General Public License instead.) You can apply it to\par
+your programs, too.\par
+\par
+ When we speak of free software, we are referring to freedom, not\par
+price. Our General Public Licenses are designed to make sure that you\par
+have the freedom to distribute copies of free software (and charge for\par
+this service if you wish), that you receive source code or can get it\par
+if you want it, that you can change the software or use pieces of it\par
+in new free programs; and that you know you can do these things.\par
+\par
+ To protect your rights, we need to make restrictions that forbid\par
+anyone to deny you these rights or to ask you to surrender the rights.\par
+These restrictions translate to certain responsibilities for you if you\par
+distribute copies of the software, or if you modify it.\par
+\par
+ For example, if you distribute copies of such a program, whether\par
+gratis or for a fee, you must give the recipients all the rights that\par
+you have. You must make sure that they, too, receive or can get the\par
+source code. And you must show them these terms so they know their\par
+rights.\par
+\par
+ We protect your rights with two steps: (1) copyright the software, and\par
+(2) offer you this license which gives you legal permission to copy,\par
+distribute and/or modify the software.\par
+\par
+ Also, for each author's protection and ours, we want to make certain\par
+that everyone understands that there is no warranty for this free\par
+software. If the software is modified by someone else and passed on, we\par
+want its recipients to know that what they have is not the original, so\par
+that any problems introduced by others will not reflect on the original\par
+authors' reputations.\par
+\par
+ Finally, any free program is threatened constantly by software\par
+patents. We wish to avoid the danger that redistributors of a free\par
+program will individually obtain patent licenses, in effect making the\par
+program proprietary. To prevent this, we have made it clear that any\par
+patent must be licensed for everyone's free use or not licensed at all.\par
+\par
+ The precise terms and conditions for copying, distribution and\par
+modification follow.\par
+\par
+ GNU GENERAL PUBLIC LICENSE\par
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\par
+\par
+ 0. This License applies to any program or other work which contains\par
+a notice placed by the copyright holder saying it may be distributed\par
+under the terms of this General Public License. The "Program", below,\par
+refers to any such program or work, and a "work based on the Program"\par
+means either the Program or any derivative work under copyright law:\par
+that is to say, a work containing the Program or a portion of it,\par
+either verbatim or with modifications and/or translated into another\par
+language. (Hereinafter, translation is included without limitation in\par
+the term "modification".) Each licensee is addressed as "you".\par
+\par
+Activities other than copying, distribution and modification are not\par
+covered by this License; they are outside its scope. The act of\par
+running the Program is not restricted, and the output from the Program\par
+is covered only if its contents constitute a work based on the\par
+Program (independent of having been made by running the Program).\par
+Whether that is true depends on what the Program does.\par
+\par
+ 1. You may copy and distribute verbatim copies of the Program's\par
+source code as you receive it, in any medium, provided that you\par
+conspicuously and appropriately publish on each copy an appropriate\par
+copyright notice and disclaimer of warranty; keep intact all the\par
+notices that refer to this License and to the absence of any warranty;\par
+and give any other recipients of the Program a copy of this License\par
+along with the Program.\par
+\par
+You may charge a fee for the physical act of transferring a copy, and\par
+you may at your option offer warranty protection in exchange for a fee.\par
+\par
+ 2. You may modify your copy or copies of the Program or any portion\par
+of it, thus forming a work based on the Program, and copy and\par
+distribute such modifications or work under the terms of Section 1\par
+above, provided that you also meet all of these conditions:\par
+\par
+ a) You must cause the modified files to carry prominent notices\par
+ stating that you changed the files and the date of any change.\par
+\par
+ b) You must cause any work that you distribute or publish, that in\par
+ whole or in part contains or is derived from the Program or any\par
+ part thereof, to be licensed as a whole at no charge to all third\par
+ parties under the terms of this License.\par
+\par
+ c) If the modified program normally reads commands interactively\par
+ when run, you must cause it, when started running for such\par
+ interactive use in the most ordinary way, to print or display an\par
+ announcement including an appropriate copyright notice and a\par
+ notice that there is no warranty (or else, saying that you provide\par
+ a warranty) and that users may redistribute the program under\par
+ these conditions, and telling the user how to view a copy of this\par
+ License. (Exception: if the Program itself is interactive but\par
+ does not normally print such an announcement, your work based on\par
+ the Program is not required to print an announcement.)\par
+\par
+These requirements apply to the modified work as a whole. If\par
+identifiable sections of that work are not derived from the Program,\par
+and can be reasonably considered independent and separate works in\par
+themselves, then this License, and its terms, do not apply to those\par
+sections when you distribute them as separate works. But when you\par
+distribute the same sections as part of a whole which is a work based\par
+on the Program, the distribution of the whole must be on the terms of\par
+this License, whose permissions for other licensees extend to the\par
+entire whole, and thus to each and every part regardless of who wrote it.\par
+\par
+Thus, it is not the intent of this section to claim rights or contest\par
+your rights to work written entirely by you; rather, the intent is to\par
+exercise the right to control the distribution of derivative or\par
+collective works based on the Program.\par
+\par
+In addition, mere aggregation of another work not based on the Program\par
+with the Program (or with a work based on the Program) on a volume of\par
+a storage or distribution medium does not bring the other work under\par
+the scope of this License.\par
+\par
+ 3. You may copy and distribute the Program (or a work based on it,\par
+under Section 2) in object code or executable form under the terms of\par
+Sections 1 and 2 above provided that you also do one of the following:\par
+\par
+ a) Accompany it with the complete corresponding machine-readable\par
+ source code, which must be distributed under the terms of Sections\par
+ 1 and 2 above on a medium customarily used for software interchange; or,\par
+\par
+ b) Accompany it with a written offer, valid for at least three\par
+ years, to give any third party, for a charge no more than your\par
+ cost of physically performing source distribution, a complete\par
+ machine-readable copy of the corresponding source code, to be\par
+ distributed under the terms of Sections 1 and 2 above on a medium\par
+ customarily used for software interchange; or,\par
+\par
+ c) Accompany it with the information you received as to the offer\par
+ to distribute corresponding source code. (This alternative is\par
+ allowed only for noncommercial distribution and only if you\par
+ received the program in object code or executable form with such\par
+ an offer, in accord with Subsection b above.)\par
+\par
+The source code for a work means the preferred form of the work for\par
+making modifications to it. For an executable work, complete source\par
+code means all the source code for all modules it contains, plus any\par
+associated interface definition files, plus the scripts used to\par
+control compilation and installation of the executable. However, as a\par
+special exception, the source code distributed need not include\par
+anything that is normally distributed (in either source or binary\par
+form) with the major components (compiler, kernel, and so on) of the\par
+operating system on which the executable runs, unless that component\par
+itself accompanies the executable.\par
+\par
+If distribution of executable or object code is made by offering\par
+access to copy from a designated place, then offering equivalent\par
+access to copy the source code from the same place counts as\par
+distribution of the source code, even though third parties are not\par
+compelled to copy the source along with the object code.\par
+\par
+ 4. You may not copy, modify, sublicense, or distribute the Program\par
+except as expressly provided under this License. Any attempt\par
+otherwise to copy, modify, sublicense or distribute the Program is\par
+void, and will automatically terminate your rights under this License.\par
+However, parties who have received copies, or rights, from you under\par
+this License will not have their licenses terminated so long as such\par
+parties remain in full compliance.\par
+\par
+ 5. You are not required to accept this License, since you have not\par
+signed it. However, nothing else grants you permission to modify or\par
+distribute the Program or its derivative works. These actions are\par
+prohibited by law if you do not accept this License. Therefore, by\par
+modifying or distributing the Program (or any work based on the\par
+Program), you indicate your acceptance of this License to do so, and\par
+all its terms and conditions for copying, distributing or modifying\par
+the Program or works based on it.\par
+\par
+ 6. Each time you redistribute the Program (or any work based on the\par
+Program), the recipient automatically receives a license from the\par
+original licensor to copy, distribute or modify the Program subject to\par
+these terms and conditions. You may not impose any further\par
+restrictions on the recipients' exercise of the rights granted herein.\par
+You are not responsible for enforcing compliance by third parties to\par
+this License.\par
+\par
+ 7. If, as a consequence of a court judgment or allegation of patent\par
+infringement or for any other reason (not limited to patent issues),\par
+conditions are imposed on you (whether by court order, agreement or\par
+otherwise) that contradict the conditions of this License, they do not\par
+excuse you from the conditions of this License. If you cannot\par
+distribute so as to satisfy simultaneously your obligations under this\par
+License and any other pertinent obligations, then as a consequence you\par
+may not distribute the Program at all. For example, if a patent\par
+license would not permit royalty-free redistribution of the Program by\par
+all those who receive copies directly or indirectly through you, then\par
+the only way you could satisfy both it and this License would be to\par
+refrain entirely from distribution of the Program.\par
+\par
+If any portion of this section is held invalid or unenforceable under\par
+any particular circumstance, the balance of the section is intended to\par
+apply and the section as a whole is intended to apply in other\par
+circumstances.\par
+\par
+It is not the purpose of this section to induce you to infringe any\par
+patents or other property right claims or to contest validity of any\par
+such claims; this section has the sole purpose of protecting the\par
+integrity of the free software distribution system, which is\par
+implemented by public license practices. Many people have made\par
+generous contributions to the wide range of software distributed\par
+through that system in reliance on consistent application of that\par
+system; it is up to the author/donor to decide if he or she is willing\par
+to distribute software through any other system and a licensee cannot\par
+impose that choice.\par
+\par
+This section is intended to make thoroughly clear what is believed to\par
+be a consequence of the rest of this License.\par
+\par
+ 8. If the distribution and/or use of the Program is restricted in\par
+certain countries either by patents or by copyrighted interfaces, the\par
+original copyright holder who places the Program under this License\par
+may add an explicit geographical distribution limitation excluding\par
+those countries, so that distribution is permitted only in or among\par
+countries not thus excluded. In such case, this License incorporates\par
+the limitation as if written in the body of this License.\par
+\par
+ 9. The Free Software Foundation may publish revised and/or new versions\par
+of the General Public License from time to time. Such new versions will\par
+be similar in spirit to the present version, but may differ in detail to\par
+address new problems or concerns.\par
+\par
+Each version is given a distinguishing version number. If the Program\par
+specifies a version number of this License which applies to it and "any\par
+later version", you have the option of following the terms and conditions\par
+either of that version or of any later version published by the Free\par
+Software Foundation. If the Program does not specify a version number of\par
+this License, you may choose any version ever published by the Free Software\par
+Foundation.\par
+\par
+ 10. If you wish to incorporate parts of the Program into other free\par
+programs whose distribution conditions are different, write to the author\par
+to ask for permission. For software which is copyrighted by the Free\par
+Software Foundation, write to the Free Software Foundation; we sometimes\par
+make exceptions for this. Our decision will be guided by the two goals\par
+of preserving the free status of all derivatives of our free software and\par
+of promoting the sharing and reuse of software generally.\par
+\par
+ NO WARRANTY\par
+\par
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\par
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\par
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\par
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\par
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\par
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\par
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\par
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\par
+REPAIR OR CORRECTION.\par
+\par
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\par
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\par
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\par
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\par
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\par
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\par
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\par
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\par
+POSSIBILITY OF SUCH DAMAGES.\par
+\par
+ END OF TERMS AND CONDITIONS\par
+\par
+ How to Apply These Terms to Your New Programs\par
+\par
+ If you develop a new program, and you want it to be of the greatest\par
+possible use to the public, the best way to achieve this is to make it\par
+free software which everyone can redistribute and change under these terms.\par
+\par
+ To do so, attach the following notices to the program. It is safest\par
+to attach them to the start of each source file to most effectively\par
+convey the exclusion of warranty; and each file should have at least\par
+the "copyright" line and a pointer to where the full notice is found.\par
+\par
+ <one line to give the program's name and a brief idea of what it does.>\par
+ Copyright (C) <year> <name of author>\par
+\par
+ This program is free software; you can redistribute it and/or modify\par
+ it under the terms of the GNU General Public License as published by\par
+ the Free Software Foundation; either version 2 of the License, or \par
+ (at your option) any later version.\par
+\par
+ This program is distributed in the hope that it will be useful,\par
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\par
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\par
+ GNU General Public License for more details.\par
+\par
+ You should have received a copy of the GNU General Public License along\par
+ with this program; if not, write to the Free Software Foundation, Inc.,\par
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\par
+\par
+Also add information on how to contact you by electronic and paper mail.\par
+\par
+If the program is interactive, make it output a short notice like this\par
+when it starts in an interactive mode:\par
+\par
+ Gnomovision version 69, Copyright (C) year name of author\par
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\par
+ This is free software, and you are welcome to redistribute it\par
+ under certain conditions; type `show c' for details.\par
+\par
+The hypothetical commands `show w' and `show c' should show the appropriate\par
+parts of the General Public License. Of course, the commands you use may\par
+be called something other than `show w' and `show c'; they could even be\par
+mouse-clicks or menu items--whatever suits your program.\par
+\par
+You should also get your employer (if you work as a programmer) or your\par
+school, if any, to sign a "copyright disclaimer" for the program, if\par
+necessary. Here is a sample; alter the names:\par
+\par
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program\par
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.\par
+\par
+ <signature of Ty Coon>, 1 April 1989\par
+ Ty Coon, President of Vice\par
+\par
+This General Public License does not permit incorporating your program into\par
+proprietary programs. If your program is a subroutine library, you may\par
+consider it more useful to permit linking proprietary applications with the\par
+library. If this is what you want to do, use the GNU Lesser General\par
+Public License instead of this License.\par
+\par
+------------------------------------------------------------------------\par
+Part III:\par
+\par
+Parts of this software are licensed as follows\par
+\par
+ Copyright (c) 1988, 1992, 1993\par
+ The Regents of the University of California. All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ 3. Neither the name of the University nor the names of its contributors\par
+ may be used to endorse or promote products derived from this software\par
+ without specific prior written permission.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND\par
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\par
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\par
+ ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE\par
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\par
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\par
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\par
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\par
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\par
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\par
+ SUCH DAMAGE.\par
+\par
+\par
+ Copyright (c) 2003 Markus Friedl. All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\par
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\par
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\par
+ IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\par
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\par
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\par
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\par
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\par
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\par
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\par
+\par
+\par
+ Copyright (c) 2003 Endace Technology Ltd, Hamilton, New Zealand.\par
+ All rights reserved.\par
+ \par
+ This software and documentation has been developed by Endace Technology Ltd.\par
+ along with the DAG PCI network capture cards. For further information please\par
+ visit {\field{\*\fldinst{HYPERLINK "http://www.endace.com/"}}{\fldrslt{\ul\cf1 http://www.endace.com/}}}\f0\fs20 .\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions are met:\par
+ \par
+ 1. Redistributions of source code must retain the above copyright notice,\par
+ this list of conditions and the following disclaimer.\par
+ \par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ \par
+ 3. The name of Endace Technology Ltd may not be used to endorse or promote\par
+ products derived from this software without specific prior written\par
+ permission.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY ENDACE TECHNOLOGY LTD ``AS IS'' AND ANY EXPRESS\par
+ OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\par
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO\par
+ EVENT SHALL ENDACE TECHNOLOGY LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\par
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\par
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\par
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER\par
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\par
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\par
+ POSSIBILITY OF SUCH DAMAGE.\par
+\par
+\par
+ Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.\par
+ All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ 3. Neither the name of the project nor the names of its contributors\par
+ may be used to endorse or promote products derived from this software\par
+ without specific prior written permission.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND\par
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\par
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\par
+ ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE\par
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\par
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\par
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\par
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\par
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\par
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\par
+ SUCH DAMAGE.\par
+\par
+\par
+ Copyright (c) 1997, 1999 Hellmuth Michaelis. All rights reserved.\par
+ \par
+ Redistribution and use in source and binary forms, with or without\par
+ modification, are permitted provided that the following conditions\par
+ are met:\par
+ 1. Redistributions of source code must retain the above copyright\par
+ notice, this list of conditions and the following disclaimer.\par
+ 2. Redistributions in binary form must reproduce the above copyright\par
+ notice, this list of conditions and the following disclaimer in the\par
+ documentation and/or other materials provided with the distribution.\par
+ \par
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND\par
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\par
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\par
+ ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE\par
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\par
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS\par
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\par
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT\par
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\par
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\par
+ SUCH DAMAGE.\par
+\f1\par
+}
+
diff --git a/packaging/wix/ComponentGroups.wxi b/packaging/wix/ComponentGroups.wxi
new file mode 100644
index 00000000..8a649732
--- /dev/null
+++ b/packaging/wix/ComponentGroups.wxi
@@ -0,0 +1,913 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+ <!-- Wireshark -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpWireshark_exe" Guid="*">
+ <File Id="filWireshark_exe" KeyPath="yes" Source="$(var.WiresharkQt.Dir)\Wireshark.exe" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Wireshark">
+ <ComponentRef Id="cmpWireshark_exe" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Install for every user -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpWiretap_dll" Guid="*">
+ <File Id="filWiretap_dll" KeyPath="yes" Source="$(var.Staging.Dir)\libwiretap.dll" />
+ </Component>
+ <Component Id="cmpLibwireshark_dll" Guid="*">
+ <File Id="filLibwireshark_dll" KeyPath="yes" Source="$(var.Staging.Dir)\libwireshark.dll" />
+ </Component>
+ <Component Id="cmpLibwsutil_dll" Guid="*">
+ <File Id="filLibwsutil_dll" KeyPath="yes" Source="$(var.Staging.Dir)\libwsutil.dll" />
+ </Component>
+ <Component Id="cmpCOPYING_txt" Guid="*">
+ <File Id="filCOPYING_txt" KeyPath="yes" Source="$(var.Staging.Dir)\COPYING.txt" />
+ </Component>
+ <Component Id="cmpNEWS_txt" Guid="*">
+ <File Id="filNEWS_txt" KeyPath="yes" Source="$(var.Staging.Dir)\NEWS.txt" />
+ </Component>
+ <Component Id="cmpREADME_txt" Guid="*">
+ <File Id="filREADME_txt" KeyPath="yes" Source="$(var.Staging.Dir)\README.txt" />
+ </Component>
+ <Component Id="cmpREADME_windows_txt" Guid="*">
+ <File Id="filREADME_windows_txt" KeyPath="yes" Source="$(var.Staging.Dir)\README.windows.txt" />
+ </Component>
+ <Component Id="cmpWka" Guid="*">
+ <File Id="filWka" KeyPath="yes" Source="$(var.Staging.Dir)\wka" />
+ </Component>
+ <Component Id="cmpPdml2html_xsl" Guid="*">
+ <File Id="filPdml2html_xsl" KeyPath="yes" Source="$(var.Staging.Dir)\pdml2html.xsl" />
+ </Component>
+ <Component Id="cmpWs_css" Guid="*">
+ <File Id="filWs_css" KeyPath="yes" Source="$(var.Staging.Dir)\ws.css" />
+ </Component>
+ <Component Id="cmpWireshark_html" Guid="*">
+ <File Id="filWireshark_html" KeyPath="yes" Source="$(var.Staging.Dir)\wireshark.html" />
+ </Component>
+ <Component Id="cmpWireshark_filter_html" Guid="*">
+ <File Id="filWireshark_filter_html" KeyPath="yes" Source="$(var.Staging.Dir)\wireshark-filter.html" />
+ </Component>
+ <Component Id="cmpDumpcap_exe" Guid="*">
+ <File Id="filDumpcap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\dumpcap.exe" />
+ </Component>
+ <Component Id="cmpDumpcap_html" Guid="*">
+ <File Id="filDumpcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\dumpcap.html" />
+ </Component>
+ <Component Id="cmpExtcap_html" Guid="*">
+ <File Id="filExtcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\extcap.html" />
+ </Component>
+ <Component Id="cmpIpmap_html" Guid="*">
+ <File Id="filIpmap_html" KeyPath="yes" Source="$(var.Staging.Dir)\ipmap.html" />
+ </Component>
+ <Component Id="cmpReleaseNotes_html" Guid="*">
+ <File Id="filReleaseNotes_html" KeyPath="yes" Source="$(var.Staging.Dir)\release-notes.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.WiresharkRequired">
+ <ComponentRef Id="cmpWiretap_dll" />
+ <ComponentRef Id="cmpLibwireshark_dll" />
+ <ComponentRef Id="cmpLibwsutil_dll" />
+ <ComponentRef Id="cmpCOPYING_txt" />
+ <ComponentRef Id="cmpNEWS_txt" />
+ <ComponentRef Id="cmpREADME_txt" />
+ <ComponentRef Id="cmpREADME_windows_txt" />
+ <ComponentRef Id="cmpWka" />
+ <ComponentRef Id="cmpPdml2html_xsl" />
+ <ComponentRef Id="cmpWs_css" />
+ <ComponentRef Id="cmpWireshark_html" />
+ <ComponentRef Id="cmpWireshark_filter_html" />
+ <ComponentRef Id="cmpDumpcap_exe" />
+ <ComponentRef Id="cmpDumpcap_html" />
+ <ComponentRef Id="cmpExtcap_html" />
+ <ComponentRef Id="cmpIpmap_html" />
+ <ComponentRef Id="cmpReleaseNotes_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- global config files By design these shouldn't be overwritten if they already exist -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpCfilters" Guid="*">
+ <File Id="filCfilters" KeyPath="yes" Source="$(var.Staging.Dir)\cfilters" />
+ </Component>
+ <Component Id="cmpColorfilters" Guid="*">
+ <File Id="filColorfilters" KeyPath="yes" Source="$(var.Staging.Dir)\colorfilters" />
+ </Component>
+ <Component Id="cmpDfilters" Guid="*">
+ <File Id="filDfilters" KeyPath="yes" Source="$(var.Staging.Dir)\dfilters" />
+ </Component>
+ <Component Id="cmpSmi_modules" Guid="*">
+ <File Id="filSmi_modules" KeyPath="yes" Source="$(var.Staging.Dir)\smi_modules" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.ColorFilters">
+ <ComponentRef Id="cmpCfilters" />
+ <ComponentRef Id="cmpColorfilters" />
+ <ComponentRef Id="cmpDfilters" />
+ <ComponentRef Id="cmpSmi_modules" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- dtds -->
+ <Fragment>
+ <DirectoryRef Id="dirDtds">
+ <Component Id="cmpDc_dtd" Guid="*">
+ <File Id="filDc_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\dc.dtd" />
+ </Component>
+ <Component Id="cmpItunes_dtd" Guid="*">
+ <File Id="filItunes_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\itunes.dtd" />
+ </Component>
+ <Component Id="cmpMscml_dtd" Guid="*">
+ <File Id="filMscml_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\mscml.dtd" />
+ </Component>
+ <Component Id="cmpPocsettings_dtd" Guid="*">
+ <File Id="filPocsettings_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\pocsettings.dtd" />
+ </Component>
+ <Component Id="cmpPresence_dtd" Guid="*">
+ <File Id="filPresence_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\presence.dtd" />
+ </Component>
+ <Component Id="cmpReginfo_dtd" Guid="*">
+ <File Id="filReginfo_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\reginfo.dtd" />
+ </Component>
+ <Component Id="cmpRlmi_dtd" Guid="*">
+ <File Id="filRlmi_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\rlmi.dtd" />
+ </Component>
+ <Component Id="cmpRss_dtd" Guid="*">
+ <File Id="filRss_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\rss.dtd" />
+ </Component>
+ <Component Id="cmpSmil_dtd" Guid="*">
+ <File Id="filSmil_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\smil.dtd" />
+ </Component>
+ <Component Id="cmpXcap_caps_dtd" Guid="*">
+ <File Id="filXcap_caps_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\xcap-caps.dtd" />
+ </Component>
+ <Component Id="cmpXcap_error_dtd" Guid="*">
+ <File Id="filXcap_error_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\xcap-error.dtd" />
+ </Component>
+ <Component Id="cmpWatcherinfo_dtd" Guid="*">
+ <File Id="filWatcherinfo_dtd" KeyPath="yes" Source="$(var.Dtds.Dir)\watcherinfo.dtd" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Dtds">
+ <ComponentRef Id="cmpDc_dtd" />
+ <ComponentRef Id="cmpItunes_dtd" />
+ <ComponentRef Id="cmpMscml_dtd" />
+ <ComponentRef Id="cmpPocsettings_dtd" />
+ <ComponentRef Id="cmpPresence_dtd" />
+ <ComponentRef Id="cmpReginfo_dtd" />
+ <ComponentRef Id="cmpRlmi_dtd" />
+ <ComponentRef Id="cmpRss_dtd" />
+ <ComponentRef Id="cmpSmil_dtd" />
+ <ComponentRef Id="cmpXcap_caps_dtd" />
+ <ComponentRef Id="cmpXcap_error_dtd" />
+ <ComponentRef Id="cmpWatcherinfo_dtd" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- TPNCP DAT file -->
+ <Fragment>
+ <DirectoryRef Id="dirTpncp">
+ <Component Id="cmpTpncp_dat" Guid="*">
+ <File Id="filTpncp_dat" KeyPath="yes" Source="$(var.Tpncp.Dir)\tpncp.dat" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tpncp">
+ <ComponentRef Id="cmpTpncp_dat" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- wimaxasncp TLV definitions -->
+ <Fragment>
+ <DirectoryRef Id="dirWimaxasncp">
+ <Component Id="cmpWimaxasncp_dictionary_xml" Guid="*">
+ <File Id="filWimaxasncp_dictionary_xml" KeyPath="yes" Source="$(var.Wimaxasncp.Dir)\dictionary.xml" />
+ </Component>
+ <Component Id="cmpWimaxasncp_dictionary_dtd" Guid="*">
+ <File Id="filWimaxasncp_dictionary_dtd" KeyPath="yes" Source="$(var.Wimaxasncp.Dir)\dictionary.dtd" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Wimaxasncp">
+ <ComponentRef Id="cmpWimaxasncp_dictionary_xml" />
+ <ComponentRef Id="cmpWimaxasncp_dictionary_dtd" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- protobuf TLV definitions -->
+ <Fragment>
+ <DirectoryRef Id="dirProtobuf">
+ <Component Id="cmpProtobuf_sparkplug_b_proto" Guid="*">
+ <File Id="filProtobuf_sparkplug_b_proto" KeyPath="yes" Source="$(var.Protobuf.Dir)\sparkplug_b.proto" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Protobuf">
+ <ComponentRef Id="cmpProtobuf_sparkplug_b_proto" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- TShark -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpTShark_exe" Guid="*">
+ <File Id="filTShark_exe" KeyPath="yes" Source="$(var.Staging.Dir)\tshark.exe" />
+ </Component>
+ <Component Id="cmpTShark_html" Guid="*">
+ <File Id="filTShark_html" KeyPath="yes" Source="$(var.Staging.Dir)\tshark.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.TShark">
+ <ComponentRef Id="cmpTShark_exe" />
+ <ComponentRef Id="cmpTShark_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Configuration Profiles -->
+ <Fragment>
+ <DirectoryRef Id="dirProfiles">
+ <Directory Id="dirBluetooth" Name="Bluetooth">
+ <Component Id="cmpBluetooth_colorfilters" Guid="*">
+ <File Id="filBluetooth_colorfilters" KeyPath="yes" Source="$(var.Profiles.Dir)\Bluetooth\colorfilters" />
+ </Component>
+ <Component Id="cmpBluetooth_preferences" Guid="*">
+ <File Id="filBluetooth_preferences" KeyPath="yes" Source="$(var.Profiles.Dir)\Bluetooth\preferences" />
+ </Component>
+ </Directory>
+ <Directory Id="dirClassic" Name="Classic">
+ <Component Id="cmpClassic_colorfilters" Guid="*">
+ <File Id="filClassic_colorfilters" KeyPath="yes" Source="$(var.Profiles.Dir)\Classic\colorfilters" />
+ </Component>
+ </Directory>
+ <Directory Id="dirNoReassembly" Name="No Reassembly">
+ <Component Id="cmpNoReassembly_preferences" Guid="*">
+ <File Id="filNoReassembly_preferences" KeyPath="yes" Source="$(var.Profiles.Dir)\No Reassembly\preferences" />
+ </Component>
+ </Directory>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Plugins.ConfigurationProfiles">
+ <ComponentRef Id="cmpBluetooth_colorfilters" />
+ <ComponentRef Id="cmpBluetooth_preferences" />
+ <ComponentRef Id="cmpClassic_colorfilters" />
+ <ComponentRef Id="cmpNoReassembly_preferences" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Editcap -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpEditcap_exe" Guid="*">
+ <File Id="filEditcap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\editcap.exe" />
+ </Component>
+ <Component Id="cmpEditcap_html" Guid="*">
+ <File Id="filEditcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\editcap.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Editcap">
+ <ComponentRef Id="cmpEditcap_exe" />
+ <ComponentRef Id="cmpEditcap_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Text2Pcap -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpText2pcap_exe" Guid="*">
+ <File Id="filText2pcap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\text2pcap.exe" />
+ </Component>
+ <Component Id="cmpText2pcap_html" Guid="*">
+ <File Id="filText2pcap_html" KeyPath="yes" Source="$(var.Staging.Dir)\text2pcap.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Text2Pcap">
+ <ComponentRef Id="cmpText2pcap_exe" />
+ <ComponentRef Id="cmpText2pcap_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Mergecap -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpMergecap_exe" Guid="*">
+ <File Id="filMergecap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\mergecap.exe" />
+ </Component>
+ <Component Id="cmpMergecap_html" Guid="*">
+ <File Id="filMergecap_html" KeyPath="yes" Source="$(var.Staging.Dir)\mergecap.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Mergecap">
+ <ComponentRef Id="cmpMergecap_exe" />
+ <ComponentRef Id="cmpMergecap_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Reordercap -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpReordercap_exe" Guid="*">
+ <File Id="filReordercap_exe" KeyPath="yes" Source="$(var.Staging.Dir)\reordercap.exe" />
+ </Component>
+ <Component Id="cmpReordercap_html" Guid="*">
+ <File Id="filReordercap_html" KeyPath="yes" Source="$(var.Staging.Dir)\reordercap.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Reordercap">
+ <ComponentRef Id="cmpReordercap_exe" />
+ <ComponentRef Id="cmpReordercap_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Capinfos -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpCapinfos_exe" Guid="*">
+ <File Id="filCapinfos_exe" KeyPath="yes" Source="$(var.Staging.Dir)\capinfos.exe" />
+ </Component>
+ <Component Id="cmpCapinfos_html" Guid="*">
+ <File Id="filCapinfos_html" KeyPath="yes" Source="$(var.Staging.Dir)\capinfos.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Capinfos">
+ <ComponentRef Id="cmpCapinfos_exe" />
+ <ComponentRef Id="cmpCapinfos_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Captype -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpCaptype_exe" Guid="*">
+ <File Id="filCaptype_exe" KeyPath="yes" Source="$(var.Staging.Dir)\captype.exe" />
+ </Component>
+ <Component Id="cmpCaptype_html" Guid="*">
+ <File Id="filCaptype_html" KeyPath="yes" Source="$(var.Staging.Dir)\captype.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Captype">
+ <ComponentRef Id="cmpCaptype_exe" />
+ <ComponentRef Id="cmpCaptype_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Rawshark -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpRawshark_exe" Guid="*">
+ <File Id="filRawshark_exe" KeyPath="yes" Source="$(var.Staging.Dir)\rawshark.exe" />
+ </Component>
+ <Component Id="cmpRawshark_html" Guid="*">
+ <File Id="filRawshark_html" KeyPath="yes" Source="$(var.Staging.Dir)\rawshark.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Rawshark">
+ <ComponentRef Id="cmpRawshark_exe" />
+ <ComponentRef Id="cmpRawshark_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Randpkt -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpRandpkt_exe" Guid="*">
+ <File Id="filRandpkt_exe" KeyPath="yes" Source="$(var.Staging.Dir)\randpkt.exe" />
+ </Component>
+ <Component Id="cmpRandpkt_html" Guid="*">
+ <File Id="filRandpkt_html" KeyPath="yes" Source="$(var.Staging.Dir)\randpkt.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Randpkt">
+ <ComponentRef Id="cmpRandpkt_exe" />
+ <ComponentRef Id="cmpRandpkt_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Sharkd -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpSharkd_exe" Guid="*">
+ <File Id="filSharkd_exe" KeyPath="yes" Source="$(var.Staging.Dir)\sharkd.exe" />
+ </Component>
+ <!--
+ <Component Id="cmpSharkd_html" Guid="*">
+ <File Id="filSharkd_html" KeyPath="yes" Source="$(var.Staging.Dir)\sharkd.html" />
+ </Component>
+ -->
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Sharkd">
+ <ComponentRef Id="cmpSharkd_exe" />
+ <!--
+ <ComponentRef Id="cmpSharkd_html" />
+ -->
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- MMDBResolve -->
+ <?ifdef MMDBRESOLVE_EXE?>
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpMmdbresolve_exe" Guid="*">
+ <File Id="filMmdbresolve_exe" KeyPath="yes" Source="$(var.Staging.Dir)\mmdbresolve.exe" />
+ </Component>
+ <Component Id="cmpMmdbresolve_html" Guid="*">
+ <File Id="filMmdbresolve_html" KeyPath="yes" Source="$(var.Staging.Dir)\mmdbresolve.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.MMDBResolve">
+ <ComponentRef Id="cmpMmdbresolve_exe" />
+ <ComponentRef Id="cmpMmdbresolve_html" />
+ </ComponentGroup>
+ </Fragment>
+ <?endif?>
+
+ <!-- Androiddump -->
+ <Fragment>
+ <DirectoryRef Id="dirExtcap">
+ <Component Id="cmpAndroiddump_exe" Guid="*">
+ <File Id="filAndroiddump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\androiddump.exe" />
+ </Component>
+ </DirectoryRef>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpAndroiddump_html" Guid="*">
+ <File Id="filAndroiddump_html" KeyPath="yes" Source="$(var.Staging.Dir)\androiddump.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Androiddump">
+ <ComponentRef Id="cmpAndroiddump_exe" />
+ <ComponentRef Id="cmpAndroiddump_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Randpktdump -->
+ <Fragment>
+ <DirectoryRef Id="dirExtcap">
+ <Component Id="cmpRandpktdump_exe" Guid="*">
+ <File Id="filRandpktdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\randpktdump.exe" />
+ </Component>
+ </DirectoryRef>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpRandpktdump_html" Guid="*">
+ <File Id="filRandpktdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\randpktdump.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Randpktdump">
+ <ComponentRef Id="cmpRandpktdump_exe" />
+ <ComponentRef Id="cmpRandpktdump_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Etwdump -->
+ <Fragment>
+ <DirectoryRef Id="dirExtcap">
+ <Component Id="cmpEtwdump_exe" Guid="*">
+ <File Id="filEtwdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\etwdump.exe" />
+ </Component>
+ </DirectoryRef>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpEtwdump_html" Guid="*">
+ <File Id="filEtwdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\etwdump.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Etwdump">
+ <ComponentRef Id="cmpEtwdump_exe" />
+ <ComponentRef Id="cmpEtwdump_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Sshdump -->
+ <Fragment>
+ <DirectoryRef Id="dirExtcap">
+ <Component Id="cmpSshdump_exe" Guid="*">
+ <File Id="filSshdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\sshdump.exe" />
+ </Component>
+ </DirectoryRef>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpSshdump_html" Guid="*">
+ <File Id="filSshdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\sshdump.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Sshdump">
+ <ComponentRef Id="cmpSshdump_exe" />
+ <ComponentRef Id="cmpSshdump_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Ciscodump -->
+ <Fragment>
+ <DirectoryRef Id="dirExtcap">
+ <Component Id="cmpCiscodump_exe" Guid="*">
+ <File Id="filCiscodump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\Ciscodump.exe" />
+ </Component>
+ </DirectoryRef>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpCiscodump_html" Guid="*">
+ <File Id="filCiscodump_html" KeyPath="yes" Source="$(var.Staging.Dir)\Ciscodump.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Ciscodump">
+ <ComponentRef Id="cmpCiscodump_exe" />
+ <ComponentRef Id="cmpCiscodump_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Wifidump -->
+ <Fragment>
+ <DirectoryRef Id="dirExtcap">
+ <Component Id="cmpWifidump_exe" Guid="*">
+ <File Id="filWifidump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\wifidump.exe" />
+ </Component>
+ </DirectoryRef>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpWifidump_html" Guid="*">
+ <File Id="filWifidump_html" KeyPath="yes" Source="$(var.Staging.Dir)\wifidump.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Wifidump">
+ <ComponentRef Id="cmpWifidump_exe" />
+ <ComponentRef Id="cmpWifidump_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Udpdump -->
+ <Fragment>
+ <DirectoryRef Id="dirExtcap">
+ <Component Id="cmpUdpdump_exe" Guid="*">
+ <File Id="filUdpdump_exe" KeyPath="yes" Source="$(var.Extcap.Dir)\Udpdump.exe" />
+ </Component>
+ </DirectoryRef>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpUdpdump_html" Guid="*">
+ <File Id="filUdpdump_html" KeyPath="yes" Source="$(var.Staging.Dir)\Udpdump.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Tools.Udpdump">
+ <ComponentRef Id="cmpUdpdump_exe" />
+ <ComponentRef Id="cmpUdpdump_html" />
+ </ComponentGroup>
+ </Fragment>
+
+ <?ifdef DOCBOOK_DIR?>
+ <!-- User Guide is created by heat -->
+ <!-- FAQ -->
+ <Fragment>
+ <DirectoryRef Id="INSTALLFOLDER">
+ <Component Id="cmpFAQ_html" Guid="*">
+ <File Id="filFAQ_html" KeyPath="yes" Source="$(var.DOCBOOK_DIR)\faq.html" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Documentation">
+ <ComponentRef Id="cmpFAQ_html" />
+ </ComponentGroup>
+ </Fragment>
+ <?endif?>
+
+ <!-- Shortcuts -->
+ <Fragment>
+ <ComponentGroup Id="CG.WiresharkStartMenu" Directory="ProgramMenuFolder">
+ <Component Id="cmpWiresharkShortcut">
+ <Shortcut Id="scWireshark" Name="$(var.WiresharkName)" Description="The $(var.WiresharkName) Network Protocol Analyzer" Target="[#filWireshark_exe]" WorkingDirectory="INSTALLFOLDER" />
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="StartMenuShortcut" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_START_MENU = "1"</Condition>
+ </Component>
+ </ComponentGroup>
+ <ComponentGroup Id="CG.WiresharkDesktopIcon" Directory="DesktopFolder">
+ <Component Id="cmpWiresharkDesktopIcon">
+ <Shortcut Id="scWiresharkDesktop" Name="$(var.WiresharkName)" Description="The $(var.WiresharkName) Network Protocol Analyzer" Target="[#filWireshark_exe]" WorkingDirectory="INSTALLFOLDER" />
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="DesktopIcon" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_DESKTOP_ICON = "1"</Condition>
+ </Component>
+ </ComponentGroup>
+ <ComponentGroup Id="CG.WiresharkQuickLaunchIcon" Directory="QuickLaunchFolder">
+ <Component Id="cmpWiresharkQuickLaunchIcon">
+ <Shortcut Id="scWiresharkQuickLaunch" Name="$(var.WiresharkName)" Description="The $(var.WiresharkName) Network Protocol Analyzer" Target="[#filWireshark_exe]" WorkingDirectory="INSTALLFOLDER" />
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="QuickLaunchIcon" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_QUICK_LAUNCH_ICON = "1"</Condition>
+ <!-- Done to keep ICE64 happy -->
+ <RemoveFolder Id="RemoveMicrosoftFolder" Directory="MicrosoftFolder" On="uninstall" />
+ <RemoveFolder Id="RemoveInternetExplorerFolder" Directory="InternetExplorerFolder" On="uninstall" />
+ <RemoveFolder Id="RemoveQuickLaunchFolder" Directory="QuickLaunchFolder" On="uninstall" />
+ </Component>
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- File Associations -->
+ <Fragment>
+ <ComponentGroup Id="CG.WiresharkFileAssociations" Directory="INSTALLFOLDER">
+ <Component Id="cmpFA5vw">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="5vw">
+ <Extension Id="5vw">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="5vw" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAacp">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="acp">
+ <Extension Id="acp">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="acp" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAapc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="apc">
+ <Extension Id="apc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="apc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAatc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="atc">
+ <Extension Id="atc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="atc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAbfr">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="bfr">
+ <Extension Id="bfr">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="bfr" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAcap">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="cap">
+ <Extension Id="cap">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="cap" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAenc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="enc">
+ <Extension Id="enc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="enc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAerf">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="erf">
+ <Extension Id="erf">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="erf" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAfdc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="fdc">
+ <Extension Id="fdc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="fdc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAipfix">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="ipfix">
+ <Extension Id="ipfix">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="ipfix" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAlcap">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="lcap">
+ <Extension Id="lcap">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="lcap" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAmplog">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="mplog">
+ <Extension Id="mplog">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="mplog" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAntar">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="ntar">
+ <Extension Id="ntar">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="ntar" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAout">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="out">
+ <Extension Id="out">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="out" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFApcap">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="pcap">
+ <Extension Id="pcap">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pcap" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFApcapng">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="pcapng">
+ <Extension Id="pcapng">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pcapng" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFApklg">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="pklg">
+ <Extension Id="pklg">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pklg" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFApkt">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="pkt">
+ <Extension Id="pkt">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="pkt" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFArf5">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="rf5">
+ <Extension Id="rf5">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="rf5" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAsnoop">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="snoop">
+ <Extension Id="snoop">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="snoop" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAsyc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="syc">
+ <Extension Id="syc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="syc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAtpc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="tpc">
+ <Extension Id="tpc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="tpc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAtr1">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="tr1">
+ <Extension Id="tr1">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="tr1" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAtrace">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="trace">
+ <Extension Id="trace">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="trace" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAtrc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="trc">
+ <Extension Id="trc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="trc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAvwr">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="vwr">
+ <Extension Id="vwr">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="vwr" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAwpc">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="wpc">
+ <Extension Id="wpc">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="wpc" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ <Component Id="cmpFAwpz">
+ <ProgId Id="$(var.WiresharkFileAssociation)" Description="wpz">
+ <Extension Id="wpz">
+ <Verb Id="open" Command="open" TargetFile="filWireshark_exe" Argument="&quot;%1&quot;"/>
+ </Extension>
+ </ProgId>
+ <RegistryValue Root="HKCU" Key="Software\$(var.WiresharkName)" Name="wpz" Type="integer" Value="1" KeyPath="yes"/>
+ <Condition>WIRESHARK_FILE_EXTENSIONS = "1"</Condition>
+ </Component>
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- C-runtime redistributable -->
+ <Fragment>
+ <DirectoryRef Id="TARGETDIR">
+ <Merge Id="VCRedist" SourceFile="$(var.VCRedistDir)\Microsoft_$(var.VCRedistVersion)_CRT_$(var.Platform).msm" DiskId="1" Language="0"/>
+ </DirectoryRef>
+ </Fragment>
+
+</Include>
diff --git a/packaging/wix/DirectoryStructure.wxi b/packaging/wix/DirectoryStructure.wxi
new file mode 100644
index 00000000..f06297ed
--- /dev/null
+++ b/packaging/wix/DirectoryStructure.wxi
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+ <!-- Basic directory structure -->
+ <Fragment>
+ <!-- "Special" directory, required for the root drive -->
+ <Directory Id="TARGETDIR" Name="SourceDir">
+ <!-- "Special" directory for desktop -->
+ <Directory Id="DesktopFolder" Name="Desktop"/>
+ <!-- "Special" directory, required for the Program Files folder -->
+ <Directory Id="$(var.PlatformProgramFilesFolder)">
+ <!-- These directories follow the typical hierarchical structure -->
+ <Directory Id="INSTALLFOLDER" Name="$(var.WiresharkName)">
+ <Directory Id="dirDtds" Name="dtds"/>
+ <Directory Id="dirDiameter" Name="diameter"/>
+ <Directory Id="dirExtcap" Name="extcap"/>
+ <Directory Id="dirHelp" Name="help"/>
+ <Directory Id="dirRadius" Name="radius"/>
+ <Directory Id="dirPlugins" Name="plugins">
+ <Directory Id="dirPluginsVersion" Name="$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)">
+ <Directory Id="dirPluginsVersionEpan" Name="epan"/>
+ <Directory Id="dirPluginsVersionWtap" Name="wiretap"/>
+ <Directory Id="dirPluginsVersionCodecs" Name="codecs"/>
+ </Directory>
+ </Directory>
+ <Directory Id="dirUsersGuide" Name="Wireshark User's Guide"/>
+ <Directory Id="dirProfiles" Name="profiles"/>
+ <Directory Id="dirSnmp" Name="snmp">
+ <Directory Id="dirSnmpMibs" Name="mibs"/>
+ </Directory>
+ <Directory Id="dirTpncp" Name="tpncp"/>
+ <Directory Id="dirTranslations" Name="translations"/>
+ <Directory Id="dirWimaxasncp" Name="wimaxasncp"/>
+ <Directory Id="dirProtobuf" Name="protobuf"/>
+ </Directory>
+ </Directory>
+
+ <!-- "Special" directory for the Start Menu -->
+ <Directory Id="ProgramMenuFolder">
+ <!-- Shortcuts directly in menu -->
+ </Directory>
+ <!-- "Special" directory for Quick Launch -->
+ <Directory Id="AppDataFolder">
+ <Directory Id="MicrosoftFolder" Name="Microsoft">
+ <Directory Id="InternetExplorerFolder" Name="Internet Explorer">
+ <Directory Id="QuickLaunchFolder" Name="Quick Launch" />
+ </Directory>
+ </Directory>
+ </Directory>
+ </Directory>
+
+ </Fragment>
+</Include>
diff --git a/packaging/wix/Features.wxi b/packaging/wix/Features.wxi
new file mode 100644
index 00000000..ffaa4d60
--- /dev/null
+++ b/packaging/wix/Features.wxi
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+ <!-- User-selectable features -->
+ <Fragment>
+ <Feature Id="Fe.Wireshark" Title="$(var.WiresharkName)" Level="1" AllowAdvertise="yes" Display="expand" Description="The main network protocol analyzer application.">
+ <ComponentGroupRef Id="CG.Wireshark" />
+ <ComponentGroupRef Id="CG.QtDependencies" />
+ <ComponentGroupRef Id="CG.QtTranslations" />
+ <ComponentGroupRef Id="CG.WiresharkStartMenu" />
+ <ComponentGroupRef Id="CG.WiresharkDesktopIcon" />
+ <ComponentGroupRef Id="CG.WiresharkQuickLaunchIcon" />
+ <ComponentGroupRef Id="CG.WiresharkFileAssociations" />
+ </Feature>
+ <Feature Id="Fe.WiresharkRequired" Title="Required" Level="1" AllowAdvertise="yes" Display="hidden" Description="Install for every user">
+ <ComponentGroupRef Id="CG.WiresharkRequired" />
+ <ComponentGroupRef Id="CG.ColorFilters" />
+ <ComponentGroupRef Id="CG.Diameter" />
+ <ComponentGroupRef Id="CG.RadiusDict" />
+ <ComponentGroupRef Id="CG.Dtds" />
+ <ComponentGroupRef Id="CG.Tpncp" />
+ <ComponentGroupRef Id="CG.Wimaxasncp" />
+ <ComponentGroupRef Id="CG.Protobuf" />
+ <ComponentGroupRef Id="CG.RequiredDependencies" />
+
+ </Feature>
+ <Feature Id="Fe.TShark" Title="TShark" Level="1" AllowAdvertise="yes" Display="expand" Description="Text based network protocol analyzer.">
+ <ComponentGroupRef Id="CG.TShark" />
+ </Feature>
+ <Feature Id="Fe.Plugins" Title="Plugins &amp; Extensions" Level="1" AllowAdvertise="yes" Display="expand" Description="Plugins and extensions for both $(var.WiresharkName) and TShark.">
+ <!-- XXX - Cleanup plugins directory on uninstall -->
+ <Feature Id="Fe.Plugins.Dissector" Title="Dissector Plugins" Level="1" AllowAdvertise="yes" Display="expand" Description="Additional protocol dissectors.">
+ <ComponentGroupRef Id="CG.Plugins.Dissector" />
+ </Feature>
+ <Feature Id="Fe.Plugins.TreeStat" Title="Tree Statistics Plugin" Level="1" AllowAdvertise="yes" Display="expand" Description="Extended statistics.">
+ <ComponentGroupRef Id="CG.Plugins.TreeStat" />
+ </Feature>
+ <Feature Id="Fe.Plugins.Mate" Title="Mate - Meta Analysis and Tracing Engine" Level="1" AllowAdvertise="yes" Display="expand" Description="Plugin - Meta Analysis and Tracing Engine (Experimental).">
+ <ComponentGroupRef Id="CG.Plugins.Mate" />
+ </Feature>
+ <Feature Id="Fe.Plugins.Transum" Title="TRANSUM - Network and application performance analysis" Level="1" AllowAdvertise="yes" Display="expand" Description="Plugin - Network and application performance analysis (Experimental).">
+ <ComponentGroupRef Id="CG.Plugins.Transum" />
+ </Feature>
+ <Feature Id="Fe.Plugins.Wiretap" Title="Wiretap Plugins" Level="1" AllowAdvertise="yes" Display="expand" Description="Additional file formats support.">
+ <ComponentGroupRef Id="CG.Plugins.Wiretap" />
+ </Feature>
+ <Feature Id="Fe.Plugins.Codecs" Title="Codec Plugins" Level="1" AllowAdvertise="yes" Display="expand" Description="Codecs playback support.">
+ <ComponentGroupRef Id="CG.Plugins.Codecs" />
+ </Feature>
+ <Feature Id="Fe.Plugins.ConfigurationProfiles" Title="Configuration Profiles" Level="1" AllowAdvertise="yes" Display="expand" Description="Configuration Profiles">
+ <!-- XXX - Cleanup configuration profiles directory on uninstall -->
+ <ComponentGroupRef Id="CG.Plugins.ConfigurationProfiles" />
+ </Feature>
+ <?ifdef SMI_DIR?>
+ <Feature Id="Fe.Plugins.SNMP" Title="SNMP MIBs" Level="1" AllowAdvertise="yes" Display="expand" Description="SNMP MIBs for better SNMP dissection.">
+ <ComponentGroupRef Id="CG.Plugins.SNMP" />
+ </Feature>
+ <?endif?>
+ </Feature>
+ <Feature Id="Fe.Tools" Title="Tools" Level="1" AllowAdvertise="yes" Display="expand" Description="Additional command line based tools.">
+ <Feature Id="Fe.Tools.Editcap" Title="Editcap" Level="1" AllowAdvertise="yes" Display="expand" Description="Copy packets to a new file, optionally trimmming packets, omitting them, or saving to a different format.">
+ <ComponentGroupRef Id="CG.Tools.Editcap" />
+ </Feature>
+ <Feature Id="Fe.Tools.Text2Pcap" Title="Text2Pcap" Level="1" AllowAdvertise="yes" Display="expand" Description="Read an ASCII hex dump and write the data into a libpcap-style capture file.">
+ <ComponentGroupRef Id="CG.Tools.Text2Pcap" />
+ </Feature>
+ <Feature Id="Fe.Tools.Mergecap" Title="Mergecap" Level="1" AllowAdvertise="yes" Display="expand" Description="Combine multiple saved capture files into a single output file.">
+ <ComponentGroupRef Id="CG.Tools.Mergecap" />
+ </Feature>
+ <Feature Id="Fe.Tools.Reordercap" Title="Reordercap" Level="1" AllowAdvertise="yes" Display="expand" Description="Copy packets to a new file, sorted by time.">
+ <ComponentGroupRef Id="CG.Tools.Reordercap" />
+ </Feature>
+ <Feature Id="Fe.Tools.Capinfos" Title="Capinfos" Level="1" AllowAdvertise="yes" Display="expand" Description="Print information about capture files.">
+ <ComponentGroupRef Id="CG.Tools.Capinfos" />
+ </Feature>
+ <Feature Id="Fe.Tools.Captype" Title="Captype" Level="1" AllowAdvertise="yes" Display="expand" Description="Print the types of capture files.">
+ <ComponentGroupRef Id="CG.Tools.Captype" />
+ </Feature>
+ <Feature Id="Fe.Tools.Rawshark" Title="Rawshark" Level="1" AllowAdvertise="yes" Display="expand" Description="Raw packet filter.">
+ <ComponentGroupRef Id="CG.Tools.Rawshark" />
+ </Feature>
+ <Feature Id="Fe.Tools.Sharkd" Title="Sharkd" Level="1" AllowAdvertise="yes" Display="expand" Description="Packet dissection daemon.">
+ <ComponentGroupRef Id="CG.Tools.Sharkd" />
+ </Feature>
+ <?ifdef MMDBRESOLVE_EXE?>
+ <Feature Id="Fe.Tools.MMDBResolve" Title="MMDBResolve" Level="1" AllowAdvertise="yes" Display="expand" Description="IP geolocation database resolution.">
+ <ComponentGroupRef Id="CG.Tools.MMDBResolve" />
+ </Feature>
+ <?endif?>
+ <Feature Id="Fe.Tools.Androiddump" Title="Androiddump" Level="2" AllowAdvertise="yes" Display="expand" Description="Provide capture interfaces from Android devices.">
+ <ComponentGroupRef Id="CG.Tools.Androiddump" />
+ </Feature>
+ <Feature Id="Fe.Tools.Randpktdump" Title="Randpktdump" Level="2" AllowAdvertise="yes" Display="expand" Description="Provide random packet generator.">
+ <ComponentGroupRef Id="CG.Tools.Randpktdump" />
+ </Feature>
+ <Feature Id="Fe.Tools.Etwdump" Title="Etwdump" Level="2" AllowAdvertise="yes" Display="expand" Description="Provide ETW reader.">
+ <ComponentGroupRef Id="CG.Tools.Etwdump" />
+ </Feature>
+ <Feature Id="Fe.Tools.Sshdump" Title="Sshdump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide remote capture through SSH.">
+ <ComponentGroupRef Id="CG.Tools.Sshdump" />
+ </Feature>
+ <Feature Id="Fe.Tools.Ciscodump" Title="Ciscodump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide capture interface from a remote Cisco router through SSH.">
+ <ComponentGroupRef Id="CG.Tools.Ciscodump" />
+ </Feature>
+ <Feature Id="Fe.Tools.Udpdump" Title="Udpdump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide capture interface that gets UDP packets from network devices.">
+ <ComponentGroupRef Id="CG.Tools.Udpdump" />
+ </Feature>
+ <Feature Id="Fe.Tools.Wifidump" Title="Wifidump" Level="1" AllowAdvertise="yes" Display="expand" Description="Provide remote capture of Wi-Fi frames through SSH.">
+ <ComponentGroupRef Id="CG.Tools.Wifidump" />
+ </Feature>
+ </Feature>
+ <?ifdef DOCBOOK_DIR?>
+ <Feature Id="Fe.Documentation" Title="Documentation" Level="1" AllowAdvertise="yes" Display="expand" Description="Install an offline copy of the User's Guide and FAQ.">
+ <ComponentGroupRef Id="CG.Documentation" />
+ </Feature>
+ <?endif?>
+ <Feature Id="VCRedist" Title="Visual C++ Runtime" AllowAdvertise="no" Display="hidden" Level="1">
+ <MergeRef Id="VCRedist"/>
+ </Feature>
+ </Fragment>
+</Include>
diff --git a/packaging/wix/InputPaths.wxi b/packaging/wix/InputPaths.wxi
new file mode 100644
index 00000000..5ff62355
--- /dev/null
+++ b/packaging/wix/InputPaths.wxi
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+ <?if $(var.Platform) = x64 ?>
+ <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
+ <?else?>
+ <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
+ <?endif?>
+
+ <?define Staging.Dir ="$(var.BuildOutputDir)" ?>
+ <?define Plugins.Dir ="$(var.Staging.Dir)\plugins" ?>
+ <?define Profiles.Dir ="$(var.Staging.Dir)\profiles" ?>
+ <?define Extcap.Dir ="$(var.Staging.Dir)\extcap" ?>
+ <?define WiresharkQt.Dir ="$(var.Staging.Dir)" ?>
+ <?define Dtds.Dir ="$(var.Staging.Dir)\dtds" ?>
+ <?define Tpncp.Dir ="$(var.Staging.Dir)\tpncp" ?>
+ <?define Wimaxasncp.Dir ="$(var.Staging.Dir)\wimaxasncp" ?>
+ <?define Protobuf.Dir ="$(var.Staging.Dir)\protobuf" ?>
+ <?define Help.Dir ="$(var.Staging.Dir)\help" ?>
+ <?define Epan.Lua.Dir ="..\..\epan\wslua" ?>
+
+</Include>
diff --git a/packaging/wix/Plugins.wxi b/packaging/wix/Plugins.wxi
new file mode 100644
index 00000000..0b53cf48
--- /dev/null
+++ b/packaging/wix/Plugins.wxi
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+
+ <!-- Plugins -->
+ <Fragment>
+ <DirectoryRef Id="dirPluginsVersionEpan">
+ <Component Id="cmpEthercat_dll" Guid="*">
+ <File Id="filEthercat_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\ethercat.dll" />
+ </Component>
+ <Component Id="cmpGryphon_dll" Guid="*">
+ <File Id="filGryphon_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\gryphon.dll" />
+ </Component>
+ <Component Id="cmpIrda_dll" Guid="*">
+ <File Id="filIrda_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\irda.dll" />
+ </Component>
+ <Component Id="cmpOpcua_dll" Guid="*">
+ <File Id="filOpcua_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\opcua.dll" />
+ </Component>
+ <Component Id="cmpProfinet_dll" Guid="*">
+ <File Id="filProfinet_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\profinet.dll" />
+ </Component>
+ <Component Id="cmpUnistim_dll" Guid="*">
+ <File Id="filUnistim_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\unistim.dll" />
+ </Component>
+ <Component Id="cmpWimax_dll" Guid="*">
+ <File Id="filWimax_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimax.dll" />
+ </Component>
+ <Component Id="cmpWimaxasmcp_dll" Guid="*">
+ <File Id="filWimaxasmcp_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimaxasncp.dll" />
+ </Component>
+ <Component Id="cmpWimaxmacphy_dll" Guid="*">
+ <File Id="filWimaxmacphy_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\wimaxmacphy.dll" />
+ </Component>
+ <!-- Add custom plugin Components here -->
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Plugins.Dissector">
+ <ComponentRef Id="cmpEthercat_dll" />
+ <ComponentRef Id="cmpGryphon_dll" />
+ <ComponentRef Id="cmpIrda_dll" />
+ <ComponentRef Id="cmpOpcua_dll" />
+ <ComponentRef Id="cmpProfinet_dll" />
+ <ComponentRef Id="cmpUnistim_dll" />
+ <ComponentRef Id="cmpWimax_dll" />
+ <ComponentRef Id="cmpWimaxasmcp_dll" />
+ <ComponentRef Id="cmpWimaxmacphy_dll" />
+ <!-- Add custom plugin ComponentRefs here -->
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- Stats Tree -->
+ <Fragment>
+ <DirectoryRef Id="dirPluginsVersionEpan">
+ <Component Id="cmpStatsTree_dll" Guid="*">
+ <File Id="filStatsTree_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\stats_tree.dll" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Plugins.TreeStat">
+ <ComponentRef Id="cmpStatsTree_dll" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- MATE -->
+ <Fragment>
+ <DirectoryRef Id="dirPluginsVersionEpan">
+ <Component Id="cmpMate_dll" Guid="*">
+ <File Id="filMate_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\mate.dll" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Plugins.Mate">
+ <ComponentRef Id="cmpMate_dll" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- TRANSUM -->
+ <Fragment>
+ <DirectoryRef Id="dirPluginsVersionEpan">
+ <Component Id="cmpTransum_dll" Guid="*">
+ <File Id="filTransum_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\epan\transum.dll" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Plugins.Transum">
+ <ComponentRef Id="cmpTransum_dll" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- wiretap -->
+ <Fragment>
+ <DirectoryRef Id="dirPluginsVersionWtap">
+ <Component Id="cmpUsbdump_dll" Guid="*">
+ <File Id="filUsbdump_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\wiretap\usbdump.dll" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Plugins.Wiretap">
+ <ComponentRef Id="cmpUsbdump_dll" />
+ </ComponentGroup>
+ </Fragment>
+
+ <!-- codecs -->
+ <Fragment>
+ <DirectoryRef Id="dirPluginsVersionCodecs">
+ <Component Id="cmpG711_dll" Guid="*">
+ <File Id="filG711_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g711.dll" />
+ </Component>
+ <Component Id="cmpG722_dll" Guid="*">
+ <File Id="filG722_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g722.dll" />
+ </Component>
+ <Component Id="cmpG726_dll" Guid="*">
+ <File Id="filG726_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g726.dll" />
+ </Component>
+ <Component Id="cmpG729_dll" Guid="*">
+ <File Id="filG729_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\g729.dll" />
+ </Component>
+ <Component Id="cmpL16mono_dll" Guid="*">
+ <File Id="filL16mono_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\l16mono.dll" />
+ </Component>
+ <Component Id="cmpSBC_dll" Guid="*">
+ <File Id="filSBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\sbc.dll" />
+ </Component>
+ <Component Id="cmpILBC_dll" Guid="*">
+ <File Id="filILBC_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\ilbc.dll" />
+ </Component>
+ <Component Id="cmpOPUS_dll" Guid="*">
+ <File Id="filOPUS_dec_dll" KeyPath="yes" Source="$(var.Plugins.Dir)\$(var.WiresharkMajorVersion).$(var.WiresharkMinorVersion)\codecs\opus_dec.dll" />
+ </Component>
+ </DirectoryRef>
+ </Fragment>
+ <Fragment>
+ <ComponentGroup Id="CG.Plugins.Codecs">
+ <ComponentRef Id="cmpG711_dll" />
+ <ComponentRef Id="cmpG722_dll" />
+ <ComponentRef Id="cmpG726_dll" />
+ <ComponentRef Id="cmpG729_dll" />
+ <ComponentRef Id="cmpL16mono_dll" />
+ <ComponentRef Id="cmpSBC_dll" />
+ <ComponentRef Id="cmpILBC_dll" />
+ <ComponentRef Id="cmpOPUS_dll" />
+ </ComponentGroup>
+ </Fragment>
+
+</Include>
diff --git a/packaging/wix/Prerequisites.wxi b/packaging/wix/Prerequisites.wxi
new file mode 100644
index 00000000..54e8416a
--- /dev/null
+++ b/packaging/wix/Prerequisites.wxi
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
+
+ <!-- Check for required dependencies here -->
+ <!--
+ You can debug the logic below (and lots of other things) by running
+ msiexec /i packaging\wix\Wireshark-xxx.msi /l*v msilog.txt
+ -->
+ <Fragment>
+
+ <!-- Do not remove: The contents of this "fragment" will not be included in the project,
+ unless we reference at least one item defined within it.
+ This "IncludePrerequisites" property is referenced in the "Product" element,
+ to ensure the entire fragment is included. -->
+ <Property Id="IncludePrerequisites">1</Property>
+
+ <!-- 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 GetWindowsVersion parts of packaging\nsis\wireshark.nsi
+ -->
+ <Condition Message="Windows 2000 is no longer supported. Please install $(var.WiresharkName) 1.2 or 1.0 instead.">
+ <![CDATA[Installed OR (VersionNT < 500) OR (VersionNT > 500)]]>
+ </Condition>
+
+ <Condition Message="WindowsXP is no longer supported. Please install $(var.WiresharkName) 1.12 or 1.10 instead.">
+ <![CDATA[Installed OR (VersionNT < 501) OR (VersionNT > 501)]]>
+ </Condition>
+
+ <Condition Message="Windows Server 2003 is no longer supported. Please install $(var.WiresharkName) 1.12 or 1.10 instead.">
+ <![CDATA[Installed OR (VersionNT < 502) OR (VersionNT > 502)]]>
+ </Condition>
+
+ <Condition Message="Windows Vista and Server 2008 are no longer supported. Please install $(var.WiresharkName) 2.2 instead.">
+ <![CDATA[Installed OR (VersionNT < 600) OR (VersionNT > 600)]]>
+ </Condition>
+
+ <Condition Message="$(var.WiresharkName)$(var.WiresharkVersion) is only supported on Windows 7, Windows Server 2008R2, or higher.">
+ <![CDATA[Installed OR (VersionNT >= 601)]]>
+ </Condition>
+
+<!--
+ NSIS package uninstallation. The NSIS installer writes a bunch of keys to
+ 'HKEY_LOCAL_MACHINE\SOFTWARE\{Wow6432Node\,}Microsoft\Windows\CurrentVersion\Uninstall\Wireshark'.
+ See the 'WriteRegStr HKEY_LOCAL_MACHINE "${UNINSTALL_PATH}"' statements
+ starting at around line 780 in nsis\wireshark.nsi for a complete list.
+
+ For now look for 'InstallLocation' and cancel the installation if
+ it's defined and exists. Next steps:
+ - look for 'QuietUninstallString' and offer to run it.
+ - Show properties in condition messages as described below.
+-->
+
+ <Property Id="NSIS_INSTALL_LOCATION_32" Secure="yes">
+ <RegistrySearch Id='NsisInstallRegistrySearch32'
+ Type='raw'
+ Root='HKLM'
+ Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark'
+ Name='InstallLocation'
+ Win64='no'>
+ <DirectorySearch Id='NsisInstallDirectorySearch32' AssignToProperty='yes'/>
+ </RegistrySearch>
+ </Property>
+
+ <Property Id="NSIS_DISPLAY_NAME_32" Value="Wireshark" Secure="yes">
+ <RegistrySearch Id='NsisDisplayNameRegistrySearch32'
+ Type='raw'
+ Root='HKLM'
+ Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark'
+ Name='DisplayName'
+ Win64='no'/>
+ </Property>
+
+ <Condition Message="[NSIS_DISPLAY_NAME_32] was installed in [NSIS_INSTALL_LOCATION_32] using the .exe installer. Please uninstall it using Programs and Features.">
+ <![CDATA[Installed OR NOT NSIS_INSTALL_LOCATION_32]]>
+ </Condition>
+
+ <Property Id="NSIS_INSTALL_LOCATION_64" Secure="yes">
+ <RegistrySearch Id='NsisInstallRegistrySearch64'
+ Type='raw'
+ Root='HKLM'
+ Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark'
+ Name='InstallLocation'
+ Win64='yes'>
+ <DirectorySearch Id='NsisInstallDirectorySearch64' AssignToProperty='yes'/>
+ </RegistrySearch>
+ </Property>
+
+ <Property Id="NSIS_DISPLAY_NAME_64" Value="Wireshark" Secure="yes">
+ <RegistrySearch Id='NsisDisplayNameRegistrySearch64'
+ Type='raw'
+ Root='HKLM'
+ Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Wireshark'
+ Name='DisplayName'
+ Win64='yes'/>
+ </Property>
+
+ <Condition Message="[NSIS_DISPLAY_NAME_64] was installed in [NSIS_INSTALL_LOCATION_64] using the .exe installer. Please uninstall it using Programs and Features.">
+ <![CDATA[Installed OR NOT NSIS_INSTALL_LOCATION_64]]>
+ </Condition>
+
+ </Fragment>
+</Include>
diff --git a/packaging/wix/README.adoc b/packaging/wix/README.adoc
new file mode 100644
index 00000000..78af64c1
--- /dev/null
+++ b/packaging/wix/README.adoc
@@ -0,0 +1,47 @@
+= WiX (.msi) Installer For Wireshark
+
+This is an experimental feature to provide Wireshark with an .msi installer as requested in https://gitlab.com/wireshark/wireshark/-/issues/8814[issue 8814].
+It might one day replace the NSIS installer, but needs to be a little more complete before doing so.
+
+== Differences/Notes Compared To The NSIS Installer
+
+. You need the https://wixtoolset.org/[WiX toolset] to build the .msi installer.
+Version 3.10 or later is recommended.
+
+. The User's Guide, SNMP, Radius, Diameter, and Qt translations files are harvested to
+be included in the installer. Any custom/additional files just need to be written to the
+appropriate build output directory and the installer will pick them up. NSIS required
+modifying a file (custom_mibs.txt, etc) for inclusion
+
+. Plugin DLLs are not automatically harvested. To include your DLL, modify Plugins.wxi.
+
+. To build the WiX installer run:
+----
+> msbuild /m /p:Configuration=RelWithDebInfo wireshark_wix_prep.vcxproj
+> msbuild /m /p:Configuration=RelWithDebInfo wireshark_wix.vcxproj
+----
+
+== Known Issues
+
+. The .msi installer does not include and install Npcap or USBPcap like the NSIS installer does.
+These currently come as NSIS-generated .exe installers.
+We might be able to bundle them as https://wixtoolset.org/documentation/manual/v3/xsd/wix/exepackage.html[ExePackage elements].
+
+// This appears to be fixed in the MERGE_MODULE_DIR code in CMakeLists.txt?
+// . Needs more flexible handling of VC CRT Merge module (need build script to provide appropriate macros).
+// Something like (or modifying existing) FindMSVC_REDIST.cmake.
+// Currently only VS2013 / CRT120 and VS 2015 / CRT140 are supported.
+
+. Transitioning, upgrading, downgrading, and reinstalling is more tricky.
+The NSIS-based installer handles previously-installed versions by running any existing uninstaller prior to installation, which empties the installation directory and removes registry entries.
+These are subsequently filled back in by the installer.
+The Windows Installer architecture keeps track of installed items in a https://docs.microsoft.com/en-us/windows/win32/msi/installer-database[database] and uses the https://docs.microsoft.com/en-us/windows/win32/msi/upgradecode[UpgradeCode property] to identify installed products and the https://wixtoolset.org/documentation/manual/v3/xsd/wix/majorupgrade.html[MajorUpgrade property] to control upgrade behavior.
+As a result,
+ * We can't easily upgrade from an NSIS-based installation to a .msi installation, and vice versa.
+ * We have to be careful about setting things like UpgradeCode, MajorUpgrade, and REINSTALLMODE in our WiX configuration.
+
+. The lax behavior of the NSIS-based installer lets you install more than one copy of Wireshark if you specify different installation directories.
+(The most recently installed version "wins" as far as registry entries and file associations go).
+The .msi installer doesn't allow this.
+
+Patches welcome to address any of the issues above or improvements you think can be made.
diff --git a/packaging/wix/StringOverrides.wxl b/packaging/wix/StringOverrides.wxl
new file mode 100644
index 00000000..d0930c84
--- /dev/null
+++ b/packaging/wix/StringOverrides.wxl
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<WixLocalization Culture="en-US" Codepage="1252" xmlns="http://schemas.microsoft.com/wix/2006/localization">
+ <String Id="WelcomeDlgDescription" Overridable="yes">This will install [ProductName] [ProductVersion] on your computer. If you installed [ProductName] using the .exe installer please uninstall it first.</String>
+</WixLocalization>
diff --git a/packaging/wix/UserInterface.wxi b/packaging/wix/UserInterface.wxi
new file mode 100644
index 00000000..e5726664
--- /dev/null
+++ b/packaging/wix/UserInterface.wxi
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Include>
+ <!-- Define the appearance, sequence, and available options in the user interface -->
+ <Fragment>
+ <WixVariable Id="WixUILicenseRtf" Value="$(var.EulaPath)" />
+ <WixVariable Id="WixUIBannerBmp" Value="$(var.BannerImagePath)" />
+ <WixVariable Id="WixUIDialogBmp" Value="$(var.DialogImagePath)" />
+ <Icon Id="ProgramsFeaturesIcon" SourceFile="$(var.ProgramsFeaturesIconPath)"/>
+ <Property Id="ARPPRODUCTICON" Value="ProgramsFeaturesIcon" />
+
+ <!-- This UI identifier will be used in the product definition-->
+ <UI Id="UI.Wireshark">
+
+ <Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" ></Property>
+ <UIRef Id="WiresharkWixUI" />
+ </UI>
+ </Fragment>
+</Include>
diff --git a/packaging/wix/Wireshark.wxs b/packaging/wix/Wireshark.wxs
new file mode 100644
index 00000000..8421bf0d
--- /dev/null
+++ b/packaging/wix/Wireshark.wxs
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+
+ <?define WiresharkFileAssociation = "wireshark-capture-file" ?>
+
+ <!-- The path to the installer's End-User License Agreement, displayed during installation -->
+ <?define EulaPath="$(var.AssetDir)\COPYING.rtf"?>
+ <!-- Windows 8 and later supports PNG. Until then we use cave paintings^W^W BMP. -->
+ <?define BannerImagePath="$(var.AssetDir)\banner.bmp"?>
+ <?define DialogImagePath="$(var.AssetDir)\dialog.bmp"?>
+ <!-- Use the application icon in "Programs and Features"
+ This is apparently stored uncompressed, i.e. we should use a dedicated
+ .ico file instead of pointing to wireshark.exe.
+ -->
+ <?define ProgramsFeaturesIconPath="$(var.IconDir)\wireshark.ico"?>
+ <Product Id="*" Name="$(var.WiresharkName)" Language="1033" Version="$(var.WiresharkVersion)" Manufacturer="The Wireshark developer community, https://www.wireshark.org/" UpgradeCode="0d67aace-269a-4264-81a3-da8055c1c79c">
+ <Package InstallerVersion="500" Compressed="yes" InstallScope="perMachine" />
+ <!-- Values for Additional Tasks -->
+ <Property Id="WIRESHARK_START_MENU" Value="1" Secure="yes"/>
+ <Property Id="WIRESHARK_DESKTOP_ICON" Secure="yes"/>
+ <Property Id="WIRESHARK_QUICK_LAUNCH_ICON" Value="1" Secure="yes" />
+ <Property Id="WIRESHARK_LEGACY_START_MENU" Value="1" Secure="yes" />
+ <Property Id="WIRESHARK_LEGACY_DESKTOP_ICON" Secure="yes"/>
+ <Property Id="WIRESHARK_LEGACY_QUICK_LAUNCH_ICON" Value="1" Secure="yes" />
+ <Property Id="WIRESHARK_FILE_EXTENSIONS" Value="1"/>
+
+ <!-- We set AllowSameVersionUpgrade so that automated builds (which
+ only differ by micro version numbers) won't get installed side
+ by side. The WiX documentation seems to warn against this, so we
+ might want to find a better fix, e.g. REINSTALLMODE + AllowDowngrades:
+ https://stackoverflow.com/questions/1544990/wix-major-upgrade-doesnt-completely-install-app-on-downgrade
+ -->
+ <MajorUpgrade
+ DowngradeErrorMessage="A newer version of $(var.WiresharkName) is already installed."
+ AllowSameVersionUpgrades="yes"
+ />
+
+
+ <MediaTemplate EmbedCab="yes" CompressionLevel="high" />
+
+ <!-- Include the prerequisites, by referencing the placeholder property -->
+ <PropertyRef Id="IncludePrerequisites" />
+
+ <!-- Include the top-most parent feature -->
+ <FeatureRef Id="Fe.Wireshark" />
+
+ <!-- Include the installer UI definition -->
+ <UIRef Id="UI.Wireshark"/>
+ </Product>
+
+ <?include InputPaths.wxi ?>
+ <?include DirectoryStructure.wxi ?>
+ <?include Prerequisites.wxi ?>
+ <?include ComponentGroups.wxi ?>
+ <?include Plugins.wxi ?>
+ <?include Features.wxi ?>
+ <?include UserInterface.wxi ?>
+</Wix>
diff --git a/packaging/wix/WiresharkOptionsDlg.wxs b/packaging/wix/WiresharkOptionsDlg.wxs
new file mode 100644
index 00000000..0790ccd2
--- /dev/null
+++ b/packaging/wix/WiresharkOptionsDlg.wxs
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI>
+ <!--
+ Recommended control sizing and spacing:
+ https://docs.microsoft.com/en-us/windows/win32/uxguide/vis-layout#control-sizing
+ https://docs.microsoft.com/en-us/windows/win32/uxguide/vis-layout#spacing
+ The recommended spacing between unrelated controls is 7, but 10 looks better.
+ -->
+ <Dialog Id="WiresharkOptionsDlg" Width="370" Height="270" Title="!(loc.LicenseAgreementDlg_Title)">
+ <Control Id="BannerBitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="44" TabSkip="no" Text="!(loc.LicenseAgreementDlgBannerBitmap)"/>
+ <Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0"/>
+ <Control Id="Title" Type="Text" X="14" Y="7" Width="350" Height="15" Transparent="yes" NoPrefix="yes" Text="Packet capture, shortcuts, and file extensions"/>
+ <Control Id="Description" Type="Text" X="20" Y="26" Width="350" Height="15" Transparent="yes" NoPrefix="yes" Text="You must install Npcap or WinPcap in order to capture packets."/>
+
+ <!-- BannerLine y = 44, 44 + 7 = 51 -->
+ <Control Id="NetworkCapture" Type="Text" X="14" Y="51" Width="350" Height="12" Text="{\WixUI_Font_Bold}Wireshark requires Npcap or WinPcap to capture network packets"/>
+ <Control Id="NetworkCaptureNpcap" Type="Hyperlink" X="20" Y="63" Width="350" Height="11">
+ <Text><![CDATA[<a href="https://npcap.org">Download Npcap</a> (recommended)]]></Text>
+ </Control>
+ <!-- It looks Hyperlink controls only support one hyperlink, per control. -->
+ <Control Id="NetworkCaptureWinPcap" Type="Hyperlink" X="20" Y="74" Width="350" Height="11">
+ <Text><![CDATA[…or <a href="https://www.winpcap.org">download WinPcap</a>]]></Text>
+ </Control>
+
+ <!-- NetworkCaptureWinPcap y = 74, 74 + 8 + 10 = 92 -->
+ <Control Id="UsbCapture" Type="Text" X="14" Y="92" Width="350" Height="12" Text="{\WixUI_Font_Bold}Wireshark requires USBPcap to capture USB Packets"/>
+ <Control Id="UsbCaptureUsbPcap" Type="Hyperlink" X="20" Y="104" Width="350" Height="11">
+ <Text><![CDATA[<a href="https://desowin.org/usbpcap/">Download USBPcap</a> (experimental)]]></Text>
+ </Control>
+
+ <!-- UsbCaptureUsbPcap y = 104, 104 + 8 + 10 = 122 -->
+ <Control Id="Shortcuts" Type="Text" X="14" Y="122" Width="350" Height="11" Text="{\WixUI_Font_Bold}Create Shortcuts"/><!-- h = static text + label spacing = 8 + 3 -->
+ <Control Id="WiresharkStartMenuCB" Type="CheckBox" X="20" Y="133" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_START_MENU" Text="Wireshark Start Menu Item"><!-- h = 10 + 4 -->
+ <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition>
+ <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition>
+ </Control>
+ <Control Id="WiresharkDesktopIconCB" Type="CheckBox" X="20" Y="147" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_DESKTOP_ICON" Text="Wireshark Desktop Icon">
+ <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition>
+ <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition>
+ </Control>
+ <Control Id="WiresharkQuickLaunchIconCB" Type="CheckBox" X="20" Y="161" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_QUICK_LAUNCH_ICON" Text="Wireshark Quick Launch Icon">
+ <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition>
+ <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition>
+ </Control>
+
+ <!-- WiresharkQuickLaunchIconCB y = 161, 161 + 10 + 10 = 181 -->
+ <Control Id="FileExtensions" Type="Text" X="14" Y="181" Width="350" Height="11" Text="{\WixUI_Font_Bold}Associate File Extensions"/><!-- h = static text + label spacing = 8 + 3 -->
+ <Control Id="FileExtensionsCB" Type="CheckBox" X="20" Y="192" Width="350" Height="14" CheckBoxValue="1" Property="WIRESHARK_FILE_EXTENSIONS" Text="Associate trace file extensions with Wireshark">
+ <Condition Action="enable"><![CDATA[&Fe.Wireshark = 3]]></Condition>
+ <Condition Action="disable"><![CDATA[&Fe.Wireshark <> 3]]></Condition>
+ </Control>
+ <Control Id="FileExtensionsText1" Type="Text" X="20" Y="206" Width="350" Height="11" Transparent="yes" NoPrefix="yes" Text="Extensions include 5vw, acp, apc, atc, bfr, cap, enc, erf, fdc, lcap, mplog, ntar, out,"/>
+ <Control Id="FileExtensionsText2" Type="Text" X="20" Y="217" Width="350" Height="11" Transparent="yes" NoPrefix="yes" Text="pcap, pcapng, pkt, rf5, snoop, syc, tpc, tr1, trace, trc, vwr, wpc, and wpz."/>
+
+ <Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0"/>
+ <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)"/>
+ <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)"/>
+ <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)">
+ <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish>
+ </Control>
+ </Dialog>
+ </UI>
+ </Fragment>
+</Wix>
diff --git a/packaging/wix/WiresharkWixUI.wxs b/packaging/wix/WiresharkWixUI.wxs
new file mode 100644
index 00000000..e066d198
--- /dev/null
+++ b/packaging/wix/WiresharkWixUI.wxs
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ <copyright file="WixUI_FeatureTree.wxs" company="Outercurve Foundation">
+ Copyright (c) 2004, Outercurve Foundation.
+ This software is released under Microsoft Reciprocal License (MS-RL).
+ The license and further copyright text can be found in the file
+ LICENSE.TXT at the root directory of the distribution.
+ </copyright>
+-->
+
+<!--
+First-time install dialog sequence:
+ - WixUI_WelcomeDlg
+ - WixUI_LicenseAgreementDlg
+ - WixUI_CustomizeDlg
+ - WixUI_VerifyReadyDlg
+ - WixUI_DiskCostDlg
+
+Maintenance dialog sequence:
+ - WixUI_MaintenanceWelcomeDlg
+ - WixUI_MaintenanceTypeDlg
+ - WixUI_CustomizeDlg
+ - WixUI_VerifyReadyDlg
+
+Patch dialog sequence:
+ - WixUI_WelcomeDlg
+ - WixUI_VerifyReadyDlg
+-->
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
+ <Fragment>
+ <UI Id="WiresharkWixUI">
+ <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
+ <TextStyle Id="WixUI_Font_Bold" FaceName="Tahoma" Size="8" Bold="yes"/>
+ <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
+ <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />
+
+ <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
+ <Property Id="WixUI_Mode" Value="FeatureTree" />
+
+ <DialogRef Id="ErrorDlg" />
+ <DialogRef Id="FatalError" />
+ <DialogRef Id="FilesInUse" />
+ <DialogRef Id="MsiRMFilesInUse" />
+ <DialogRef Id="PrepareDlg" />
+ <DialogRef Id="ProgressDlg" />
+ <DialogRef Id="ResumeDlg" />
+ <DialogRef Id="UserExit" />
+
+ <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>
+
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">NOT Installed</Publish>
+ <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg">Installed AND PATCH</Publish>
+
+ <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
+ <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="CustomizeDlg">LicenseAccepted = "1"</Publish>
+
+ <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="1">Installed</Publish>
+ <Publish Dialog="CustomizeDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg" Order="2">NOT Installed</Publish>
+ <Publish Dialog="CustomizeDlg" Control="Next" Event="NewDialog" Value="WiresharkOptionsDlg">1</Publish>
+
+ <Publish Dialog="WiresharkOptionsDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ <Publish Dialog="WiresharkOptionsDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">1</Publish>
+
+ <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WiresharkOptionsDlg">1</Publish>
+ <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+ <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">NOT WIXUI_DONTVALIDATEPATH</Publish>
+ <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[NOT WIXUI_DONTVALIDATEPATH AND WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
+ <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4">WIXUI_DONTVALIDATEPATH OR WIXUI_INSTALLDIR_VALID="1"</Publish>
+ <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
+ <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>
+
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="CustomizeDlg" Order="1">NOT Installed OR WixUI_InstallMode = "Change"</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed AND NOT PATCH</Publish>
+ <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg" Order="3">Installed AND PATCH</Publish>
+
+ <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>
+
+ <Publish Dialog="MaintenanceTypeDlg" Control="ChangeButton" Event="NewDialog" Value="CustomizeDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
+ <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>
+ </UI>
+
+ <UIRef Id="WixUI_Common" />
+ </Fragment>
+</Wix>
diff --git a/packaging/wix/banner.bmp b/packaging/wix/banner.bmp
new file mode 100644
index 00000000..10ab9e60
--- /dev/null
+++ b/packaging/wix/banner.bmp
Binary files differ
diff --git a/packaging/wix/banner.svg b/packaging/wix/banner.svg
new file mode 100644
index 00000000..4bacfe5a
--- /dev/null
+++ b/packaging/wix/banner.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="493"
+ height="58"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="banner.svg"
+ viewBox="0 0 493 58"
+ inkscape:export-filename="/tmp/banner.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.8356998"
+ inkscape:cx="246.5"
+ inkscape:cy="29"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="931"
+ inkscape:window-height="683"
+ inkscape:window-x="398"
+ inkscape:window-y="899"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-994.36218)">
+ <image
+ xlink:href="../../image/wsiconinst48.png"
+ width="48"
+ height="48"
+ preserveAspectRatio="none"
+ id="image4971"
+ x="440"
+ y="999.36218" />
+ </g>
+</svg>
diff --git a/packaging/wix/dialog.bmp b/packaging/wix/dialog.bmp
new file mode 100644
index 00000000..f6a704a3
--- /dev/null
+++ b/packaging/wix/dialog.bmp
Binary files differ
diff --git a/packaging/wix/dialog.svg b/packaging/wix/dialog.svg
new file mode 100644
index 00000000..1754c805
--- /dev/null
+++ b/packaging/wix/dialog.svg
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="500"
+ height="314"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="dialog.svg"
+ viewBox="0 0 500 314"
+ inkscape:export-filename="/tmp/dialog.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.824"
+ inkscape:cx="248.78641"
+ inkscape:cy="157"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="931"
+ inkscape:window-height="683"
+ inkscape:window-x="251"
+ inkscape:window-y="882"
+ inkscape:window-maximized="0" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-738.36218)">
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#babdb6;fill-opacity:1;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4907"
+ width="163"
+ height="313"
+ x="0.5"
+ y="738.86218" />
+ <image
+ xlink:href="../../image/wsiconinst128.png"
+ width="128"
+ height="128"
+ preserveAspectRatio="none"
+ id="image4904"
+ x="18"
+ y="756.36218" />
+ <rect
+ y="738.86218"
+ x="0.5"
+ height="313"
+ width="163"
+ id="rect4690"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#babdb6;fill-opacity:0.49723756;fill-rule:nonzero;stroke:#eeeeec;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ </g>
+</svg>
diff --git a/packaging/wix/windeployqt-to-wix.ps1 b/packaging/wix/windeployqt-to-wix.ps1
new file mode 100644
index 00000000..a1696434
--- /dev/null
+++ b/packaging/wix/windeployqt-to-wix.ps1
@@ -0,0 +1,165 @@
+# windeployqt-to-wix
+#
+# Windeployqt-to-wix - Convert the output of windeployqt to an equivalent set of
+# Wix file and component statements.
+#
+# Copyright 2016 Michael Mann
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+#requires -version 2
+
+<#
+.SYNOPSIS
+Creates Wix components required for Qt packaging.
+
+.DESCRIPTION
+This script creates n Wix-compatible include file based on the output of
+windeployqt. If Qt is present, version 5.3 or later is required.
+Otherwise a dummy file will be created.
+
+If building with Qt, QMake must be in your PATH.
+
+.PARAMETER Executable
+The path to a Qt application. It will be examined for dependent DLLs.
+
+.PARAMETER FilePath
+Output filename.
+
+.INPUTS
+-Executable Path to the Qt application.
+-FilePath Output Wix include file.
+
+.OUTPUTS
+Wix file required to package supporting DLLs.
+
+.EXAMPLE
+C:\PS> .\windeployqt-to-wix.ps1 windeployqt.exe ..\..\staging\wireshark.exe qt-dll-manifest.wxs
+#>
+
+Param(
+ [Parameter(Mandatory=$true, Position=0)]
+ [String] $Executable,
+
+ [Parameter(Position=1)]
+ [String] $FilePath = "qt-dll-manifest.wxs"
+)
+
+
+try {
+ $qtVersion = [version](qmake -query QT_VERSION)
+ $wixComponents = "<Wix xmlns=`"http://schemas.microsoft.com/wix/2006/wi`">
+<?include InputPaths.wxi ?>
+"
+ $wixComponents += @("<!-- Qt version " + $qtVersion ; "-->
+")
+
+ if ($qtVersion -lt "5.3") {
+ Throw "Qt " + $qtVersion + " found. 5.3 or later is required."
+ }
+
+ # windeployqt lists translation files that it don't exist (e.g.
+ # qtbase_ar.qm), so we handle those by hand.
+ # https://bugreports.qt.io/browse/QTBUG-65974
+ $wdqtList = windeployqt `
+ --release `
+ --no-compiler-runtime `
+ --no-translations `
+ --list relative `
+ $Executable
+
+ $dllPath = Split-Path -Parent $Executable
+
+ $dllList = " <Fragment>
+ <DirectoryRef Id=`"INSTALLFOLDER`">
+"
+ $dirList = ""
+ $currentDir = ""
+ $startDirList = " <Fragment>
+ <DirectoryRef Id=`"INSTALLFOLDER`">
+"
+ $endDirList = " </Directory>
+ </DirectoryRef>
+ </Fragment>
+"
+ $currentDirList = $startDirList
+
+ $componentGroup = " <Fragment>
+ <ComponentGroup Id=`"CG.QtDependencies`">
+"
+ foreach ($entry in $wdqtList) {
+ $dir = Split-Path -Parent $entry
+ if ($dir) {
+ if ($dir -ne $currentDir) {
+ if ($currentDir -ne "") { # for everything but first directory found
+ $currentDirList += $endDirList
+
+ # Previous directory complete, add to list
+ $dirList += $currentDirList
+ }
+
+ $currentDirList = $startDirList + " <Directory Id=`"dir$dir`" Name=`"$dir`">
+ "
+
+ $currentDir = $dir
+ }
+
+ $wix_name = $entry -replace "[\\|\.]", "_"
+ $currentDirList += " <Component Id=`"cmp$wix_name`" Guid=`"*`">
+ <File Id=`"fil$wix_name`" KeyPath=`"yes`" Source=`"`$(var.Staging.Dir)\$entry`" />
+ </Component>
+"
+ $componentGroup += " <ComponentRef Id=`"cmp$wix_name`" />
+"
+ } else {
+
+ $dllList += " <Component Id=`"cmp$entry`" Guid=`"*`">
+ <File Id=`"fil$entry`" KeyPath=`"yes`" Source=`"`$(var.Staging.Dir)\$entry`" />
+ </Component>
+"
+ $componentGroup += " <ComponentRef Id=`"cmp$entry`" />
+"
+ }
+ }
+
+ #finish up the last directory
+ $currentDirList += $endDirList
+ $dirList += $currentDirList
+
+ $dllList += " </DirectoryRef>
+ </Fragment>
+"
+ $componentGroup += " </ComponentGroup>
+ </Fragment>
+"
+
+ $wixComponents += $dllList + $dirList + $componentGroup
+
+ $wixComponents += @"
+</Wix>
+"@
+
+}
+
+catch {
+
+ $wixComponents = "<?xml version=`"1.0`" encoding=`"utf-8`"?>
+<Include>
+<!--- Qt not configured -->
+</Include>
+"
+
+}
+
+Set-Content $FilePath @"
+<?xml version=`"1.0`" encoding=`"utf-8`"?>
+<!--
+ Automatically generated by $($MyInvocation.MyCommand.Name)
+-->
+"@
+
+Add-Content $FilePath $wixComponents