From ed0dc68db28f21ed22241dfde4a99e04cf495024 Mon Sep 17 00:00:00 2001 From: Dominik Schmidt Date: Wed, 13 Jun 2018 14:06:37 +0200 Subject: [PATCH] Run msi properly and restart client after update --- src/gui/updater/ocupdater.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/gui/updater/ocupdater.cpp b/src/gui/updater/ocupdater.cpp index 78e7021eb..c88eb0cca 100644 --- a/src/gui/updater/ocupdater.cpp +++ b/src/gui/updater/ocupdater.cpp @@ -195,9 +195,18 @@ void OCUpdater::slotStartInstaller() if(updateFile.endsWith(".exe")) { QProcess::startDetached(updateFile, QStringList() << "/S" - << "/launch"); - } else { - QDesktopServices::openUrl(QUrl("file:///" + updateFile, QUrl::TolerantMode)); + << "/launch"); + } else if(updateFile.endsWith(".msi")) { + // When MSIs are installed without gui they cannot launch applications + // as they lack the user context. That is why we need to run the client + // manually here. We wrap the msiexec and client invocation in a powershell + // script because owncloud.exe will be shut down for installation. + // | Out-Null forces powershell to wait for msiexec to finish. + QString command = QString("&{msiexec /norestart /passive /i '%1' | Out-Null ; &'%2'}") + .arg(QDir::toNativeSeparators(updateFile)) + .arg(QDir::toNativeSeparators(QCoreApplication::applicationFilePath())); + + QProcess::startDetached("powershell.exe", QStringList{"-Command", command}); } } -- 2.30.2