Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 21.04.17 13:47 
Hallo,
ich möchte von meiner Internetseite eine Textdatei mittels Get laden und auswerten.
Bis jetzt habe ich:
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:
57:
uses idhttp;
function neueversion:boolean;
var IdHTTP1 : TIdHTTP;
    buffer  : array[0..50of char;
    Mem     : TMemoryStream;
    s,s2    : string;
    i       : integer;
  //Abfrage der Versionsnummer des laufenden Programms
  function Sto_GetFmtFileVersion(const FileName: String;const Fmt: String): String;
  var
    iBufferSize: DWORD;
    iDummy: DWORD;
    pBuffer: Pointer;
    pFileInfo: Pointer;
    iVer: Array[1..4of Word;
  begin
    Result := '';
    iBufferSize := GetFileVersionInfoSize(PChar(FileName), iDummy);
    if (iBufferSize > 0then begin
      GetMem(pBuffer, iBufferSize);
      try
        GetFileVersionInfo(PChar(FileName), 0, iBufferSize, pBuffer);
        VerQueryValue(pBuffer, '\', pFileInfo, iDummy);
        iVer[1] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS);
        iVer[2] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS);
        iVer[3] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS);
        iVer[4] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS);
      finally
        FreeMem(pBuffer);
      end;
      Result := Format(Fmt, [iVer[1], iVer[2], iVer[3], iVer[4]]);
    end;
  end;
//
begin
  IdHTTP1:=tidhttp.create(nil);
  Mem := TMemoryStream.Create;
  try
    //in der version.txt steht ein einzelner String
    IdHttp1.Get('http://mathematikalpha.de/.../version.txt', Mem);
    mem.position:=0;
    mem.Read(buffer,20);
    i:=0;
    s:='';
    repeat
      if buffer[i]<>#13 then s:=s+buffer[i];
      inc(i);
    until buffer[i]=#13;
    s2:=Sto_GetFmtFileVersion(application.exename,'%d.%d.%d.%d');
    //s und s2 werden noch verschlüsselt
    neueversion:=(s<>s2);
  except
    on E: Exception do neueversion:=false;
  end;
  Mem.free;
  IdHTTP1.free;
end;

Ich habe es jetzt mehrfach getestet und weiß nicht, wo ein Fehler sein sollte.
Bei mir funktioniert es ohne jegliche Probleme, gleichgültig, ob die Strings s und s2 gleich oder verschieden sind oder ob eine Internetverbindung besteht oder nicht. Allerdings gilt das scheinbar nicht für andere Anwender.

Könnte jemand mal auf den Text schauen, ob ich einen Fehler/Denkfehler begangen habe.
Sollte meine "Lösung" sehr laienhaft sein, so bitte um Entschuldigung. Von diesem ganzen Internetkram habe ich praktisch keine Ahnung.

Danke
Steffen

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 21.04.17 14:05 
Auf meinen Webspace zugegriffen, funktioniert diese Funktion (eigentlich ein Pleonasmus). Evtl. hat es mit dem (verweigerten) Fremdzugriff auf Deinen Webspace zu tun.

