Autor Beitrag
Highspeeder
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 34

Win 7
Delphi 7 Profesional,Visual Basic
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 02.01.07 10:04 
user profile iconLeuchtturm 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: Di 02.01.07 10:05 
user profile iconUGrohne hat folgendes geschrieben:
user profile iconLeuchtturm 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 ;)

Sorry ich hatte das falsch vestanden, ich dachte er will ein zweites Programm starten und mit diesem dann runterladen :oops:

_________________
Ich bin dafür verantwortlich was ich sage - nicht dafür was du verstehst.
Corpsman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228

KUbuntu 10.4
Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Di 02.01.07 11:27 
user profile iconCorpsman hat folgendes geschrieben:
Wie Kriege ich denn mein Programm dazu das es die File XYZ vom server meiner HP lädt ?

Suche in der Entwickler-Ecke DATEI DOWNLOADEN
user profile iconCorpsman hat folgendes geschrieben:
bzw gibt es nicht irgend einen Trick das man die Datei ausliest ohne sie direkt laden zu müssen ?

Wie willst Du ein Brötchen essen ohne zum Bäcker zu gehen?
user profile iconCorpsman hat folgendes geschrieben:
Wenn die Anwendung keine Schreibrechte auf der platte hat wäre die Runterladenvariante ungeschickt ?

Dafür gibt es temporäre Verzeichnisse oder das Benutzerverzeichnis. Für das Update der Exe-Datei muss natürlich jemand angemeldet sein, der über entsprechende Rechte verfügt.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 114

Windows XP Pro
BDS 2006
BeitragVerfasst: Di 02.01.07 12:58 
Versuch es mal so:
ausblenden volle Höhe Delphi-Quelltext
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'nilnil, 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 228

KUbuntu 10.4
Lazarus
BeitragVerfasst: 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 :
ausblenden volle Höhe Delphi-Quelltext
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..4095Of char;
  ResStr: String;
  hSession, hfile, hRequest: hInternet;
  dwindex, dwcodelen, datalen, dwread, dwNumber: cardinal;
  dwcode: Array[1..20Of 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.