2010-04-10 16 views
6

Auf meinem Windows 7-System gibt die GetVersionEx-Windows-API-Funktion "6.0" zurück und zeigt Windows Vista an, wenn sie should "6.1" zurückgibt.GetVersionEx funktioniert nicht unter Windows 7?

Wenn es darauf ankommt, ich den folgenden Delphi-Code verwendet:

function winver: string; 
var 
    ver: TOSVersionInfo; 
begin 
    ver.dwOSVersionInfoSize := SizeOf(ver); 
    if GetVersionEx(ver) then 
    with ver do 
     result := IntToStr(dwMajorVersion) + '.' + IntToStr(dwMinorVersion) + '.' + IntToStr(dwBuildNumber) + ' (' + szCSDVersion + ')'; 
end; 

und die Zeichenfolge "6.0.6002 (Service Pack 2)" wurde zurückgegeben.

Ist das nicht sehr seltsam?

Antwort

9

Ich habe jetzt festgestellt, dass GetVersionEx Vista zurückgibt, wenn meine Anwendung den Delphi 2009-Debugger ausführt, aber Windows 7, wenn die Anwendung allein ausgeführt wird. Ich habe auch festgestellt, dass RAD Studio (Delphi IDE) tatsächlich im Kompatibilitätsmodus für Windows Vista SP2 ausgeführt wird. Daher macht alles einen Sinn, denn, wie von kibab gezeigt, wird ein Kindprozess die Kompatibilitätseinstellungen seines Elternprozesses "erben".

8

Wird Ihre ausführbare Datei mit allen definierten Kompatibilitätseinstellungen ausgeführt (ich nehme an, dies könnte bei älteren Delphi-Anwendungen der Fall sein)? Die Dokumentation von GetVersionEx heißt es:

Wenn Kompatibilitätsmodus aktiviert ist, meldet die GetVersionEx Funktion des Betriebssystems, wie sie sich identifiziert, die das Betriebssystem nicht sein kann, der installiert wird. Wenn beispielsweise der Kompatibilitätsmodus aktiviert ist, meldet GetVersionEx das Betriebssystem, das für die Anwendungskompatibilität ausgewählt wurde.

Vielleicht GetProductInfo kann tun, was Sie wollen?

+0

Delphi 2009 ist nicht wirklich alt ... –

+0

Auch müssen Sie daran denken, dass, wenn Sie Kindprozess erstellen, die comatiblity mit zum Beispiel Vista SP2 gesetzt haben, dann dieser Kindprozess dieses Verhalten erben wird. Beispiel: Sie verwenden TotalCommander mit der Kompatibilität von VistaSP2, dann wird jeder gestartete Prozess von TC auch die VistaSP2-Kompatibilität verwenden. – kibab

+4

Ich habe jetzt festgestellt, dass GetVersionEx Vista zurückgibt, wenn meine Anwendung den Delphi 2009-Debugger ausführt, aber Windows 7, wenn die Anwendung allein ausgeführt wird. –

1

Ich denke, es kann nur du sein. Ihre D2009 wurde möglicherweise durch Windows markiert, da sie im Kompatibilitätsmodus ausgeführt werden muss. Ich habe eine Test-App mit Ihrer Funktion erstellt und kompiliert und sowohl mit D2009 und D2010, im Debugger als auch extern (klicken Sie auf die Exe im Windows Explorer) und für alle 4 Fälle kam es zurück mit: 6.1.7600()

Unter Windows7, 32-Bit.

Verwandte Themen