summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/packagemanagercore_p.cpp72
1 files changed, 41 insertions, 31 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp
index 78482b411..c20be0b78 100644
--- a/src/libs/installer/packagemanagercore_p.cpp
+++ b/src/libs/installer/packagemanagercore_p.cpp
@@ -141,39 +141,49 @@ static void deferredRename(const QString &oldName, const QString &newName, bool
{
#ifdef Q_OS_WIN
QStringList arguments;
- {
- QTemporaryFile f(QDir::temp().absoluteFilePath(QLatin1String("deferredrenameXXXXXX.vbs")));
- QInstaller::openForWrite(&f);
- f.setAutoRemove(false);
-
- arguments << QDir::toNativeSeparators(f.fileName()) << QDir::toNativeSeparators(oldName)
- << QDir::toNativeSeparators(QFileInfo(oldName).dir().absoluteFilePath(QFileInfo(newName)
- .fileName()));
-
- QTextStream batch(&f);
- batch.setCodec("UTF-16");
- batch << "Set fso = WScript.CreateObject(\"Scripting.FileSystemObject\")\n";
- batch << "Set tmp = WScript.CreateObject(\"WScript.Shell\")\n";
- batch << QString::fromLatin1("file = \"%1\"\n").arg(arguments[2]);
- batch << "on error resume next\n";
-
- batch << "while fso.FileExists(file)\n";
- batch << " fso.DeleteFile(file)\n";
- batch << " WScript.Sleep(1000)\n";
- batch << "wend\n";
- batch << QString::fromLatin1("fso.MoveFile \"%1\", file\n").arg(arguments[1]);
- if (restart) {
- //Restart with same command line arguments as first executable
- QStringList commandLineArguments = QCoreApplication::arguments();
- batch << QString::fromLatin1("tmp.exec \"%1 --updater").arg(arguments[2]);
- //Skip the first argument as that is executable itself
- for (int i = 1; i < commandLineArguments.count(); i++) {
- batch << QString::fromLatin1(" %1").arg(commandLineArguments.at(i));
- }
- batch << QString::fromLatin1("\"\n");
+
+ // Check if .vbs extension can be used for running renaming script. If not, create own extension
+ QString extension = QLatin1String(".vbs");
+ QSettingsWrapper settingRoot(QLatin1String("HKEY_CLASSES_ROOT\\.vbs"), QSettingsWrapper::NativeFormat);
+ if (settingRoot.value(QLatin1String(".")).toString() != QLatin1String("VBSFile")) {
+ extension = QLatin1String(".qtInstaller");
+ QSettingsWrapper settingsUser(QLatin1String("HKEY_CURRENT_USER\\Software\\Classes"), QSettingsWrapper::NativeFormat);
+ QString value = settingsUser.value(extension).toString();
+ if (value != QLatin1String("VBSFile"))
+ settingsUser.setValue(extension, QLatin1String("VBSFile"));
+ }
+ QTemporaryFile f(QDir::temp().absoluteFilePath(QLatin1String("deferredrenameXXXXXX%1")).arg(extension));
+
+ QInstaller::openForWrite(&f);
+ f.setAutoRemove(false);
+
+ arguments << QDir::toNativeSeparators(f.fileName()) << QDir::toNativeSeparators(oldName)
+ << QDir::toNativeSeparators(QFileInfo(oldName).dir().absoluteFilePath(QFileInfo(newName)
+ .fileName()));
+
+ QTextStream batch(&f);
+ batch.setCodec("UTF-16");
+ batch << "Set fso = WScript.CreateObject(\"Scripting.FileSystemObject\")\n";
+ batch << "Set tmp = WScript.CreateObject(\"WScript.Shell\")\n";
+ batch << QString::fromLatin1("file = \"%1\"\n").arg(arguments[2]);
+ batch << "on error resume next\n";
+
+ batch << "while fso.FileExists(file)\n";
+ batch << " fso.DeleteFile(file)\n";
+ batch << " WScript.Sleep(1000)\n";
+ batch << "wend\n";
+ batch << QString::fromLatin1("fso.MoveFile \"%1\", file\n").arg(arguments[1]);
+ if (restart) {
+ //Restart with same command line arguments as first executable
+ QStringList commandLineArguments = QCoreApplication::arguments();
+ batch << QString::fromLatin1("tmp.exec \"%1 --updater").arg(arguments[2]);
+ //Skip the first argument as that is executable itself
+ for (int i = 1; i < commandLineArguments.count(); i++) {
+ batch << QString::fromLatin1(" %1").arg(commandLineArguments.at(i));
}
- batch << "fso.DeleteFile(WScript.ScriptFullName)\n";
+ batch << QString::fromLatin1("\"\n");
}
+ batch << "fso.DeleteFile(WScript.ScriptFullName)\n";
QProcessWrapper::startDetached(QLatin1String("cscript"), QStringList() << QLatin1String("//Nologo")
<< arguments[0]);