qtcdebugger: Overwriting other versions when registering.

Reviewed-by: Friedemann Kleint
This commit is contained in:
Robert Loehning
2010-01-14 13:07:05 +01:00
parent c47f1e3a7f
commit 4665719194

View File

@@ -456,11 +456,12 @@ static bool registerDebuggerKey(const WCHAR *key,
// Save old key, which might be missing // Save old key, which might be missing
QString oldDebugger; QString oldDebugger;
registryReadStringKey(handle, debuggerRegistryValueNameC, &oldDebugger, errorMessage); registryReadStringKey(handle, debuggerRegistryValueNameC, &oldDebugger, errorMessage);
if (oldDebugger.contains(QLatin1String(applicationFileC), Qt::CaseInsensitive)) { if (!oldDebugger.compare(call, Qt::CaseInsensitive)) {
*errorMessage = QLatin1String("The program is already registered as post mortem debugger."); *errorMessage = QLatin1String("The program is already registered as post mortem debugger.");
break; break;
} }
if (!registryWriteStringKey(handle, debuggerRegistryDefaultValueNameC, oldDebugger, errorMessage)) if (!(oldDebugger.contains(QLatin1String(applicationFileC), Qt::CaseInsensitive)
|| registryWriteStringKey(handle, debuggerRegistryDefaultValueNameC, oldDebugger, errorMessage)))
break; break;
if (debug) if (debug)
qDebug() << "registering self as " << call; qDebug() << "registering self as " << call;
@@ -485,7 +486,9 @@ bool install(QString *errorMessage)
} }
// Unregister helper: Restore the original debugger key // Unregister helper: Restore the original debugger key
static bool unregisterDebuggerKey(const WCHAR *key, QString *errorMessage) static bool unregisterDebuggerKey(const WCHAR *key,
const QString &call,
QString *errorMessage)
{ {
HKEY handle = 0; HKEY handle = 0;
bool success = false; bool success = false;
@@ -494,8 +497,7 @@ static bool unregisterDebuggerKey(const WCHAR *key, QString *errorMessage)
break; break;
QString debugger; QString debugger;
registryReadStringKey(handle, debuggerRegistryValueNameC, &debugger, errorMessage); registryReadStringKey(handle, debuggerRegistryValueNameC, &debugger, errorMessage);
if (!(debugger.isEmpty() if (!debugger.isEmpty() && debugger.compare(call, Qt::CaseInsensitive)) {
|| debugger.contains(QLatin1String(applicationFileC), Qt::CaseInsensitive))) {
*errorMessage = QLatin1String("The program is not registered as post mortem debugger."); *errorMessage = QLatin1String("The program is not registered as post mortem debugger.");
break; break;
} }
@@ -522,10 +524,10 @@ static bool unregisterDebuggerKey(const WCHAR *key, QString *errorMessage)
bool uninstall(QString *errorMessage) bool uninstall(QString *errorMessage)
{ {
if (!unregisterDebuggerKey(debuggerRegistryKeyC, errorMessage)) if (!unregisterDebuggerKey(debuggerRegistryKeyC, debuggerCall(), errorMessage))
return false; return false;
#ifdef Q_OS_WIN64 #ifdef Q_OS_WIN64
if (!unregisterDebuggerKey(debuggerWow32RegistryKeyC, errorMessage)) if (!unregisterDebuggerKey(debuggerWow32RegistryKeyC, debuggerCall(QLatin1String("-wow")), errorMessage))
return false; return false;
#endif #endif
return true; return true;