Check running processes at startup.

Retrieve the processes running at startup and compare with a list of
potentially problematic ones.  Right now this is Itunes which is known to be
able to cause problems when trying to install the bootloader on an Ipod. No
user notification yet.

This adds the implementation for Windows.

Change-Id: I5ce8a85da52e0ed8f523b5ae6fb5d8f14f6a14c9
This commit is contained in:
Dominik Riebeling 2012-01-22 22:23:49 +01:00
parent 8a3af26364
commit 250a73317f
3 changed files with 58 additions and 0 deletions

View file

@ -51,6 +51,7 @@
#include <windows.h> #include <windows.h>
#include <setupapi.h> #include <setupapi.h>
#include <winioctl.h> #include <winioctl.h>
#include <tlhelp32.h>
#endif #endif
#if defined(Q_OS_MACX) #if defined(Q_OS_MACX)
#include <CoreFoundation/CoreFoundation.h> #include <CoreFoundation/CoreFoundation.h>
@ -606,3 +607,58 @@ QStringList Utils::mountpoints()
} }
/** Check if a process with a given name is running
* @param names list of names to check
* @return list of detected processes.
*/
QStringList Utils::findRunningProcess(QStringList names)
{
QStringList processlist;
QStringList found;
#if defined(Q_OS_WIN32)
HANDLE hdl;
PROCESSENTRY32 entry;
bool result;
hdl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if(hdl == INVALID_HANDLE_VALUE) {
qDebug() << "[Utils] CreateToolhelp32Snapshot failed.";
return found;
}
entry.dwSize = sizeof(PROCESSENTRY32);
entry.szExeFile[0] = '\0';
if(!Process32First(hdl, &entry)) {
qDebug() << "[Utils] Process32First failed.";
return found;
}
processlist.append(QString::fromWCharArray(entry.szExeFile));
do {
entry.dwSize = sizeof(PROCESSENTRY32);
entry.szExeFile[0] = '\0';
result = Process32Next(hdl, &entry);
if(result) {
processlist.append(QString::fromWCharArray(entry.szExeFile));
}
} while(result);
CloseHandle(hdl);
qDebug() << processlist;
#endif
#if defined(Q_OS_MACX)
#endif
// check for given names in list of processes
for(int i = 0; i < names.size(); ++i) {
#if defined(Q_OS_WIN32)
// the process name might be truncated. Allow the extension to be partial.
int index = processlist.indexOf(QRegExp(names.at(i) + "(\\.(e(x(e?)?)?)?)?"));
#else
int index = processlist.indexOf(names.at(i));
#endif
if(index != -1) {
found.append(processlist.at(index));
}
}
qDebug() << "[Utils] Found listed processes running:" << found;
return found;
}

View file

@ -49,6 +49,7 @@ public:
static QStringList mountpoints(void); static QStringList mountpoints(void);
static QString resolveDevicename(QString path); static QString resolveDevicename(QString path);
static QString resolveMountPoint(QString device); static QString resolveMountPoint(QString device);
static QStringList findRunningProcess(QStringList names);
}; };
#endif #endif

View file

@ -170,6 +170,7 @@ RbUtilQt::RbUtilQt(QWidget *parent) : QMainWindow(parent)
#else #else
connect(ui.actionInstall_Rockbox_Utility_on_player, SIGNAL(triggered()), this, SLOT(installPortable())); connect(ui.actionInstall_Rockbox_Utility_on_player, SIGNAL(triggered()), this, SLOT(installPortable()));
#endif #endif
Utils::findRunningProcess(QStringList("iTunes"));
} }