| Autor |
Beitrag |
olliterski
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Mo 05.01.04 22:57
Hi,
ich hab grade folgende Idee versucht umzusetzen:
Wenn mein Proggie startet, geht es automatisch ins Internet und sucht auf meinem Server ein Programmupdate.
Wenn eins da ist, wird es runter geladen und ersetzt gleich die alte Exe. Um einen eventuellen Absturz vorzubeugen wird das Programm geschlossen und muss vom User neu gestartet werden.
Zur verfügung steht mir nur die URL, es sollen keine extraeinstellungen gemacht werden etc. (Verwendung von URLMon und Shellapi müßte dafür reichen).
Hat jemand ne Idee wie man das hinkriegt?
Ich fabriziere hier zur Zeit nur Schrott!!
Viele Grüße
Oliver
_________________ Viele Grüße
Oliver
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 06.01.04 08:36
Wie willst du nur anhand einer URL feststellen ob es eine neue EXE ist?
Ich hab das immer so gemacht:
Eine Textdatei auf dem Server angelegt.
1. Zeile: Version
2. Zeile: URL zur EXE
Nun lädst du beim Update prüfen diese Datei und überprüfst ob die version neuer ist, wenn ja dann von zeile 2 runterladen...
ich hoffe das hilft dir etwas
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
olliterski 
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Di 06.01.04 09:19
| Chatfix hat folgendes geschrieben: | | Wie willst du nur anhand einer URL feststellen ob es eine neue EXE ist? |
Gute Frage - nächste Frage ! ;o) Hatte ich jetzt noch garnicht drüber nachgedacht!
| Chatfix hat folgendes geschrieben: | ...Nun lädst du beim Update prüfen diese Datei und überprüfst ob die version neuer ist, wenn ja dann von zeile 2 runterladen...
ich hoffe das hilft dir etwas |
Gute Idee, hilft mir auch weiter, aber derzeit nur auf der logischen Ebene. Ich hab mal eine kleines Proggie geschrieben in dem ich das mal ausprobiert habe (noch die alte Version von mir!)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,Urlmon,shellapi, StdCtrls;
type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private function geturlfile(was,wohin:string):boolean; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
function tform1.geturlfile(was,wohin:string):boolean; begin result:=urldownloadtofile(nil,pchar(was),pchar(wohin),0,nil)=0; end;
procedure TForm1.Button1Click(Sender: TObject); begin screen.Cursor:=crHourglass; if geturlfile('http://www.irgendwo.de/update_loader.exe',Application.ExeName) then begin memo1.Text:='hat geklappt'; end else begin memo1.Text:='es ging was schief!!!'; end; screen.Cursor:=crdefault; end;
end. |
Ich kriege immer die Meldung 'es ging was schief', ich hätte aber gerne die Meldung 'hat geklappt' !
Problem ist doch das ich die aktuelle Exe, die ich gerade benutze nicht überschreiben kann, weil ich sie gerade im Schreibschutz geöffnet habe. Wie kriegt man das hin, das der Anwender immer die neueste Version bekommt????
Viele Grüße
Oliver
Moderiert von Peter Lustig: Code- durch Delphi-Tags ersetzt
_________________ Viele Grüße
Oliver
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Di 06.01.04 11:37
Du kannst nicht mit einem programm versuchen die exe (die ja sich selbst ersetzen soll) zu ersetzen...
Für das ersetzen benötigst du eine weitere exe (oder auch bat), oder lagerst alles in dlls aus, die dann halt nur noch up to date gehalten werden...
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
VD
Hält's aus hier
Beiträge: 8
|
Verfasst: Di 06.01.04 11:43
das einfachste ist, dein hauptprogramm in eine deinprob.dll zu baun, die nur eine einzige prozedure nach aussen gibt ( StartProgram; z.b. )
dazu baust du dann eine exe, die wenn du es startest guckt ob im gleichen verzeichnis eine deinprog_neu.dll liegt, wenn ja die deinprog.dll löscht, die deinprog_neu.dll in deinprog.dll umbenennt und dann ganz normal wieder die prozedure der dll läd.
im hauptprogramm ist dann die eigentliche updatefunktion in der du guckst, ob es ne neue version gibt, und im fall des falles die deinprog_neu.dll herunterlädst, im verzeichnis deines progs speicherst und das prog neustartest.
hoffe nicht zu sehr verwirrt zu haben
VD
|
|
olliterski 
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Di 06.01.04 19:36
| VD hat folgendes geschrieben: |
hoffe nicht zu sehr verwirrt zu haben
VD |
Nein, hast Du nicht! Mir ist beim lesen eben die Lösung eingefallen!
Da mein Programm schon fast fertig ist, kann ich zwar alles in eine dll auslagern, aber das wäre zum derzeitigen Stand Irrsinn!!!
Ich mach stattdessen was ganz anderes!
Ich mach mir eine Exe die, wie oben von Chatfix beschrieben, in einem textfile auf dem Server nachsieht ob die Version neuer ist als die auf dem Client.
Wenn die WWW-Version neuer ist, wird diese runtergeladen und gestartet. Ist die Version gleichgeblieben wird das Hauptprogamm gestartet und die Exe die das gemacht hat wird in beiden Fällen beendet.
Da muss ich nix umbiegen oder so sondern ich kann das benutzen was ich jetzt schon benutze! Ich schalte halt nur was vor!
Danke für die Idee Chatfix, hätt ich eigentlich auch selbst drauf kommen können, aber manchmal ist es so verblüffend einfach das wir es nicht sehen!!!
VD, auch dir vielen Dank!
Viele Grüße
Oliver
_________________ Viele Grüße
Oliver
|
|
tomtom62
      
