Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi falsche Windows Version wird angezeigt (https://www.delphipraxis.net/186261-falsche-windows-version-wird-angezeigt.html)

Horst0815 18. Aug 2015 20:16


falsche Windows Version wird angezeigt
 
manifest ist eingebunden

Delphi-Quellcode:
 
.....

var OSVersionInfo: TOSVersionInfoEx;

.....

     if (OsVersionInfo.dwMajorVersion = 10) and (OsVersionInfo.dwMinorVersion = 0) then
      begin
        if (OsVersionInfo.wProductType = VER_NT_WORKSTATION) then
          begin
               VersionString := 'Windows 10';
               VersionTyp   := wvWin10;
          end
        else
          begin
               VersionString := 'Windows Server 2016'; //Windows Server Technical Preview
               VersionTyp   := wvWinServer2016;
          end;
      end;
ausgelesen wird immer "Windows Server 2016"
habe aber die Windows 10 Pro



Auszug MSDN
Code:
Windows 10                           10.0*   10   0   OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server Technical Preview     10.0*   10   0   OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows 8.1                           6.3*    6   3   OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2012 R2                6.3*    6   3   OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows 8                             6.2     6   2   OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2012                   6.2     6   2   OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
.....

* For applications that have been manifested for Windows 8.1 or Windows 10. Applications not manifested for Windows 8.1 or Windows 10 will return the Windows 8 OS version value (6.2). To manifest your applications for Windows 8.1 or Windows 10, refer to Targeting your application for Windows.

hab ich irgendwas übersehen?


Edit:
Delphi-Quellcode:
OsVersionInfo.wProductType
liefert im übrigen 0 zurück insofern währe der Code ok nur Zeigt mein Windows OsVersionInfo.wProductType falsch an

hoika 18. Aug 2015 21:15

AW: falsche Windows Version wird angezeigt
 
Hallo,
bitte das Manifest mal anhängen.

Heiko

Horst0815 18. Aug 2015 21:19

AW: falsche Windows Version wird angezeigt
 
Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    version="1.0.0.0"
    name="Windows10Tools"
    type="*"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application>
  </compatibility>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>

rampant 18. Aug 2015 21:22

AW: falsche Windows Version wird angezeigt
 
Siehe
http://www.delphipraxis.net/186236-i...-anzeigen.html

Horst0815 18. Aug 2015 21:26

AW: falsche Windows Version wird angezeigt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hab da grad nix gesehen was mir weiterhilft oder hab ich was übersehen

rampant 18. Aug 2015 21:42

AW: falsche Windows Version wird angezeigt
 
#13 bzw. dessen Manifest-Link auf
https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
möglicherweise?

Dalai 18. Aug 2015 21:44

AW: falsche Windows Version wird angezeigt
 
Das Manifest spielt hier keine Rolle bzw. der Fehler ist nicht dort zu suchen, denn es wird ja korrekt in den Abschnitt mit 10.0 (Major.Minor) gegangen; zumal die Compatibility ID für die Workstation und Server-Editionen immer identisch sind. Der Product Type ist falsch. Daher wäre wichtig zu wissen, wie denn die Variable OSVersionInfo gefüllt wird.

Ergänzung: Dass wProductType = 0 ist, kann schonmal nicht sein, denn VER_NT_WORKSTATION ist 1 (und die anderen Werte sind 2 und 3). Das erklärt aber zumindest, warum dein Code das zurückgibt.

MfG Dalai

Horst0815 18. Aug 2015 22:02

AW: falsche Windows Version wird angezeigt
 
Ja aber weil wProductType = 0 bzw. nicht VER_NT_WORKSTATION ist, springt das Programm ja in die Server Schleife


var OSVersionInfo: TOSVersionInfoEx;


Delphi-Quellcode:
      if (OsVersionInfo.dwMajorVersion = 10) and (OsVersionInfo.dwMinorVersion = 0) then
      begin
        if (OsVersionInfo.wProductType = VER_NT_WORKSTATION) then
          begin
               VersionString := 'Windows 10.0';
               VersionTyp   := wvWin10;
          end
        else
          begin
               VersionString := 'Windows Server 2016';
               VersionTyp   := wvWinServer2016;
          end;
          Showmessage(inttostr(OsVersionInfo.wProductType)); //liefert 0
     end;
      if (OsVersionInfo.wSuiteMask and VER_SUITE_PERSONAL) = VER_SUITE_PERSONAL then
        VersionString := VersionString + ' Home Edition'
      else
        VersionString := VersionString + ' Professional';
    end;

ändere ich if (OsVersionInfo.wProductType = VER_NT_WORKSTATION) then in
if (OsVersionInfo.wProductType <> VER_NT_WORKSTATION) then wird Windows 10 erkannt was ja aber falsch ist laut MSDN

OsVersionInfo.dwMajorVersion, OsVersionInfo.dwMinorVersion, OsVersionInfo.szCSDVersion, OsVersionInfo.dwBuildNumber und OsVersionInfo.wSuiteMask wird also richtig ausgelesen warum dann OsVersionInfo.wProductType nicht

Dalai 19. Aug 2015 01:37

AW: falsche Windows Version wird angezeigt
 
Zitat:

Zitat von Horst0815 (Beitrag 1312621)
Ja aber weil wProductType = 0 bzw. nicht VER_NT_WORKSTATION ist, springt das Programm ja in die Server Schleife

Ja, das ist klar. Ich wollte nur klarmachen, dass der Inhalt dieser Variablen mit 0 eigentlich gar nicht sein kann, weil das nicht vorgesehen ist oder zumindest keine dazu passende Konstante existiert.

Zitat:

ändere ich if (OsVersionInfo.wProductType = VER_NT_WORKSTATION) then in
if (OsVersionInfo.wProductType <> VER_NT_WORKSTATION) then wird Windows 10 erkannt was ja aber falsch ist laut MSDN
Das sollst du ja auch nicht ändern. Der bisher gegebene Code passt schon. Das Problem ist aber davor zu suchen.

Zitat:

[...] wird also richtig ausgelesen warum dann OsVersionInfo.wProductType nicht
Das kannst nur du selbst beantworten, solange du den Code dafür (das Füllen der Datenstruktur bzw. den Aufruf von GetVersionEx mit entsprechendem Drumherum) nicht zeigst. Wir können ja nicht hellsehen ;). Kann ja auch was Dummes sein, dass der Teil der Struktur nach dem Aufruf von GetVersionEx genullt wird, absichtlich oder nicht.

MfG Dalai


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