Только в instead-launcher-0.6.3.new: instead-launcher.desktop Только в instead-launcher-0.6.3.new: instead-launcher_ru.qm diff -ur instead-launcher-0.6.3/mainwindow.cpp instead-launcher-0.6.3.new/mainwindow.cpp --- instead-launcher-0.6.3/mainwindow.cpp 2015-04-21 13:41:28.000000000 +0000 +++ instead-launcher-0.6.3.new/mainwindow.cpp 2015-04-21 14:08:50.372400221 +0000 @@ -8,6 +8,8 @@ #include "global.h" #include "urlresolver.h" #include "aboutwidget.h" +#include +#include class NetGameItem: public QTreeWidgetItem { public: @@ -275,12 +277,15 @@ void MainWindow::playSelectedGame() { + gid_t egid; if (!m_ui->listGames->currentItem()) return; LocalGameItem *item = static_cast(m_ui->listGames->currentItem()); QString gameName = item->info().name(); QString insteadPath = m_ui->lineInsteadPath->text(); QString gamesPath = m_ui->gamesDir->text(); if (gamesPath.right(1) != QDir::separator()) gamesPath += QDir::separator(); + egid = getegid(); + setegid(getgid()); m_process = new QProcess(); QStringList arguments; @@ -303,6 +308,7 @@ connect( m_process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT( processFinished(int, QProcess::ExitStatus)) ); m_process->start(insteadPath, arguments); // may startDetached be better? :) + setegid(egid); } diff -ur instead-launcher-0.6.3/updatewidget.cpp instead-launcher-0.6.3.new/updatewidget.cpp --- instead-launcher-0.6.3/updatewidget.cpp 2015-04-21 13:41:28.000000000 +0000 +++ instead-launcher-0.6.3.new/updatewidget.cpp 2015-04-21 14:08:27.076897636 +0000 @@ -2,6 +2,8 @@ #include "urlresolver.h" #include "config.h" #include "global.h" +#include +#include // -1 ver1 < ver2 // 0 ver1 == ver2 @@ -204,6 +206,7 @@ } QString UpdateWidget::detectInsteadVersion( QString insteadBinary ) { + gid_t egid; QString version = "0"; QDir tempDir = QDir::temp(); tempDir.remove("instead-version/main.lua"); @@ -231,11 +234,14 @@ arguments << "-nostdgames"; arguments << "-gamespath" << QDir::toNativeSeparators(tempDir.absolutePath()); QFileInfo info(insteadBinary); + egid = getegid(); + setegid(getgid()); QProcess process(this); process.setWorkingDirectory( info.path() ); qDebug() << "launch " << insteadBinary << " with args " << arguments; // execute doesn't work for windows instead version, sorry :( process.start( insteadBinary, arguments ); + setegid(egid); process.waitForFinished(20000); qDebug() << "instead finished with exit code " << process.exitCode(); if (process.exitCode() != 123) {