Beiträge: 278
WIN 2000, XP prof
D5 prof.
|
Verfasst: Di 06.01.04 20:04
Mal ein paar simple Fragen: (zugegeben etwas provokativ  )
Was ist, wenn der Nutzer kein Internet hat ?.
Was ist, wenn der Nutzer kein Update will ?
Was hält ein Nutzer davon, wenn einfach ohne sein Wissen eine Internetverbindung aufgebaut wird ? Kosten ?
Was ist, wenn die heruntergeladene Datei zwar komplett ist, aber
fehlerhaft ?
Bitte beantworte die Fragen für Dich selbst mal völlig unvoreingenommen. Das ist kein "Gemecker", sondern einfach ein paar unvoreingenommene Fragen, die ich mir gestellt habe, als ich Deinen Thread gelesen habe..
Gruss
Thomas
|
|
olliterski 
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Di 06.01.04 20:30
| tomtom62 hat folgendes geschrieben: | Mal ein paar simple Fragen: (zugegeben etwas provokativ )
Was ist, wenn der Nutzer kein Internet hat ?. |
Mein Kunde hat Internet. Ich mach keine Software für jeden, sondern das ist ein reines Kundenprojekt und ich bin es leid, meinem Kunden immerwieder ne neue EMail zu schicken wo er den Anhang nicht öffnen kann, weil Outlook mauert. Und da ich fast fertig bin, musste ich mir ohnehin ne Updatemöglichkeit einfallen lassen. Es geht ja auch darum, was mache ich wenn bei meinem Kunden Probleme auftreten und ich liege unter der Sonne Mexicos? (na vielleicht nicht gerade Mexico, aber vielleicht Doberlo-Kirchheim oder so! *lol*) Da kann ich nicht mal schnell zurückfahren. Günstiger ist das die Alternative, dass ich den Fehler mit dem Notebook behebe und ein Update ins Internet stelle der Rest läuft beim Kunen dann automatisch ab!
| tomtom62 hat folgendes geschrieben: | | Was ist, wenn der Nutzer kein Update will ? |
Er will! Er hat zu wollen, immerhin haben die mit mir einen Wartungsvertrag!
| tomtom62 hat folgendes geschrieben: | | Was hält ein Nutzer davon, wenn einfach ohne sein Wissen eine Internetverbindung aufgebaut wird ? Kosten ? |
In der Exe mach ich ja dann ein Fensterchen auf in dem steht das jetzt im Internet nach einem Update gesucht wird. Ansonsten: Firmenfirewall und Flatrate!
| tomtom62 hat folgendes geschrieben: | | Was ist, wenn die heruntergeladene Datei zwar komplett ist, aber fehlerhaft ? |
Das ist allerdings ne sehr gute Frage auf die ich ehrlich gesagt keine Antwort habe. Aber ich werde mal drüber nachdenken!
| tomtom62 hat folgendes geschrieben: | | Das ist kein "Gemecker", sondern einfach ein paar unvoreingenommene Fragen, die ich mir gestellt habe, als ich Deinen Thread gelesen habe.. |
So hab ich das auch nicht aufgenommen! Einige Fragen hatte ich mir schon mal durch den Kopf gehen lassen und die Entscheidung das so zu machen wäre nciht gefallen wenn es ein oder mehrere Probleme gegeben hätte!
Trotzdem vielen Dank für Deine Anregungen. Die Sache mit der fehlerhaften Datei lass ich mir nochmal durch den Kopf gehen.
Viele Grüße
Oliver
_________________ Viele Grüße
Oliver
|
|
Brueggendiek
      
