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/)
-   -   Delphi Probleme mit 64Bit Erkennung des OS (https://www.delphipraxis.net/166742-probleme-mit-64bit-erkennung-des-os.html)

RWarnecke 27. Feb 2012 19:07

Probleme mit 64Bit Erkennung des OS
 
Hallo zusammen,

ich benutze die Funktion IsWow64 aus diesen Beitrag um zu ermitteln, ob es ein 64Bit oder ein 32Bit Betriebssystem ist. Wenn ich jetzt ein 64Bit-Programm erstelle und es auf meinem PC ausführe, funktioniert die Funktion IsWow64 hervorragend. Heute habe ich das Programm mal auf einem anderen PC ebenfalls mit Win7 64Bit ausprobiert und da wird mir angezeigt, das ich ein 32Bit Betriebssystem installiert habe. Es ist aber definitiv auf beiden PC's ein 64Bit Windows installiert.

Woran könnte es liegen, dass ein 64Bit-Programm welches mit Delphi XE2 erstellt wurde, mit der Funktion IsWow64 auf dem einen PC funktioniert und auf dem anderen nicht ?

Wie gesagt, es gibt keinen Fehler oder sonstigen Hinweis. Auf PC1 liefert mir die Funktion True zurück und auf PC2 liefert mir die Funktion False zurück.

Bernhard Geyer 27. Feb 2012 19:11

AW: Probleme mit 64Bit Erkennung des OS
 
Ist für die Exe evtl auf dem anderen PC ein Kompatiblitätsmodus eingestellt?

RWarnecke 27. Feb 2012 19:14

AW: Probleme mit 64Bit Erkennung des OS
 
Hallo Bernhard,

danke für Deine Antwort. Nicht das ich wüsste, da ich die erstellte EXE einfach von meiner Platte auf einen USB-Stick kopiert habe und dann vom USB-Stick auf dem PC2 ausgeführt habe.

Edit: Ich habe jetzt nochmal, mein Programm auf PC1 ausprobiert. Jetzt gibt er mir den gleichen Wert wie auf PC2 aus. Alles irgendwie misteriös. :gruebel: Ich könnte schwören, dass er gestern Abend noch am PC1 True als Rückgabewert hatte.

Edit2: Wer lesen kann ist klar im Vorteil. Hier die Erklärung :
Zitat:

Wow64Process [out]

A pointer to a value that is set to TRUE if the process is running under WOW64. If the process is running under 32-bit Windows, the value is set to FALSE. If the process is a 64-bit application running under 64-bit Windows, the value is also set to FALSE.

himitsu 27. Feb 2012 20:04

AW: Probleme mit 64Bit Erkennung des OS
 
Kompatibilitätsmodus sollte eigentlich kein Problem sein, denn in einem 64 Bit Prozess sollte IsWow64Process immer True False liefern, da es so oder so ein 64 Bit-Prozess bleiben wird und demnach auch immer nur in einem 64 Bit-OS laufen kann.

Bei einem 32 Bit-Programm könnte es anders sein, entweder es weiß daß es in einem 64 Bit-OS läuft oder ihm wird über den Kompatibilitätsmodus vorgegaugelt, daß es es eigentlich in einem 32 Bit-OS liefe.

Bernhard Geyer 27. Feb 2012 20:10

AW: Probleme mit 64Bit Erkennung des OS
 
Zitat:

Zitat von himitsu (Beitrag 1153252)
... enn in einem 64 Bit Prozess sollte IsWow64Process immer True liefern, da es so oder so ein 64 Bit-Prozess bleiben wird und demnach auch immer nur in einem 64 Bit-OS laufen kann.

Und wie soll eine 64-Bit Prozess im Windows32OnWindows64 laufen (Abgekürzt WoW64)? :-)

himitsu 27. Feb 2012 20:22

AW: Probleme mit 64Bit Erkennung des OS
 
Kompatibilitätsmodus?

IsWow64Process gibt an, daß der Prozess in einem 64 Bit-OS läuft.

Ups nee, es war genau andersrum.
Es ist dann immer False. :oops:

OK, also IsWow64Process gibt quasi an, daß der Prozess in einem OS läuft, welches nicht seiner Bitbreite entspricht.

Theoretisch, wäre IsWow64Process in der 64 Bit-API sinnlos, genauso wie in der API eines 32 Bit-OS, aber da gibt es das ja dennoch, damit Code kompatibel bleibt.



Aber wie gesagt, bei einem 64 Bit-Programm sollte es keinen Unterschied machen und immer True ähhh False liefern. :angle:
Bleiben dann wohl nur 2 Möglichkeiten:
- Bug im OS und in dessen Implementierung. (müßte man im Debugger > CPU-Ansicht < mitbekommen, denn in der Funktion sollte einfach nur das Regiater RAX auf 0 gesetzt werden)
- Fehler in der Implementation (aber die sieht eigentlich OK aus)

RWarnecke 27. Feb 2012 20:40

AW: Probleme mit 64Bit Erkennung des OS
 
Anscheinend ist es von der WinAPI so vorgegeben. Siehe MSDN-Library durchsuchenIsWow64Process Von dieser Seite stammt auch mein Zitat von Beitrag #3.

himitsu 27. Feb 2012 20:55

AW: Probleme mit 64Bit Erkennung des OS
 
Bei einem Bug der WinAPI könnte man es eventuell über MSDN-Library durchsuchenGetNativeSystemInfo versuchen.

Luckie 27. Feb 2012 21:03

AW: Probleme mit 64Bit Erkennung des OS
 
32 Bit Exe, 32-Bit OS: WOW64 -> False
64 Bit Exe, 32-Bit OS: -
32 Bit Exe, 64-Bit OS: WOW64 -> True
64 Bit Exe, 64-Bit OS: WOW64 -> False

Aber man weiß ja, ob man eine 64-Bit oder 32-Bit Anwendung compiliert hat.

himitsu 27. Feb 2012 22:10

AW: Probleme mit 64Bit Erkennung des OS
 
Das schon, aber nun denk dir eine Komponente, die jemand nicht nur für sich alleine verwenden möchte, welche aber als 32 und 64 Bit kompiliert werden könnte.

OK, man könnte alles mit Compilerschaltern vollpappen, aber theoretisch wäre es hier nicht nötig.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 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