summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/fileutils.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/libs/installer/fileutils.cpp b/src/libs/installer/fileutils.cpp
index 58744b3c2..c142b55f1 100644
--- a/src/libs/installer/fileutils.cpp
+++ b/src/libs/installer/fileutils.cpp
@@ -173,14 +173,23 @@ void QInstaller::removeFiles(const QString &path, bool ignoreErrors)
const QFileInfoList entries = QDir(path).entryInfoList(QDir::AllEntries | QDir::Hidden);
foreach (const QFileInfo &fi, entries) {
if (fi.isSymLink() || fi.isFile()) {
- QFile f(fi.filePath());
- if (!f.remove()) {
- const QString errorMessage = QCoreApplication::translate("QInstaller",
- "Cannot remove file \"%1\": %2").arg(
- QDir::toNativeSeparators(f.fileName()), f.errorString());
- if (!ignoreErrors)
- throw Error(errorMessage);
- qWarning().noquote() << errorMessage;
+ QString filePath = fi.filePath();
+ QFile f(filePath);
+ bool ok = f.remove();
+ if (!ok) { //ReadOnly can prevent removing in Windows. Change permission and try again.
+ const QFile::Permissions permissions = f.permissions();
+ if (!(permissions & QFile::WriteUser)) {
+ ok = f.setPermissions(filePath, permissions | QFile::WriteUser)
+ && f.remove(filePath);
+ }
+ if (!ok) {
+ const QString errorMessage = QCoreApplication::translate("QInstaller",
+ "Cannot remove file \"%1\": %2").arg(
+ QDir::toNativeSeparators(f.fileName()), f.errorString());
+ if (!ignoreErrors)
+ throw Error(errorMessage);
+ qWarning().noquote() << errorMessage;
+ }
}
}
}