Beiträge: 304
Win 98, Win98SE, Win XP Home
D5 Std
|
Verfasst: Di 06.01.04 22:48
Hallo Olliver!
| tomtom62 hat folgendes geschrieben: | | Was ist, wenn die heruntergeladene Datei zwar komplett ist, aber fehlerhaft ? |
Da Dein Programm das Update selber ausführt, wäre eine Möglichkeit, daß Du eine Prüfsumme (z.B. CRC, Algo findet sich bei den Schweizern) an die Datei anhängst und kontrollierst, ob das aus dem Internet dieselbe Summe ergibt - dann ggf. nochmal versuchen.
Die Installation könnte so aussehen, daß Du 2 Programme erstellst: das eigentliche Programm und einen Installer. Findet das Programm ein Update und konnte es fehlerfrei in eine temporäre Datei saugen, startet es den Installer und beendet sich. Der Installer kann dann die EXE überschreiben und startet als letzte Aktion das Program neu.
Gruß
Dietmar Brüggendiek
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 07.01.04 08:26
Erstmal bitte für die Idee *gg*
Bekomm ich da jetzt was von deinem Geld ab? 
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
olliterski 
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Mi 07.01.04 10:29
...wenn ich dafür genug bekommen würde, klar warum nicht!
Aber die kunden heutzutage sind derart geizig und zahlungsfaul, das ich dir nur ein paar Schulden abgeben könnte, was mir natürlich sehr recht wäre!
Viele Grüße
Oliver
_________________ Viele Grüße
Oliver
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 07.01.04 11:14
Ich hab da auch für meine Software mal etwas gebaut, das läuft auf XML-Files, kann auch mehrere Dateien in einem Projekt updaten und auch Dateien hinzufügen. Ist zwar noch net ganz fertig und ich finde keine Zeit weiterzumachen, aber vll. willst Du es Dir mal ansehen, vll. gebe ich Dir auch den Source. Einfach mal ne PN schreiben, wenn Du Interesse hast
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Mi 07.01.04 14:20
Das mit dem Geld war nur ein Scherz meinerseits...
Ich helf doch gern...
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
olliterski 
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Do 08.01.04 00:54
| Chatfix hat folgendes geschrieben: | Das mit dem Geld war nur ein Scherz meinerseits...
Ich helf doch gern... |
Ich weiss ... !
Anderes Thema, ich hab nochmal meinen Gehinrschmalz angestrengt und folgendes ist bei rausgekommen:
Da ich bis jetzt ohnehin schon mit ner INI arbeite, kann ich so darauf aufbauen. Wichtig ist natürlich das die neueste Exe immer einen anderen Namen hat, z.B. programmV1.exe. Wobei die 1 halt symbolisch für die aktuelle Versionsnummer steht.
Damit brauche ich noch nichtmal ne Update.exe! Und das mit dem Löschen nach dem schliessen hab ich irgendwo mal bei Swissdelphicenter gelesen.
@UGrohne:
Der Tip mit XML hört sich nicht schlecht an. Wenn das was ich mir hier ausgeknobelt habe nicht funzt, komme ich gerne drauf zurück. Ich hab nämlich keine Ahnung von XML und derzeit nicht eine Minute um mich da, auch wenn nur kurz, einzulesen .
Trotzdem vielen Dank nochmal
Oliver
_________________ Viele Grüße
Oliver
Zuletzt bearbeitet von olliterski am Sa 10.01.04 22:03, insgesamt 1-mal bearbeitet
|
|
Chatfix
      
Beiträge: 1583
Erhaltene Danke: 10
Win 10, Win 8, Win 7, Win Vista, Win XP
VB.net (VS 2015), MsSQL (T-SQL), HTML, CSS, PHP, MySQL
|
Verfasst: Do 08.01.04 12:12
Laut deiner struktur würde das programm im update fall 2 mal gestartet...
Neue Version starten
Alte version beenden und löschen
Aktuelle Version startet
_________________ Gehirn: ein Organ, mit dem wir denken, daß wir denken. - Ambrose Bierce
|
|
olliterski 
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Do 08.01.04 12:23
| olliterski hat folgendes geschrieben: | Der zweite und dritte Kasten von unten verschwinden. Wobei der drittletzte Kasten durch einen ersetzt wird, in dem steht, dass die aktuelle (neue) Versionsnummer in die INI geschrieben wird.
|
Ich weiss das das Modell nicht ganz richtig ist deswegen hatte ich es ja extra nochmal dazugeschrieben!
Viele Grüße
Oliver
_________________ Viele Grüße
Oliver
|
|
patrick
      
Beiträge: 1481
WIN2k, WIN XP
D6 Personal, D2005 PE
|
Verfasst: Do 08.01.04 12:37
| Zitat: | | immer einen anderen Namen hat, z.B. programmV1.exe. Wobei die 1 halt symbolisch für die aktuelle Versionsnummer steht. |
und was ist mit den verküpfungen zu dem programm?
wenn du den dateinamen änderst gehen die alten verküpfungen ins nirvana.
ich würde den weg über update.exe machen.
_________________ Patrick
im zweifelsfall immer das richtige tun!!!
|
|
olliterski 
      
Beiträge: 105
Erhaltene Danke: 2
Win7 64-Bit
D7 Ent.
|
Verfasst: Do 08.01.04 13:48
| patrick hat folgendes geschrieben: | und was ist mit den verküpfungen zu dem programm?
wenn du den dateinamen änderst gehen die alten verküpfungen ins nirvana.
ich würde den weg über update.exe machen. |
brauch ich nich!
Ich setze im Programm die Verknüpfungen beim Programmstart neu. Dort steht bis jetzt noch 'programm.exe' als Dateiname.
Wenn ich aber den neuen Dateinamen in die INI schreibe, kann ich ihn auch für die Verknüpfungen setzen!!! (Verknüpfung=Dateiname aus INI!)
Viele Grüße
Oliver
_________________ Viele Grüße
Oliver
|
|
|