AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi GetExitCodeProcess liefert falsche Werte unter 64BIT(vista)?

GetExitCodeProcess liefert falsche Werte unter 64BIT(vista)?

Ein Thema von decrypted · begonnen am 6. Jun 2008 · letzter Beitrag vom 10. Jun 2008
Antwort Antwort
decrypted

Registriert seit: 6. Jun 2008
5 Beiträge
 
#1

GetExitCodeProcess liefert falsche Werte unter 64BIT(vista)?

  Alt 6. Jun 2008, 22:48
Hallo,

ich versuche es kurz zu machen. Wenn Nachfragen - GERNE!

Ich habe eine app, die 200 bzw 300 als EXITCODE setzt. Ausführen in cmd und echo %ERRORLEVEL% gibt sowohl bei 64 und 32Bit environment die richtigen werte zurück also 200 oder 300

Nun habe ich eine delphi app die GetExitCodeProcess called. Bei 32Bit systemen kommt auch super 200 oder 300 als result von GetExitCodeProcess an. Bei 64bit (vista) environment aber 5482396 (statt 300).

MSDN hab ich gecheckt. Typen sehen gut aus bei mir ist auch alles DWORD.

BOOL WINAPI GetExitCodeProcess(
__in HANDLE hProcess,
__out LPDWORD lpExitCode
);

Vorschläge (Außer auch auf 300 or 5482396 zu matchen ) ?

Danke!
Daniel
  Mit Zitat antworten Zitat
decrypted

Registriert seit: 6. Jun 2008
5 Beiträge
 
#2

Re: GetExitCodeProcess liefert falsche Werte unter 64BIT(vis

  Alt 6. Jun 2008, 23:08
es wird immer interessanter ... es ist scheinbar auch kein normaler overflow ... denn 200 => 5482396 und 300 => 5482396
aber das ist nicht 1000% confirmed
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: GetExitCodeProcess liefert falsche Werte unter 64BIT(vis

  Alt 7. Jun 2008, 10:39
Wie viel Bit hat das Programm mit dem du den Exitcode versuchst abzufragen? Und erklär am besten noch mal die Bit Konstellation von Betriebsystem und allen beteiligen Programmen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
decrypted

Registriert seit: 6. Jun 2008
5 Beiträge
 
#4

Re: GetExitCodeProcess liefert falsche Werte unter 64BIT(vis

  Alt 7. Jun 2008, 10:49
Hi, danke für dein Interesse

alles 32Bit programme - selfmade.

Einmal laufen beide in einem 32Bit Env - alles super.
Wenn sie beide in einem 64Bit (Vista) Env laufen gibt es das problem.

Das Programm, was den ExitCode setzt, gibt in cmd.exe, in beiden umgebungen, den exitcode so zurück, das %ERRORLEVEL% den richtigen Wert hat.

Daniel
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.479 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: GetExitCodeProcess liefert falsche Werte unter 64BIT(vis

  Alt 7. Jun 2008, 11:01
Zitat von decrypted:
Wenn sie beide in einem 64Bit (Vista) Env laufen gibt es das problem.
Also ich habe gerade unter Vista 64 ein zwei kleine 32Bit Delphi Programme geschrieben. Das eine startet das andere, wartet bis es beendet ist und gibt dann die GetExitCodeProcess aus. Bei 200 kommt 200 zurück und bei 300 kommt 300 zurück. Hast du vielleicht eine Speicherüberschreibung irgendwo?
  Mit Zitat antworten Zitat
decrypted

Registriert seit: 6. Jun 2008
5 Beiträge
 
#6

Re: GetExitCodeProcess liefert falsche Werte unter 64BIT(vis

  Alt 7. Jun 2008, 11:28
Zitat von jbg:
Zitat von decrypted:
Wenn sie beide in einem 64Bit (Vista) Env laufen gibt es das problem.
Also ich habe gerade unter Vista 64 ein zwei kleine 32Bit Delphi Programme geschrieben. Das eine startet das andere, wartet bis es beendet ist und gibt dann die GetExitCodeProcess aus. Bei 200 kommt 200 zurück und bei 300 kommt 300 zurück. Hast du vielleicht eine Speicherüberschreibung irgendwo?
Hmm eine die nur bei 64Bit greift hmmmmmmm .... segfault gibt es bei beiden programmen nicht.
Ich hatte auch schon mal daran gedacht, zu testen was passiert wenn ich einfach direkt ExitProcess(300); aufrufe - wobei die shell ja immer den richtigen Wert sieht. Daher denke ich das es eher an dem programm liegt das GetExitCodeProcess called.

Was für einen Typen benutzt du nach dem Createprocess für den GetExitCodeProcess? DWORD? Es ist ja ein var daher ist den falsch zu typen auch eher schwierig ...

Gehe ich recht der annahme, das du das auch auf dem environment compiled hast? Sollte ja bei delphi eigenlich keine rolle spielen ...


BTW: ich teste das mit D2k7 December Update.

Werd ich wohl auch mal ein test app schreiben müssen ... nach dem GetExitCodeProcess wird nicht mehr viel mit dem Wert gemacht - nur als Result zugeweisen und dann in der funktion die aufruft ausgegeben und ausgewertet. Viel mit speicher überschreiben kann bis dahin ja nicht passieren. Zumal es ja ein fixsize type ist, so ein DWORD, und nicht irgendwelche buffer zu klein sein können.


Grüße
Daniel
  Mit Zitat antworten Zitat
decrypted

Registriert seit: 6. Jun 2008
5 Beiträge
 
#7

Re: GetExitCodeProcess liefert falsche Werte unter 64BIT(vis

  Alt 10. Jun 2008, 11:15
Hi,

ok es hat sich geklärt. Kurz:

GetExitCodeProcess liefert *KEINE* falsche Werte unter 64BIT - es verhält sich nur leicht anders.

-

Am Ende lag es trotz allem an dem tool was den ExitCode setzt. Obwohl in beiden environments auf der console mit %EXITLEVEL% richtig zu sehen lag es am setzen des ExitCode. Nachdem ich diesen jetzt erst im letzten finally setzte kommt er sauber an.


Danke!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:50 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