Externe Datei starten

Alles rund um die Programmierung mit Qt
Antworten
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Externe Datei starten

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...)
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Man kann auch unter Windows Executables, die gerade in Benutzung sind, umbenennen. Aber eben nicht löschen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Thorsten
Beiträge: 55
Registriert: 29. Dezember 2004 22:47
Wohnort: Aachen

Beitrag 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
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Danke

Beitrag 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?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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?

Code: Alles auswählen

#ifdef Q_OS_WIN
  ....
#else
  ....
#endif
Weitere Varianten in der Header:
qt-xyz/src/corelib/global/qglobal.h
pfusterschmied
Beiträge: 91
Registriert: 14. Mai 2007 11:19
Wohnort: Salzburg
Kontaktdaten:

Gelöst

Beitrag 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();
	}
Antworten