diff options
author | Katja Marttila <katja.marttila@qt.io> | 2018-10-10 11:41:05 +0300 |
---|---|---|
committer | Katja Marttila <katja.marttila@qt.io> | 2018-10-10 11:45:52 +0300 |
commit | 70273f9931aad662d1697b142140791a100059f5 (patch) | |
tree | 534f6f71b07af9f95d158e41c2e7425d9373d351 /src/libs/installer/packagemanagercore_p.cpp | |
parent | a03fd459a23e8a72d01f17f529b8c8e5db9baca3 (diff) | |
parent | 9d7cff74d94e3a9ee2beaccfa5aa6a15a93585cb (diff) |
Merge remote-tracking branch 'origin/3.0' into master
Change-Id: Ifaa114464151f5ed84ce47a3368c1521eb17a0be
Diffstat (limited to 'src/libs/installer/packagemanagercore_p.cpp')
-rw-r--r-- | src/libs/installer/packagemanagercore_p.cpp | 72 |
1 files changed, 41 insertions, 31 deletions
diff --git a/src/libs/installer/packagemanagercore_p.cpp b/src/libs/installer/packagemanagercore_p.cpp index 7f0d2f722..827115c88 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]); |