Edit: Probiere mal:

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:
57:
function neueversion:boolean;
var IdHTTP1 : TIdHTTP;
    buffer  : array[0..50of char;
    Mem     : TMemoryStream;
    s,s2    : string;
    i       : integer;
  //Abfrage der Versionsnummer des laufenden Programms
  function Sto_GetFmtFileVersion(const FileName: String;const Fmt: String): String;
  var
    iBufferSize: DWORD;
    iDummy: DWORD;
    pBuffer: Pointer;
    pFileInfo: Pointer;
    iVer: Array[1..4of Word;
  begin
    Result := '';
    iBufferSize := GetFileVersionInfoSize(PChar(FileName), iDummy);
    if (iBufferSize > 0then begin
      GetMem(pBuffer, iBufferSize);
      try
        GetFileVersionInfo(PChar(FileName), 0, iBufferSize, pBuffer);
        VerQueryValue(pBuffer, '\', pFileInfo, iDummy);
        iVer[1] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS);
        iVer[2] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionMS);
        iVer[3] := HiWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS);
        iVer[4] := LoWord(PVSFixedFileInfo(pFileInfo)^.dwFileVersionLS);
      finally
        FreeMem(pBuffer);
      end;
      Result := Format(Fmt, [iVer[1], iVer[2], iVer[3], iVer[4]]);
    end;
  end;
//
begin
  IdHTTP1:=tidhttp.create(nil);
  Mem := TMemoryStream.Create;
  try
    //in der version.txt steht ein einzelner String
    IdHttp1.Get('http://sortierkino.bplaced.net/test.txt',Mem);
    mem.position:=0;
    mem.Read(buffer,20);
    i:=0;
    s:='';
    repeat
      if buffer[i]<>#13 then s:=s+buffer[i];
      inc(i);
    until buffer[i]=#13;
    showmessage(s);
    s2:=Sto_GetFmtFileVersion(application.exename,'%d.%d.%d.%d');
    //s und s2 werden noch verschlüsselt
    neueversion:=(s<>s2);
  except
    on E: Exception do neueversion:=false;
  end;
  Mem.free;
  IdHTTP1.free;
end;


"Showmessaged" beim Aufruf "Hallo"?
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 21.04.17 14:31 
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
Edit: Probiere mal: ...

Funktioniert problemlos.
Auch der Direktzugriff über den IE/Chrome funktioniert.

Steffen

PS.: Die direkte Adresse bei mir ist: 'http://mathematikalpha.de/wp-content/uploads/2017/04/version.txt'

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 21.04.17 14:36 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
PS.: Die direkte Adresse bei mir ist: 'http://mathematikalpha.de/wp-content/uploads/2017/04/version.txt'


Klare Ansage, so läßt sich das prüfen. Und es funktioniert (bei mir wenigstens).

Hm, sind wir jetzt mit unserem Latein am Ende? Hilfe, Experten!

Edit: Als Beweis hier der Inhalt Deiner Textdatei: 25.2017.4.1561

Edit 2: Na gut, das ist doch kein Beweis, denn man kann auch direkt vom Browser aus aufrufen.


Zuletzt bearbeitet von Delphi-Laie am Fr 21.04.17 22:44, insgesamt 1-mal bearbeitet

Für diesen Beitrag haben gedankt: Mathematiker
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: Fr 21.04.17 15:29 
Hmm..

Hab das auch getestet.
(Nur die Get-Routine etwas anders gemacht ;) )

und es läuft.

Angehängt ein kleines Testprogram
D6 mit Indy 10.6. + 32Bit SSL-Libs
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 21.04.17 16:10 
user profile iconHolgerx hat folgendes geschrieben Zum zitierten Posting springen:

Hab das auch getestet.
(Nur die Get-Routine etwas anders gemacht ;) )
und es läuft.

Danke.
Wenn ich es richtig verstehe, sind die Unterschiede in deiner get-Variante die Verwendung der Stringliste, der evtl. Test auf den Userzugang sowie die hhtps-Möglichkeit.
D.h., vom Prinzip her ist meine einfache Lösung korrekt.

Verflixt noch mal, warum geht es dann nicht immer?

@Delphi-Laie: Ich habe einmal unter
mathematikalpha.de/w...7/04/matlex_test.zip
nur die Exe-Datei abgelegt. Wenn du diese in den Mathematik alpha-Ordner kopierst und aufrufst, kannst du noch bitte noch einmal testen, ob es die Probleme immer noch gibt.
Danke.

Steffen

PS: Datei wieder entfernt.

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein


Zuletzt bearbeitet von Mathematiker am Fr 21.04.17 18:40, insgesamt 1-mal bearbeitet
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 21.04.17 16:36 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
@Delphi-Laie: Ich habe einmal unter
mathematikalpha.de/w...7/04/matlex_test.zip
nur die Exe-Datei abgelegt. Wenn du diese in den Mathematik alpha-Ordner kopierst und aufrufst, kannst du noch bitte noch einmal testen, ob es die Probleme immer noch gibt.


So etwas in der Art schwebte mir auch schon vor, doch ich wagte es nicht, Dich mit einer solchen Extrawurst zu behelligen.

Leider habe ich mit dieser alternativen Exe-Datei aber immer noch den gleichen Fehler, den ich oben schon nannte.

Bin ich denn der einzige, der ihn bemängelt, oder haben andere auch schon etwas in diese Richtung vermeldet?

