Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   CreateProcess WGet WIN10 Tablet (https://www.delphipraxis.net/213222-createprocess-wget-win10-tablet.html)

joacim 18. Jun 2023 17:29

CreateProcess WGet WIN10 Tablet
 
:(Ich versuche Kartenteile von openstreetmap zu laden und verwende WGet

1. Eine BAT Datei mit passenden Parametern funktioniert, Daten landen wie gewünscht, in einer Datei
(erste Gehversuche)
2. Daten sollen nun aus einem Programm abgerufen werden.
3. ich habe DELPHI 6 (ja ich weiß, sehr alt, aber es läuft)
4. Parameter werden aufbereitet und an WGet übergeben, WGet wird mit CreateProcess aufgerufen.
5. Das funktioniert (nach einigen Fehlern meinerseits) jetzt sehr gut.
6. Tests auf zwei Desktop PCs und zwei Notebooks (WIN10) waren ok.
7. Ein anderer Kunde hat ca. 10 andere Tablets damit ausgerüstet, alles ok.
8. Jetzt hat ein Kunde Probleme mit einem out door Tablet (ALGIZ 10X)
9. ALGIZ 10X läuft unter WIN10 enterprise
10. ALGIZ 10X ist bei mir im lokalen Netz angemeldet und kann problemlos kommunizieren
(youtube, gmx usw. ….)
11. Der Zugriff auf den openstreetmap Serve funktioniert einfach nicht,
es werden keine Daten empfangen.
12. die BAT Datei (s. 1) funktioniert auf dem ALGIZ 10X
13. ein Aufruf im Browser funktioniert auch.
14. Änderungen an der Firewall waren ohne Erfolg.
15. WGet liegt im Programmverzeichnis
16. Ich habe das betreffende Fenster isoliert und als eigenständiges Hauptprogramm laufen lassen, das
scheint auf dem ALGIZ 10X zu funktionieren.

17. Dann habe ich nur eine form mit einem Button „drum herum gebastelt“. Der Button öffnet das Fenster,
welches als eigenes Hauptprogramm eben noch funktionierte. Als Unter-Fenster geht wieder nichts.

Das Ganze beschäftigt mich jetzt schon den ganzen Tag und ich habe keine Idee was ich noch probieren könnte.

mytbo 18. Jun 2023 17:59

AW: CreateProcess WGet WIN10 Tablet
 
Zitat:

Zitat von joacim (Beitrag 1523523)
Das Ganze beschäftigt mich jetzt schon den ganzen Tag und ich habe keine Idee was ich noch probieren könnte.

mORMot1 läuft mit Delphi 6. Dort gibt es die Funktion SynCrtSock.HttpGet(). Das ersetzt WGet. Mit WIN10 funktioniert es sehr gut.

Bis bald...
Thomas

TurboMagic 18. Jun 2023 21:47

AW: CreateProcess WGet WIN10 Tablet
 
Naja, ist auch die Frage w2arum es noch D6 sein muss.
Falls es ein Hobby Projekt ist gibt's ja auch eine Community Edition kostenlos...
Ich mein' ja nur, dass zwischenzeitlich auch viele andere neue Dinge dazu gekommen sind.
Wär' vielleicht doch mal eine Überlegung wert... ;-)

himitsu 18. Jun 2023 22:31

AW: CreateProcess WGet WIN10 Tablet
 
Und bei all dem Text ... Warum steht nirgends was du nun eigentlich wie machst?

Welche Verzeichnisse als Speicherziel
und wie wird WGet aufgerufen.
Das Arbeitsverzeichnis?
Die Rückgabewerte werden doch natürlich auch alle usgewertet, oder etwas nicht?

Und warum nicht sowas wie Indy, WinSock oder Sonstewas, um es direkt im Programm zu laden.

joacim 19. Jun 2023 06:55

AW: CreateProcess WGet WIN10 Tablet
 
Erstmal danke für die Antworten, trotz Wochenende.

Für CreateProcess verwende ich ExecuteFile, gefunden in:
https://www.delphi-treff.de/tipps-tr...createprocess/

Als Parameter wird etwas in der Art wie:

"wget.exe" -O C:\Users
\_KU\OSM_Debug\OSM_Tiles\Tile_10_549_339.png -U "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0" https://tile.openstreetmap.org/10/549/339.png

übergeben. Im Fehlerfall liefert WGet : „error 4 Network failure“

Wie schon geschrieben, läuft das auf mehreren PCs problemlos. Über das Vorgehen kann man bestimmt diskutieren. Diese Lösung ist eben historisch gewachsen.

Meine Frage zielte auch mehr darauf, ob jemand eine Idee hat, warum dieser Aufruf auf etlichen PCs funktioniert und auf einem bestimmten Tablet dann plötzlich keine Daten liefert.

Besonders irritierend finde ich das Verhalten wie unter 16 und 17 beschrieben.

jaenicke 19. Jun 2023 07:04

AW: CreateProcess WGet WIN10 Tablet
 
Grundsätzlich empfehle ich erst einmal, mit dem Process Monitor zu schauen, was da passiert.

Viel mehr kann man dazu so gar nicht sagen. Typische Probleme wären z.B. ein unterschiedliches Arbeitsverzeichnis (wird an CreateProcess übergeben), aber da würde kaum ein Netzwerkfehler kommen.
Vielleicht liegt es aber auch am im Programm verwendeten Manifest. Das wäre z.B. ein möglicher Unterschied zwischen einem neuen Projekt mit dem einzelnen Formular und dem Programm. Ich weiß nicht mehr, ob Delphi 6 schon das XPManifest kannte, aber wenn du das verwendest, würde das ja Windows sagen, dass dein Programm für eine über 20 Jahre Windowsversion geschrieben wurde. Da käme dann ggf. die Kompatibilitätsfunktionalität ins Spiel.

Aber für die Fehlerbehandlung wäre es wirklich einfacher, wenn du den Download direkt im Programm machst. Dafür kannst du Delphi 6 ohne Weiteres aufgrund der heutigen Sicherheitsverfahren nicht mehr nutzen (das zum Thema "aber es läuft" :wink:), aber wenn du keine aktuelle Version einsetzen möchtest, kannst du zusätzliche Bibliotheken wie das von Thomas genannte mORMot nutzen. Viele Alternativen hast du da nicht, da die meisten (wie ICS) erst ab Delphi 7 oder noch höher funktionieren. Der große Vorteil ist, dass du direkt die Ergebnisse prüfen kannst und auch direkte Fehlerinformationen bekommst.

mytbo 19. Jun 2023 15:25

AW: CreateProcess WGet WIN10 Tablet
 
Als Ergänzung zu Sebastians Beitrag. Die Vorteile von mORMot sind:
  • mORMot1 ist für Delphi 6 spezifiziert und wird noch einige Jahre supportet.
  • Die mORMot Installation beschränkt sich auf das Setzen der Bibliothekspfade (siehe Hilfe). Es ist in 3 Minuten auf dem Rechner und bei Nichtgefallen in 3 Sekunden wieder gelöscht.
  • Folgendes reicht zum Testen:
    Delphi-Quellcode:
    uses
      SynCommons, SynCrtSock;
     
    var
      url: SockString;
      content: SockString;
      imgFileName: TFileName;
    begin
      url := 'https://tile.openstreetmap.org/10/549/339.png';
      content := HttpGet(url);
      if content <> '' then
      begin
        imgFileName := ChangeFileExt(ExeVersion.ProgramFileName, '.png');
        if FileFromString(content, imgFileName) then
          ShowMessage(Format('Es wurden %s geladen.', [KB(FileSize(imgFileName))]));
      end;
Bis bald...
Thomas

joacim 20. Jun 2023 05:39

AW: CreateProcess WGet WIN10 Tablet
 
nochmal danke,
Die Anregung mit mORMot1 werde ich testen, gerade weil es auch für Delphi 6 vefügbar ist.
Trotzdem würde ich gerne verstehen, welche Eigenart des Tablets sie sonst funktioniernede
Abfrage verhindert.

jaenicke 20. Jun 2023 07:17

AW: CreateProcess WGet WIN10 Tablet
 
Dabei kann ja der genannte Process Monitor helfen. Wenn du die Requests genauer anschauen möchtest, die gesendet werden und insbesondere die Antwort, wäre Wireshark eine Option.

himitsu 20. Jun 2023 10:50

AW: CreateProcess WGet WIN10 Tablet
 
Und auch die Auswertung der Rückgabewerte.

z.B. dein verwendetes ExecuteFile
* egal ob der Befehl erfolgreich war
* oder die Anwendung nicht gefunden wurde (Rückgabe und Fehlercode des CreateProcess -> Result und wenn Fehler MSDN-Library durchsuchenGetLastError)
* oder die Anwendung einen Fehler hatte (deren ExitCode -> MSDN-Library durchsuchenGetExitCodeProcess)
* oder Abbruch durch bTerminate

diese Funktion sagt dazu garnichts



Delphi-Referenz durchsuchenSysErrorMessage
Delphi-Referenz durchsuchenRaiseLastOSError
uvm.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:43 Uhr.
Seite 1 von 2  1 2      

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