| Autor |
Beitrag |
Highspeeder
      
Beiträge: 34
Win 7
Delphi 7 Profesional,Visual Basic
|
Verfasst: Di 02.01.07 09:55
Wie kann ich ein Programm übers Internet updaten ?
1. Abfragen, ob eine neue Version verfügbar ist
2. Programm beenden
3. altes Programm löschen
4. neues Programm über Internet laden
5. Programm wieder starten
hm....geht das überhaupt mit einem einzigen Programm ????
|
|
Leuchtturm
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Di 02.01.07 09:59
Programm wieder starten kannst du mit shellexute
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Di 02.01.07 10:04
Leuchtturm hat folgendes geschrieben: | | Programm wieder starten kannst du mit shellexute |
Das wird ihm aber nichts bringen, wenn er die Exe erst updaten muss.
Sehr einfache Vorgehensweise: Textdatei auf Deinem Server im Internet mit der aktuellen Versionsnummer. Diese wird heruntergeladen und die Versionsnummer mit der lokalen verglichen. Wenn sie unterschiedlich sind, wird die Exe-Datei vom Server heruntergeladen. Dann erzeugst Du eine Batch-Datei, mit deren Hilfe die heruntergeladene Datei über die eigentliche Exe-Datei kopiert wird und die das Programm wieder startet, fertig.
Das Konzept lässt sich noch beliebig erweitern 
|
|
Leuchtturm
      
Beiträge: 1087
Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
|
Verfasst: Di 02.01.07 10:05
_________________ Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
|
|
Corpsman
      
Beiträge: 228
KUbuntu 10.4
Lazarus
|
Verfasst: Di 02.01.07 11:15
Hossa,
Wie Kriege ich denn mein Programm dazu das es die File XYZ vom server meiner HP lädt ?
bzw gibt es nicht irgend einen Trick das man die Datei ausliest ohne sie direkt laden zu müssen ?
Wenn die Anwendung keine Schreibrechte auf der platte hat wäre die Runterladenvariante ungeschickt ?
_________________ --
Just Try it.
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Di 02.01.07 11:27
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 02.01.07 11:28
Ohne Schreibrechte geht gar nix, selbst wenn die Exe sich selbst verändern könnte. Auch Verändern braucht Schreibrechte...
|
|
Andidreas
      
Beiträge: 114
Windows XP Pro
BDS 2006
|
Verfasst: Di 02.01.07 12:58
Versuch es mal so:
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: 48: 49:
| procedure TfrmUpdate.btnDownloadClick(Sender: TObject); var lStream: TFileStream; OldDir: String; begin OldDir := GetCurrentDir(); ChDir(ExtractFilePath(ParamStr(0))); if NOT FileExists('FileTransfer.old') then RenameFile('FileTransfer.exe', 'FileTransfer.old') else begin DeleteFile('FileTransfer.old'); RenameFile('FileTransfer.exe', 'FileTransfer.old') end; Label6.Visible := true; ProgressBar1.Visible := true; lStream := TFileStream.Create('DATEINAME.exe', fmCreate or fmShareDenyNone); try idHTTP1.Get('http://DEINESEITE/DATEINAME.exe', lStream); finally lStream.Free; end; ShellExecute(Handle, 'open', 'DATEINAME.exe', nil, nil, SW_SHOWNORMAL); ChDir(OldDir); Application.Terminate; end;
procedure TfrmUpdate.FormShow(Sender: TObject); var LatestVersion, CurrentVersion: String; begin LatestVersion := IdHttp1.Get('http://DEINESEITE/version.txt'); CurrentVersion := GetFileVersion(Application.ExeName); Label3.Caption := CurrentVersion; Label4.Caption := LatestVersion; while Pos('.', CurrentVersion) > 0 do Delete(CurrentVersion, 1, Pos('.', CurrentVersion)); while Pos('.', LatestVersion) > 0 do Delete(LatestVersion, 1, Pos('.', LatestVersion)); if LatestVersion > CurrentVersion then begin btnDownload.Visible := true; btnCancel.Visible := true; Label5.Caption := 'Programm wird anschließend beendet und neu gestartet.'; end else btnOk.Visible := true; end; |
Nicht vergessen: IdHTTP einbinden. Versionsnummer so angeben, wie sie im Prg eingetragen ist.
|
|
Corpsman
      
Beiträge: 228
KUbuntu 10.4
Lazarus
|
Verfasst: Di 02.01.07 14:25
Wenn ich keine Schreibrechte habe kann ich immerhin prüfen ob die Aktuelel version online ist.
Ich habs nu so gemacht : 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: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| uses WinInet; Function GetHTML(AUrl: String): String; Var databuffer: Array[0..4095] Of char; ResStr: String; hSession, hfile, hRequest: hInternet; dwindex, dwcodelen, datalen, dwread, dwNumber: cardinal; dwcode: Array[1..20] Of char; res: pchar; Str: pchar; Begin ResStr := ''; If pos('http://', lowercase(AUrl)) = 0 Then AUrl := 'http://' + AUrl; hSession := InternetOpen('InetURL:/1.0', INTERNET_OPEN_TYPE_PRECONFIG, Nil, Nil, 0); If assigned(hsession) Then Begin hfile := InternetOpenUrl( hsession, pchar(AUrl), Nil, 0, INTERNET_FLAG_RELOAD, 0); dwIndex := 0; dwCodeLen := 10; HttpQueryInfo(hfile, HTTP_QUERY_STATUS_CODE, @dwcode, dwcodeLen, dwIndex); res := pchar(@dwcode); dwNumber := sizeof(databuffer) - 1; If (res = '200') Or (res = '302') Then Begin While (InternetReadfile(hfile, @databuffer, dwNumber, DwRead)) Do Begin If dwRead = 0 Then break; databuffer[dwread] := #0; Str := pchar(@databuffer); resStr := resStr + Str; End; End Else ResStr := 'Status:' + res; If assigned(hfile) Then InternetCloseHandle(hfile); End; InternetCloseHandle(hsession); Result := resStr; End; |
das Klappt wunderbar.
_________________ --
Just Try it.
|
|
|