2010-04-10 17 views
6

En mi sistema Windows 7, la función GetVersionEx API de Windows devuelve "6.0", que indica Windows Vista, cuando should devuelve "6.1".¿GetVersionEx no funciona en Windows 7?

Si importa, he utilizado el siguiente código de Delphi:

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; 

y la cadena "6.0.6002 (Service Pack 2)" fue devuelto.

¿No es esto muy extraño?

Respuesta

9

Ahora encontré que GetVersionEx devuelve Vista cuando mi aplicación se ejecuta a través del depurador Delphi 2009, pero Windows 7 cuando la aplicación se ejecuta sola. También encontré que RAD Studio (Delphi IDE) realmente se ejecuta en modo compatibilidad para Windows Vista SP2. Por lo tanto, todo tiene sentido, ya que, como lo señala kibab, un proceso secundario "heredará" la configuración de compatibilidad de su proceso principal.

8

¿Se está ejecutando su ejecutable con cualquier configuración de compatibilidad definida (supongo que este podría ser el caso para las aplicaciones heredadas de Delphi)? La documentación de GetVersionEx afirma:

Si el modo de compatibilidad es, en efecto, la función GetVersionEx informa al sistema operativo como se identifica a sí mismo, que puede no ser el sistema operativo que está instalado. Por ejemplo, si el modo de compatibilidad está en vigencia, GetVersionEx informa el sistema operativo que se selecciona para la compatibilidad de la aplicación.

Tal vez GetProductInfo puede hacer lo que usted quiere?

+0

Delphi 2009 no es realmente antiguo ... –

+0

También debe recordar que si está creando un proceso secundario que haya configurado la compatibilidad con, por ejemplo, Vista SP2, ese proceso secundario también heredará ese comportamiento. Ejemplo: está usando TotalCommander con compatibilidad VistaSP2, luego cada proceso iniciado por TC también usará compatibilidad con VistaSP2. – kibab

+4

Ahora encontré que GetVersionEx devuelve Vista cuando mi aplicación se ejecuta a través del depurador Delphi 2009, pero Windows 7 cuando la aplicación se ejecuta sola. –

1

Creo que puede ser solo usted. es decir, su D2009 puede haber sido marcado por Windows, ya que necesita ejecutarse en modo compatibilidad. Hice una aplicación de prueba con su función, compilé y ejecuté tanto con D2009 como con D2010, dentro del depurador y externamente (haga clic en el exe en el explorador de Windows), y para los 4 casos, regresó con: 6.1.7600()

Se está ejecutando en Windows 7, 32 bits.

Cuestiones relacionadas