diff options
Diffstat (limited to 'src/libs/installer/fileutils.cpp')
-rw-r--r-- | src/libs/installer/fileutils.cpp | 25 |
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; + } } } } |