diff --git a/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp b/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp index babad9397..08b485773 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/configfile.cpp @@ -974,29 +974,7 @@ OperationStep CConfigFile::getInstallNextStep() const } // current installer more recent than installed one - switch (compareInstallersVersion()) - { - // current installer more recent, copy it - case 1: return CopyInstaller; - - // current installer older, launch the more recent installer - case -1: return LaunchInstalledInstaller; - - // continue only if 0 and launched Installer is the installed one - default: - { -#ifdef Q_OS_WIN32 - QString tempPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation); - - // check if launched from TEMP directory - bool rightPath = getInstallerCurrentDirPath().startsWith(tempPath); -#else - bool rightPath = false; -#endif - - if (!rightPath && getInstallerCurrentFilePath() != getInstallerInstalledFilePath() && QFile::exists(getInstallerInstalledFilePath())) return LaunchInstalledInstaller; - } - } + if (compareInstallersVersion() == 1) return CopyInstaller; // no default profile if (profile.id.isEmpty()) @@ -1039,6 +1017,31 @@ OperationStep CConfigFile::getInstallNextStep() const } } + // current installer more recent than installed one + switch (compareInstallersVersion()) + { + // current installer more recent, copy it + case 1: break; + + // current installer older, launch the more recent installer + case -1: return LaunchInstalledInstaller; + + // continue only if 0 and launched Installer is the installed one + default: + { +#ifdef Q_OS_WIN32 + QString tempPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation); + + // check if launched from TEMP directory + bool rightPath = getInstallerCurrentDirPath().startsWith(tempPath); +#else + bool rightPath = false; +#endif + + if (!rightPath && getInstallerCurrentFilePath() != getInstallerInstalledFilePath() && QFile::exists(getInstallerInstalledFilePath())) return LaunchInstalledInstaller; + } + } + return Done; } diff --git a/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp b/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp index 470790d4a..b6ca5c4e9 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/filescopier.cpp @@ -75,8 +75,18 @@ void CFilesCopier::getFile(const QFileInfo &fileInfo, const QDir &srcDir, FilesT // full path to file QString fullPath = fileInfo.absoluteFilePath(); + QString relativePath = srcDir.relativeFilePath(fullPath); + + QFileInfo relativeFileInfo(relativePath); + + // correct absolute path + if (relativeFileInfo.isAbsolute()) + { + relativePath = relativeFileInfo.fileName(); + } + // full path where to copy file - QString dstPath = m_destinationDirectory + "/" + srcDir.relativeFilePath(fullPath); + QString dstPath = m_destinationDirectory + "/" + relativePath; if (fileInfo.isDir()) { diff --git a/code/ryzom/tools/client/ryzom_installer/src/main.cpp b/code/ryzom/tools/client/ryzom_installer/src/main.cpp index 4982fcad8..6b664ace0 100644 --- a/code/ryzom/tools/client/ryzom_installer/src/main.cpp +++ b/code/ryzom/tools/client/ryzom_installer/src/main.cpp @@ -241,6 +241,8 @@ int main(int argc, char *argv[]) step = config.getInstallNextStep(); } + + bool restartInstaller = false; if (step != Done) { @@ -254,20 +256,25 @@ int main(int argc, char *argv[]) if (step == LaunchInstalledInstaller) { -#ifndef _DEBUG // restart more recent installed Installer version - if (QProcess::startDetached(config.getInstallerInstalledFilePath())) return 0; -#endif + restartInstaller = true; } else if (step == Done) { #if defined(Q_OS_WIN) && !defined(_DEBUG) // restart Installer, so it could be copied in TEMP and allowed to update itself - if (QProcess::startDetached(config.getInstallerInstalledFilePath())) return 0; + restartInstaller = true; #endif } } + if (restartInstaller) + { +#ifndef _DEBUG + if (QProcess::startDetached(config.getInstallerInstalledFilePath())) return 0; +#endif + } + CMainWindow mainWindow; mainWindow.show();