Set permissions for the updater binary after updating it.
This commit is contained in:
		@@ -528,7 +528,12 @@ void MultiMC::installUpdates(const QString &updateFilesDir, bool restartOnFinish
 | 
			
		||||
 | 
			
		||||
	QLOG_INFO() << "Running updater with command" << updaterBinary << args.join(" ");
 | 
			
		||||
 | 
			
		||||
	QProcess::startDetached(updaterBinary, args);
 | 
			
		||||
	QFile::setPermissions(updaterBinary, (QFileDevice::Permission) 0755);
 | 
			
		||||
	if(!QProcess::startDetached(updaterBinary, args))
 | 
			
		||||
	{
 | 
			
		||||
		QLOG_ERROR() << "Failed to start the updater process!";
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Now that we've started the updater, quit MultiMC.
 | 
			
		||||
	MMC->quit();
 | 
			
		||||
 
 | 
			
		||||
@@ -412,6 +412,7 @@ DownloadUpdateTask::processFileLists(NetJob *job,
 | 
			
		||||
					if (isUpdater)
 | 
			
		||||
					{
 | 
			
		||||
						download->setProperty("finalPath", entry.path);
 | 
			
		||||
						download->setProperty("finalPerms", entry.mode);
 | 
			
		||||
						connect(download.get(), &MD5EtagDownload::succeeded, this, &DownloadUpdateTask::directDeployFile);
 | 
			
		||||
					}
 | 
			
		||||
				}
 | 
			
		||||
@@ -549,11 +550,16 @@ void DownloadUpdateTask::directDeployFile(const int index)
 | 
			
		||||
{
 | 
			
		||||
	Md5EtagDownloadPtr download = std::dynamic_pointer_cast<MD5EtagDownload>(m_filesNetJob->operator[](index));
 | 
			
		||||
	const QString finalPath = download->property("finalPath").toString();
 | 
			
		||||
	bool ok = true;
 | 
			
		||||
	int finalMode = download->property("finalPerms").toInt(&ok);
 | 
			
		||||
	if(!ok)
 | 
			
		||||
		finalMode = 0755;
 | 
			
		||||
	QLOG_INFO() << "Replacing" << finalPath << "with" << download->m_output_file.fileName();
 | 
			
		||||
	if (QFile::remove(finalPath))
 | 
			
		||||
	{
 | 
			
		||||
		if (download->m_output_file.copy(finalPath))
 | 
			
		||||
		{
 | 
			
		||||
			QFile::setPermissions(finalPath, (QFileDevice::Permission) finalMode);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user