Online-Update für Anwendung erstellen

Ninette

Grünschnabel
Hallo,

ich möchte für meine Anwendung ein Online-Update implementieren. Dazu habe ich nun grundlegende Fragen. Wie mache ich es am besten? Meine Anwendung wurde in C++ geschrieben mit dem Visual Studio 6 / 7.
Ich dachte, dass ich dass Online-Update per FTPConnection mache. Ist eine HTTPConnection sinvoller? Das Update muss von Kunde zu Kunde verschieden sein, da der Kunde individuelle Berichte (Reports) besitzt, wazu man die Anwendernummer dann benutzen könnte, um diese dann speziell upzudaten. Jedoch bevor ich mich dann dieser speziellen Sache widme, wollte ich halt generell erst einmal wissen, wie ich die ganze Sache angehen sollte, damit ich kein falschen bzw. schlechten Weg einschlage.
Für jeden Tip bin ich wirklich dankbar.

MfG
 
Also ich würde dir das HTTP-Protokoll empfehlen, weil es im Gegensatz zu FTP eher zugreifbar ist für manche Kunden.
Außerdem musst du dich natürlich um evtl. Proxyeinstellungen kümmern.
Dann musst du natürlich wissen, ob du nur Daten/Content updaten willst, oder auch ein Laufendes Programm.

Im Falle das du das laufende Programm updaten willst, geht das natürlich nicht so einfach da man die .exe ja nicht überschreiben kannst (ich gehe jetzt mal von Windows aus).
Also musst du ein 2. Programm erstellen einen Updater.
Dein Hauptprogramm versucht zunächst dein Updater upzudaten (wenn das nötig ist), dann wird der Updater gestarte und er beendet dein Hauptprogramm beendet. Nun updated er dann dein Hauptprogramm und Nutzdaten.
Zuletzt kannst du den Updater beenden und dein Hauptprogramm wieder beenden.

Daniel
 
Also da ich mein Hauptprogramm updaten will und damit auch die EXE, werde ich ein 2. Programm einen Updater erstellen. Diesen rufe ich dann mit folgendem Code auf:

Code:
{
	char cRunPath[250];
	char cRun[350];
	_getcwd( cRunPath, 250 );
	if( cRunPath[strlen(cRunPath)-1]!='\\' ) strcat( cRunPath, "\\");

	//MeinUpdate öffnen
	strcpy( cRun, cRunPath );
	strcat( cRun, "meine.exe" );
	if( _execl( cRun, cRun )<0 ) {
		MessageBox("meine.exe befindet sich nicht im Hauptprogramm-Pfad!", "Update nicht möglich", MB_ICONINFORMATION);
	}
}

Nun wird ja der Updater geöffnet und dann erscheint eine MessageBox, dass das Hauptprogramm jetzt geschlossen wird.
Nun weiss ich nicht, wie ich das Hauptprogramm und damit den Prozess schliesse.
 
Je nach Programmtyp musst du nur dein Hauptfenster schliessen (MFC, Win32 API) bzw. die äusserste Abbruchbedingung erfüllen. Auf jeden Fall würde ich aus dem Programm sauber rauszugehen, nicht sowas Brutales wie exit aufrufen.
 
Eventuell geöffnete Dateien schliessen, System-Ressourcen freigeben, veränderte Einstellungen speichern, da gibt's ne ganze Menge.

Ist ja schön, dass die Betriebssysteme hinter einem herräumen, das tun sie deshalb, weil zuviele Programmierer einfach nur exit reingeklebt haben. Ich finde aber, dass das sauber beenden mit Freigeben ALLER Ressourcen und Speicher, den man sich gekrallt hat, sich einfach so gehört.
 
Zuletzt bearbeitet:
Thx für die Erklärung, hast da natürlich recht das man seine Ressourcen wieder freigeben sollte... hatte gedacht beim exit(0); wird auch jeder Destruktor aufgerufen... aber jetzt bin ich schlauer ;)
 
Zurück