summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@digia.com>2013-06-14 17:13:35 +0200
committerTim Jenssen <tim.jenssen@digia.com>2013-06-14 17:23:38 +0200
commitb322aa4076653ea4dbe7429367483736c35e267d (patch)
tree732db4aa93afc26a9735425aeda6cba2fe9908b0
parent1b4cd05fda315e96fccb828e0197f1f7143fe189 (diff)
add warning output if AdminAuthorization::execute fails on win
Change-Id: I4ce3cc601f4d49bc7e4367cbe021304cd6338057 Reviewed-by: Kai Koehne <kai.koehne@digia.com>
-rw-r--r--src/libs/installer/adminauthorization_win.cpp35
1 files 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;
}