From b322aa4076653ea4dbe7429367483736c35e267d Mon Sep 17 00:00:00 2001 From: Tim Jenssen Date: Fri, 14 Jun 2013 17:13:35 +0200 Subject: add warning output if AdminAuthorization::execute fails on win Change-Id: I4ce3cc601f4d49bc7e4367cbe021304cd6338057 Reviewed-by: Kai Koehne --- src/libs/installer/adminauthorization_win.cpp | 35 +++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/libs/installer/adminauthorization_win.cpp b/src/libs/installer/adminauthorization_win.cpp index 20420cef0..d162f9d2d 100644 --- a/src/libs/installer/adminauthorization_win.cpp +++ b/src/libs/installer/adminauthorization_win.cpp @@ -99,6 +99,31 @@ bool AdminAuthorization::hasAdminRights() return isInAdminGroup; } +//copied from qsystemerror.cpp in Qt +static QString windowsErrorString(int errorCode) +{ + QString ret; + wchar_t *string = 0; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + errorCode, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPWSTR)&string, + 0, + NULL); + ret = QString::fromWCharArray(string); + LocalFree((HLOCAL)string); + + if (ret.isEmpty() && errorCode == ERROR_MOD_NOT_FOUND) + ret = QString::fromLatin1("The specified module could not be found."); + + ret.append(QLatin1String(" (0x")); + ret.append(QString::number(uint(errorCode), 16).rightJustified(8, QLatin1Char('0'))); + ret.append(QLatin1String(")")); + + return ret; +} + bool AdminAuthorization::execute(QWidget *, const QString &program, const QStringList &arguments) { DeCoInitializer _; @@ -115,7 +140,13 @@ bool AdminAuthorization::execute(QWidget *, const QString &program, const QStrin qDebug() << QString::fromLatin1("Starting elevated process %1 with arguments: %2.").arg(file, args); ShellExecuteExW(&shellExecuteInfo); - qDebug() << "Finished starting elevated process."; - return GetLastError() == ERROR_SUCCESS; + if (GetLastError() == ERROR_SUCCESS) { + qDebug() << "Finished starting elevated process."; + return true; + } else { + qWarning() << QString::fromLatin1("Error while starting elevated process: %1, " + "Error: %2").arg(program, windowsErrorString(GetLastError())); + } + return false; } -- cgit v1.2.3