Seite 1 von 1
Externe Datei starten
Verfasst: 23. Februar 2008 20:19
von pfusterschmied
Hallo,
wie kann ich innerhalb einer QT Anwendung eine externe Datei (z.B. exe Datei) starten/ausführen? Ich glaube es funktioniert mit QProcess... Hat jemand damit Erfahrung oder vielleicht ein paar Code Schnimpsel? Mir fehlt diesbezüglich absolut der Durchblick.
Zusatz:
Ist es möglich einen unabhängigen Prozess zu beenden? Bsp.: Man startet 2 QT Anwendungen und kann mit einer Funktion in einer Anwendung die andere schließen?
Hintergrund: Ich möchte ein automatische Updateroutine erstellen, welche im Hauptprogramm gestartet wird und die Hauptanwendung schließt. Anschließend wird einfach die auszuführende Datei der Hauptanwendung ersetzt.
Bitte um Hilfe.
Verfasst: 23. Februar 2008 21:24
von upsala
Ich denke die Dokumentation von QProcess ist für diesen Fall ausreichend.
Bei einem vernünftigen Betriebssystem könnte man die Anwendung ohne Probleme auf der Platte ersetzen... Ansonsten würde ich meine Anwendung so aufbauen, daß das Hauptprogramm nur Bibliotheken nachlädt und die Bibliotheken das eigentlich Programm darstellen. Die sollte man nämlich ohne Probleme austauschen können... (Notfalls lädt man halt immer nur die neueste Version...)
Verfasst: 23. Februar 2008 21:33
von Christian81
Man kann auch unter Windows Executables, die gerade in Benutzung sind, umbenennen. Aber eben nicht löschen
Verfasst: 24. Februar 2008 13:39
von Thorsten
So kannst du ein Programm starten.
Code: Alles auswählen
QString sTool = no_tr("gup.exe");
if (!QFile::exists(sTool)) {
QMessageBox::critical(
this, "Fehler...",
tr("%1 kann nicht gefunden werden.").arg(sTool)
);
return;
}
QProcess::startDetached(sTool);
Ich benutze einfach "gup". Den Updater, den auch Notepad++ verwendet und der unter der LGPL steht.
https://gup-w32.svn.sourceforge.net/svnroot/gup-w32
Danke
Verfasst: 24. Februar 2008 17:16
von pfusterschmied
Hi Thorsten, vielen Dank... genau nach dem habe ich gesucht... Werde ich gleich mal reinschauen.
Eine Frage hätte ich noch: Wie funktioniert das Starten von Linux Programmen. Hab dein Bsp. getestet und die Endung einfach weggelassen. Das Programm wird gefunden startet jedoch nicht.
Weiters soll mein Programm auf Linux und Windoof laufen. Natürlich kann es dabei zu Problemen kommen, spezielle was die Endungen anbelangt.
Muss ich dann 2 Updater Versionen zu Verfügung stellen oder kann ich eine "Weiche" einbauen. Sprich wenn es für win32 kompiliert wird soll jener Programmteil verwendet werden und sonst der andere?
Verfasst: 25. Februar 2008 11:22
von solarix
oder kann ich eine "Weiche" einbauen. Sprich wenn es für win32 kompiliert wird soll jener Programmteil verwendet werden und sonst der andere?
Weitere Varianten in der Header:
qt-xyz/src/corelib/global/qglobal.h
Gelöst
Verfasst: 25. Februar 2008 18:05
von pfusterschmied
Vielen Dank für die rasche und gute Hilfe.
Hab für mich folgede Lösung ausgearbeitet:
Code: Alles auswählen
// Programm starten
#ifdef Q_OS_WIN
QString program = "epm.exe";
#else
QString program = "./epm";
#endif
QProcess *myProcess = new QProcess(this);
myProcess->start(program);
if (myProcess->error()==1 ) {
updateText += "<b>Starten fehlgeschlagen!</b>";
qDebug() << updateText;
}
else
{
this->close();
}