Edit: Wenn wir diesen Fehler finden wollen, müssen wir ihn einkreisen und die Schlinge enger ziehen. Demnach müßtest Du - da Du den Quelltext, jedenfalls den vollständigen, sicher nicht herausrücken möchtest - von der Matlex.exe wesentliche, d.h. urheberrechtlich relevante, für diesen Funktionalität aber irrelevante Teile "herausbrechen", evtl. bis zum eigentlichen Problem reduziert, um dann ggf. doch einen von Dir vertretbaren "Rumpfquelltext" zu veröffentlichen oder wengistens an meine Wenigkeit weiterzureichen.

Edit2: "Mein" Paradebeispiel einer solchen wochenlangen (!!) Detektivarbeit findet sich unter www.enterag.ch/hartwig/bug/bug.html. Und der Fehler lag bei Borland...

Edit 3: Alternativ kannst Du auch in dieser o.g. Zugriffsfunktion zwischen jede Zeile ein showmessage mit einer aufsteigenden Nummer einfügen. Dann ließe sich die Befehlszeile, in der der Zugriffsfehler auftritt, vermutlich genau eingrenzen.

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 21.04.17 18:40 
Hallo Delphi-Laie,
Danke, aber ich lasse es jetzt erst einmal.
Ich werde noch einmal in Ruhe darüber nachdenken.

Steffen

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 21.04.17 18:55 
Yo, schlaf' mal eine Nacht darüber!

Aber Du solltest möglichst nicht verzagen, denn aufzugeben ist nun wahrlich nicht der Programmierer (ihr) Ding. Aktuelles Beispiel: Ich war auch den ganzen Nachmittag damit beschäftigt, einen Fehler zu suchen / finden. Obwohl ich alle Überprüfungen bei den Compileroptionen setzte, ist das Dekrement einer word-Variablen hinein ins "Pseudonegative" nicht angezeigt/moniert worden, also irgendwie "durchgerutscht". Leider war der dekrementierte Wert nicht nahe bei den verdächtigen 65536, sondern nur bei über 9000, und ich wundere mich einen Wolf. Da kommt Freude auf.

Wie gesagt, gib mir eine Exe-Datei, die die heikle Funktion "visuell durchsteppt", dann werden wir den Fehler zumindest weiter einkreisen. Mehr kann ich nun wirklich nicht anbieten.

Edit: Am nicht bemerkten Integerüberlauf lag es nun doch nicht...
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: Sa 22.04.17 10:31 
Hmm..


Mal ne ganz andere Frage:

Verwenden die Anwender, bei denen es NICHT geht eventuell einen Proxy?
Dieser könnte eventuell eine Anmeldung vor dem Web-Zugriff benötigen ;)

Oder blockiert da die Windows-Firewall deine App ?

Wenn es bei Dir läuft, sollte es nicht an der Exe, sondern an der Umgebung liegen können.

Ich weiß nicht, ob die Proxy-Geschichte einfach min Indy umgesetzt werden könnten.. ;)

Für diesen Beitrag haben gedankt: Mathematiker
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 22.04.17 10:51 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Mathematiker
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 22.04.17 23:26 
user profile iconHolgerx hat folgendes geschrieben Zum zitierten Posting springen:
Verwenden die Anwender, bei denen es NICHT geht eventuell einen Proxy?


Ich? Nicht, daß ich wüßte, jedenfalls nicht explizit. Ich richtete nie einen ein. Wo sollte ich auch?!

Wenn es daran liegen sollte: Warum kann ich dann mit der o.g. Funktion auf meine und Mathematikers Textdatei zugreifen?

user profile iconHolgerx hat folgendes geschrieben Zum zitierten Posting springen:
Oder blockiert da die Windows-Firewall deine App ?


Falls wiederum ich gemeint sein soll: Nein, solches halbausgegorenes Zeugs verwende ich nicht (mehr), dafür funktioniert diese zu unzuverlässig und unkomfortabel (zickte z.B. bei FTP-Zugriff, natürlich fand ich den Fehler nur durch Zufall und Spürsinn, wie käme denn diese Firewall dazu, eine aussagekräftige Fehlermeldung auszuspucken?!). Nur die "saubere" Firewall im Router nutze ich. Ohne eine solche geht es nicht. Ich hatte sie vor Jahren mal experimentalweise ausgeschaltet und hatte binnen 10 min ein völlig verseuchtes Windows (2000). Ich war mir unschlüssig, über wen ich mehr ärgerlich sein sollte: Über diese hochenergetisch-kriminellen Elemente des Internets oder über den Redmonder Schrott, der ohne einen solchen Schutz völlig wehrlos, splitternackt ist.

