#ifdef WINDOWS #define ClientName "client.exe" #define PathSlash "\\" #else #define ClientName "client" #define PathSlash "/" #endif #include #include #include #include #include "Logger.h" using std::string; int main(int argc, char* argv[]) { Logger::Info("Starting updater application\n"); string path = argv[0]; size_t p = path.find_last_of(PathSlash); QString dir = QString::fromStdString(path.substr(0, p)); Logger::Trace("Application path: %s\n", dir.toStdString().c_str()); // check if whether client.bin.latest exists // it shoultd be renamed to client.exe (on Windows) ot just client (on Linux) QFileInfo binInfo(dir + PathSlash +"client.bin.latest"); if (! binInfo.exists()) { Logger::Fatal("New client version not present.\n"); Logger::Fatal("Terminating.\n"); return -1; } // remove old client binary QFile client(dir + PathSlash + ClientName); if (client.exists()) { Logger::Trace("Removing old client executable\n"); if (! client.remove()) { Logger::Fatal("Can't remove %s\n", client.fileName().toStdString().c_str()); return -1; } } else { Logger::Warn("Client executable is absent\n"); } if (QFile::rename(dir + PathSlash + "client.bin.latest", dir + PathSlash + ClientName)) { Logger::Info("Client successfully updated\n"); } else { Logger::Fatal("Can't rename 'client.bin.latest'\n"); return -1; } // starting client process QString program(dir + PathSlash + ClientName); if (! QProcess::startDetached(program)) { Logger::Fatal("Failed to start client application\n"); return -1; } return 0; }