diff options
author | Gerald Combs <gerald@wireshark.org> | 2013-02-20 01:19:42 +0000 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2013-02-20 01:19:42 +0000 |
commit | bd4cffae586b5207aae62dcb8a55690b23e42dd0 (patch) | |
tree | 5f89150713a57eb73ee3e5721481a6ac4637eb27 | |
parent | cf1070b4b12e97a7b2c233bdc966e7ff3972acb5 (diff) |
When any of our executables start on Windows create or open a "Wireshark
is running" mutex. Have the NSIS installer check for this mutex and ask
the user to close Wireshark if it's found. While not perfect this makes
the WinSparkle update process much less annoying.
svn path=/trunk/; revision=47758
-rw-r--r-- | capinfos.c | 7 | ||||
-rw-r--r-- | dumpcap.c | 3 | ||||
-rw-r--r-- | editcap.c | 2 | ||||
-rw-r--r-- | mergecap.c | 1 | ||||
-rw-r--r-- | packaging/nsis/wireshark.nsi | 11 | ||||
-rw-r--r-- | randpkt.c | 1 | ||||
-rw-r--r-- | rawshark.c | 1 | ||||
-rw-r--r-- | text2pcap.c | 1 | ||||
-rw-r--r-- | tshark.c | 1 | ||||
-rw-r--r-- | ui/gtk/main.c | 3 | ||||
-rw-r--r-- | ui/qt/main.cpp | 1 | ||||
-rw-r--r-- | wsutil/file_util.c | 7 | ||||
-rw-r--r-- | wsutil/file_util.h | 7 | ||||
-rw-r--r-- | wsutil/libwsutil.def | 1 |
14 files changed, 41 insertions, 6 deletions
diff --git a/capinfos.c b/capinfos.c index 96d7de998a..246afb3443 100644 --- a/capinfos.c +++ b/capinfos.c @@ -155,7 +155,7 @@ static gboolean cap_file_hashes = TRUE; /* Calculate file hashes */ #ifdef USE_GOPTION static gboolean cap_help = FALSE; static gboolean table_report = FALSE; - + static GOptionEntry general_entries[] = { /* General */ @@ -490,7 +490,7 @@ print_stats(const gchar *filename, capture_info *cf_info) } if (cap_packet_size) printf ("Average packet size: %.2f bytes\n", cf_info->packet_size); if (cf_info->times_known) { - if (cap_packet_rate) + if (cap_packet_rate) print_value("Average packet rate: ", 2, " packets/sec", cf_info->packet_rate); } #ifdef HAVE_LIBGCRYPT @@ -1022,6 +1022,7 @@ main(int argc, char *argv[]) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #endif /* _WIN32 */ /* @@ -1044,7 +1045,7 @@ main(int argc, char *argv[]) /* Process the options */ #ifdef USE_GOPTION ctx = g_option_context_new(" <infile> ... - print information about capture file(s)"); - general_grp = g_option_group_new("gen", "General infos:", + general_grp = g_option_group_new("gen", "General infos:", "Show general options", NULL, NULL); size_grp = g_option_group_new("size", "Size infos:", "Show size options", NULL, NULL); @@ -4177,9 +4177,8 @@ main(int argc, char *argv[]) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); -#endif /* _WIN32 */ + create_app_running_mutex(); -#ifdef _WIN32 /* * Initialize our DLL search path. MUST be called before LoadLibrary * or g_module_open. @@ -65,6 +65,7 @@ #endif #ifdef _WIN32 +#include <wsutil/file_util.h> #include <wsutil/unicode-utils.h> #include <process.h> /* getpid */ #ifdef HAVE_WINSOCK2_H @@ -870,6 +871,7 @@ main(int argc, char *argv[]) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #endif /* _WIN32 */ /* diff --git a/mergecap.c b/mergecap.c index 685b0da686..d42b858cde 100644 --- a/mergecap.c +++ b/mergecap.c @@ -223,6 +223,7 @@ main(int argc, char *argv[]) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #endif /* _WIN32 */ /* Process the options first */ diff --git a/packaging/nsis/wireshark.nsi b/packaging/nsis/wireshark.nsi index d432933e1b..d7d2f69609 100644 --- a/packaging/nsis/wireshark.nsi +++ b/packaging/nsis/wireshark.nsi @@ -210,6 +210,17 @@ Function .onInit ${EndIf} !endif +; See if Wireshark is running +; http://nsis.sourceforge.net/Check_whether_your_application_is_running +checkRunning: +System::Call 'kernel32::OpenMutex(i 0x100000, b 0, t "${PROGRAM_NAME}-is-running-{9CA78EEA-EA4D-4490-9240-FC01FCEF464B}") i .R0' + IntCmp $R0 0 notRunning + System::Call 'kernel32::CloseHandle(i $R0)' + ; You'd better go catch it. + MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "${PROGRAM_NAME} or one is associated programs is running. Please close it first" /SD IDCANCEL IDRETRY checkRunning + Quit +notRunning: + ; Copied from http://nsis.sourceforge.net/Auto-uninstall_old_before_installing_new ReadRegStr $OLD_UNINSTALLER HKLM \ "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PROGRAM_NAME}" \ @@ -512,6 +512,7 @@ main(int argc, char **argv) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #endif /* _WIN32 */ while ((opt = getopt(argc, argv, "b:c:ht:")) != -1) { diff --git a/rawshark.c b/rawshark.c index 28275f23b8..79ba938736 100644 --- a/rawshark.c +++ b/rawshark.c @@ -472,6 +472,7 @@ main(int argc, char *argv[]) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #endif /* _WIN32 */ /* diff --git a/text2pcap.c b/text2pcap.c index 29af045fa4..14bc419118 100644 --- a/text2pcap.c +++ b/text2pcap.c @@ -1369,6 +1369,7 @@ parse_options (int argc, char *argv[]) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #endif /* _WIN32 */ /* Scan CLI parameters */ @@ -950,6 +950,7 @@ main(int argc, char *argv[]) #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #if !GLIB_CHECK_VERSION(2,31,0) g_thread_init(NULL); #endif diff --git a/ui/gtk/main.c b/ui/gtk/main.c index acc69e4ff1..313e52a2c0 100644 --- a/ui/gtk/main.c +++ b/ui/gtk/main.c @@ -2224,6 +2224,7 @@ main(int argc, char *argv[]) setlocale(LC_ALL, ""); #ifdef _WIN32 arg_list_utf_16to8(argc, argv); + create_app_running_mutex(); #endif /* _WIN32 */ /* @@ -3217,7 +3218,7 @@ main(int argc, char *argv[]) #endif software_update_init(); - + /* we'll enter the GTK loop now and hand the control over to GTK ... */ gtk_main(); /* ... back from GTK, we're going down now! */ diff --git a/ui/qt/main.cpp b/ui/qt/main.cpp index cb1dc3acb3..46533369c6 100644 --- a/ui/qt/main.cpp +++ b/ui/qt/main.cpp @@ -528,6 +528,7 @@ int main(int argc, char *argv[]) int status; //initialize language ! + create_app_running_mutex(); QString locale = QLocale::system().name(); diff --git a/wsutil/file_util.c b/wsutil/file_util.c index c9186c423d..1efc7cc39c 100644 --- a/wsutil/file_util.c +++ b/wsutil/file_util.c @@ -614,3 +614,10 @@ getenv_utf8(const char *varname) return envvar; } + +/** Create or open a "Wireshark is running" mutex. + */ +#define WIRESHARK_IS_RUNNING_UUID "9CA78EEA-EA4D-4490-9240-FC01FCEF464B" +void create_app_running_mutex() { + CreateMutex(NULL, FALSE, _T("Wireshark-is-running-{") _T(WIRESHARK_IS_RUNNING_UUID) _T("}")); +} diff --git a/wsutil/file_util.h b/wsutil/file_util.h index 4710aa6a15..af5f94d996 100644 --- a/wsutil/file_util.h +++ b/wsutil/file_util.h @@ -113,6 +113,7 @@ gboolean ws_init_dll_search_path(); */ void *ws_load_library(gchar *library_name); + /** Load a DLL using g_module_open. * Only the system and program directories are searched. * @@ -127,6 +128,12 @@ GModule *ws_module_open(gchar *module_name, GModuleFlags flags); */ extern char *getenv_utf8(const char *varname); +/** Create or open a "Wireshark is running" mutex. + * Create or open a mutex which signals that Wireshark or its associated + * executables is running. Used by the installer to test for a running application. + */ +extern void create_app_running_mutex(); + #else /* _WIN32 */ /* diff --git a/wsutil/libwsutil.def b/wsutil/libwsutil.def index 49b9a39286..bc30c3ab36 100644 --- a/wsutil/libwsutil.def +++ b/wsutil/libwsutil.def @@ -52,6 +52,7 @@ crc32_mpeg2_seed crc_drm ; file_util.c +create_app_running_mutex getenv_utf8 ws_stdio_fopen ws_stdio_freopen |