Ich bin weiterhin zur Hilfe bereit, jedoch nicht mehr dazu, mich weiter zu rechtfertigen oder an Ursachenspekulationen zu beteiligen und dafür Zeit zu verplempern (ich bin am Computer gern produktiver als auf diese Weise). So findet man keine Fehler! Entweder, Mathematiker macht einen Nagel mit Kopf und bestreitet die von mir vorgeschlagenen Wege (oder andere, womöglich noch wirksamere), die Wurzel des Übels einzugrenzen, oder eben nicht. Im letzteren Falle steht es frei, das Programm doch wieder mit dieser Funktionalität zu veröffentlichen und ggf. manche Nutzer mit dieser Fehlermeldung sozusagen in Kauf zu nehmen.

Proxy, Indy, meine Güte, hier werkeln Hobbyprogrammierer und in bezug auf Internetfunktionalität sogar lausige Amateure! Ich zähle mich jedenfalls dazu, und auch Mathematiker äußerte sich so.


Zuletzt bearbeitet von Delphi-Laie am Sa 22.04.17 23:55, insgesamt 8-mal bearbeitet
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Sa 22.04.17 23:34 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Wichtiger wäre es zu wissen, welche Fehlermeldung dabei erschienen ist, bevor man weiter am funktionierenden Code herumdoktort.


www.entwickler-ecke....e=quote&p=706693
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 23.04.17 10:20 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 23.04.17 10:26 
Das Phänomen taucht bei mir auf Windows XP auf!

Edit: Das erklärt zudem nicht (zufridenstellend), warum die o.a. Funktion in der matlex.exe teiweise so umherzickt. Irgendetwas an ihrem "Umfeld" scheint zu stören. Derlei Fehler sind nunmal nur durch aufwendiges und systematisches Umzinglen zu lokalisieren, nicht jedoch durch Ursachenforschung über das Internet.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 23.04.17 10:46 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: Delphi-Laie
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: So 23.04.17 11:00 
user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Ich kann dir das wiedergeben, was Microsoft von sich gibt: Win32 1722 Fehler tritt mit dem Windows Installier auf. Warum? Tjaa ...


Ist das jetzt ein Wink mit dem Zaunpfahl, oder rätselst Du selbst?

Ich wählte die installationsfreie Version des Mathematikalphas!

Für mich sind solche Fehler inzwischen fast schon reflexhaft bei fehlenden (also nichtgestarteten) Diensten ("RPC") zu suchen, da ich bei diesen immer ordentlich wegputze (ich entscheide lieber allein und reduziere die Redmonder Ressourcenverschwendung). Doch damit kam ich diesmal nicht weit(er).
Holgerx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62
Erhaltene Danke: 27

Win95 - Win11 / MSServer2000 - MSServer2019
Delphi 6pro / XE4
BeitragVerfasst: So 23.04.17 15:32 
Hmm..

@Delphi-Laie
Ich hab mich NICHT auf DICH bezogen, sondern auf:

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:

Bei mir funktioniert es ohne jegliche Probleme, gleichgültig, ob die Strings s und s2 gleich oder verschieden sind oder ob eine Internetverbindung besteht oder nicht. Allerdings gilt das scheinbar nicht für andere Anwender.


Somit auf die Anwender unbekannterweise, welche hier gemeint waren...

Aus meiner Erfahrung bei Kunden, welche einen Proxy mit Anmeldung dazwischen geschaltet haben, könnte dies ein Grund darstellen, oder auch die z.B. bei Win7 / 8 / 10 automatisch vorhandene und aktivierte Firewall, welche ausgehende Verbindungen von ihm unbekannten Programmen blocken kann.

Auch kann ein Proxy zu einem Redirect führen, weshalb bei meinem obrigen Testtool auch

IdHTTP1.HandleRedirects := true;

gesetzt ist.


Ich gebe Frühlingsrolle allerdings recht, dass hier mal

IdHTTP1.ResponseCode

ausgewertet wird, dann wüssten wir weshalb die Datei nicht gelesen wird.

Für diesen Beitrag haben gedankt: Delphi-Laie