AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fehler beim ausführen eine Update-Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler beim ausführen eine Update-Funktion

Ein Thema von gelberkaktus · begonnen am 23. Mär 2012 · letzter Beitrag vom 24. Mär 2012
Antwort Antwort
Seite 1 von 2  1 2      
gelberkaktus

Registriert seit: 18. Mär 2012
Ort: Kölleda/Thüringen
16 Beiträge
 
Delphi 7 Personal
 
#1

Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 17:04
Wenn ich meine Anwendung ausführe erscheint immer folgende Fehlermeldung.
fehler.jpg

Dies geschieht beim ausführen von folgendem code, welcher updates suchen soll

Delphi-Quellcode:
procedure TForm1.updatesuch;
var nn, version:string;
begin
//prüft ob eine internetverbindung besteht
if IsOnline('mylittlerechner.funpic.de') then
begin
  //ermittelt die aktuelle Version des Programms
  version:= AboutBox.GetFileVersion(Paramstr(0));
  //ermittelt den pfad (Appdata - einstellungen)zum speichern der gedownloadeden datei
  nn:= GetEnvVarValue('AppData');
  //downloaded die datei
  if DownloadFile('http://mylittlerechner.my.funpic.de/mcversion/version.txt',(nn + '\versionneu.txt')) then
  begin
    //wenn erfolgreich dann wird diese in einem dialog angezeigt
// hier tritt der fehler auf
    UpDialog.Memo1.Lines.LoadFromFile((nn + '\versionneu.txt'));
    //vergleicht programmversion mit ermittelter version
    if UpDialog.Memo1.Lines[0] <> version then
     begin
     //macht den dialog sichtbar wo gesagt wird "update gefunden"
     UpDialog.Visible:= true;
     end;
  end;
end;
end;
dabei habe ich folgende funktionen benutzt

Delphi-Quellcode:
//downloaded datei
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
  try
    Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0;
  except
    Result := False;
  end;
end;

//prüft ob internet da anhand einer webseite

function IsOnline(Server: String): Boolean;
var
  wsaData: TWSAData;
begin
  WSAStartUp(MAKEWORD(1, 1), wsaData);
  Result := (GetHostByName(PChar(Server)) <> nil);
  WSACleanUp;
end;

//sucht appdata-pfad
function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer; // buffer size required for value
begin
  // Get required buffer size (inc. terminal #0)
  BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0);
  if BufSize > 0 then
  begin
    // Read env var value into result string
    SetLength(Result, BufSize - 1);
    GetEnvironmentVariable(PChar(VarName),
      PChar(Result), BufSize);
  end
  else
    // No such environment variable
    Result := '';
end;
//version herausfinden
function TAboutBox.GetFileVersion(Path: string): string;
var
  lpVerInfo: pointer;
  rVerValue: PVSFixedFileInfo;
  dwInfoSize: cardinal;
  dwValueSize: cardinal;
  dwDummy: cardinal;
  lpstrPath: pchar;

begin
  if Trim(Path) = EmptyStr then
    lpstrPath := pchar(ParamStr(0))
  else
    lpstrPath := pchar(Path);

  dwInfoSize := GetFileVersionInfoSize(lpstrPath, dwDummy);

  if dwInfoSize = 0 then
  begin
    Result := 'unbekannt';
    Exit;
  end;

  GetMem(lpVerInfo, dwInfoSize);
  GetFileVersionInfo(lpstrPath, 0, dwInfoSize, lpVerInfo);
  VerQueryValue(lpVerInfo, '\', pointer(rVerValue), dwValueSize);

  with rVerValue^ do
  begin
    Result := IntTostr(dwFileVersionMS shr 16);
    Result := Result + '.' + IntTostr(dwFileVersionMS and $FFFF);
    Result := Result + '.' + IntTostr(dwFileVersionLS shr 16);
  end;
  FreeMem(lpVerInfo, dwInfoSize);

end;
Delphi-Quellcode:
uses
  SysUtils, StdCtrls, FileCtrl, ShellApi,
  WinSock, ShlObj, ActiveX, URLMon;
"Ohne konkrete Symbole ist der Computer bloß ein Haufen Schrott."
Neil Postman

Geändert von gelberkaktus (23. Mär 2012 um 20:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 17:08
Und wo genau (Quellcodezeile)?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 18:32
Also ich vermute einfach mal dass es an der function GetEnvVarValue Funktion liegt. Ich bin mir nicht sicher, ob dies so richtig funktioniert. Mach die Funktion mal so, das ist auch sicherer.

Delphi-Quellcode:
function GetEnvVarValue(const VarName: string): string;
var
  BufSize: Integer; // buffer size required for value
  Buffer : PChar;
begin
  //BuffSize ist nur die Textlänge, ohne nullterminiert.
  BufSize := GetEnvironmentVariable(PChar(VarName), nil, 0);
  if BufSize > 0 then
  begin
    //Speicher setzen
    GetMem(Buffer, (BufSize + 1)*SizeOf(Char)); //BufSize ist ohne nullterminierte, deshalb BufSize +1;
    GetEnvironmentVariable(PChar(VarName),
      Buffer, BufSize);
    Result := Buffer;
    FreeMem(Buffer);
  end
  else
    // No such environment variable
    Result := '';
end;
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#4

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 18:36
Hier könnte der Hase auch im Pfeffer liegen, wenn die Datei nicht existiert oder leer ist. Im ersten Fall schlägt das LoadFromFile fehl und im zweiten der Zugriff auf die erste Zeile des Memos.
Zitat:
Delphi-Quellcode:
UpDialog.Memo1.Lines.LoadFromFile((nn + '\versionneu.txt'));
    //vergleicht programmversion mit ermittelter version
    if UpDialog.Memo1.Lines[0] <> version then
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#5

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 19:02
Das wirft aber keine Zugriffsverletzung.
Eine TStringList wirft einen EStringListError und TMemoStrings (die interne Klasse für TMemo.Lines) gibt einfach nur einen Leerstring raus, wenn der Index nicht paßt.

Hier sieht es eher so aus, also wenn irgendwo ein Objekt nicht existiert und auf NIL zugegriffen wird.

GetEnvVarValue ist eigentlich OK und sicher, auch wenn es nicht Unicodetauglich ist.
Ein Bufferoferun ist auch nicht zu erwarten. (höchstens daß der String falsch, also nur zur Hälfte, beschrieben wird)

Solange hier aber nicht die Fehlerstelle genannt wird, hat es wenig sinn hier weiterzusuchen.
Tipp: Es gibt auch ein [DELPHI]-Tag, denn so ist der Code nicht wirklich lesbar.

PS: Warum wandert die Datei eigentlich nach AppData und nicht nach Temp? Es ist wunderschön, wenn AppData mit solchen wunderschönen Dateien vollgemüllt wird, welche man nirgends zuordnen kann.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (23. Mär 2012 um 19:11 Uhr)
  Mit Zitat antworten Zitat
ol1uw

Registriert seit: 24. Jul 2004
Ort: Freiberg
69 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 19:30
wer/was/wo/wann ruft den Funktion updatesuch auf?
Das Formular UpDialog zu diesem Zeitpunkt schon erzeugt?

Uwe
  Mit Zitat antworten Zitat
gelberkaktus

Registriert seit: 18. Mär 2012
Ort: Kölleda/Thüringen
16 Beiträge
 
Delphi 7 Personal
 
#7

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 20:11
der Fehler tritt hier zwischen diesen beiden zeilen auf
Delphi-Quellcode:
    UpDialog.Memo1.Lines.LoadFromFile((nn + '\versionneu.txt'));
    if UpDialog.Memo1.Lines[0] <> version then
Nach der ersten zeile stockt der complier und spuckt den error aus (hatte ich das wirklich so undeutlich angegegeben)



wer/was/wo/wann ruft den Funktion updatesuch auf?
Das Formular UpDialog zu diesem Zeitpunkt schon erzeugt?

Uwe
Die Funktion updatesuch wird mit der Form1 aufgerufen (der hauptform) also startet mit dem Programm. (via FormCreate)

Das Formular UpDialog wird automatisch mit erzeugt.
...Nach der Form1....
"Ohne konkrete Symbole ist der Computer bloß ein Haufen Schrott."
Neil Postman
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#8

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 20:16
der Fehler tritt hier zwischen diesen beiden zeilen auf
Delphi-Quellcode:
    UpDialog.Memo1.Lines.LoadFromFile((nn + '\versionneu.txt'));
    if UpDialog.Memo1.Lines[0] <> version then
Nach der ersten zeile stockt der complier und spuckt den error aus (hatte ich das wirklich so undeutlich angegegeben)
Du hattest es gar nicht angegeben.
Lars
  Mit Zitat antworten Zitat
MiKaEr
(Gast)

n/a Beiträge
 
#9

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 20:21
Zitat:
Die Funktion updatesuch wird mit der Form1 aufgerufen (der hauptform) also startet mit dem Programm. (via FormCreate)
hier liegt ja doch der fehler.

du versuchst hier auf eine form zuzugreifen, die noch gar nicht erzeugt wurde:
if UpDialog.Memo1.Lines[0] <> version then da ist die zugriffsverletzung normal.

schieb das obige einfach ins oncreate von UpDialog und dann sollte es funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fehler beim ausführen eine Update-Funktion

  Alt 23. Mär 2012, 20:27
UpDialog ist also die globale Variable für TUpDialog, welches automatisch erzeugt wird und wo du im OnCreate diesen Code ausfürst?

Selbst Schuld.
Was nutzt du auch globale Variablen, welche zu diesem Zeitpunkt noch nicht initialisiert sind.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz