AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

GetVersionEx unter Windows 10

Ein Thema von greenmile · begonnen am 18. Dez 2014 · letzter Beitrag vom 21. Dez 2014
Antwort Antwort
Seite 4 von 4   « Erste     234
dGeek
(Gast)

n/a Beiträge
 
#31

AW: GetVersionEx unter Windows 10

  Alt 20. Dez 2014, 23:00
Zitat:
Ein 8.0 lässt sich auch mit GetVersionEx korrekt erkennen, 8.1 und höher nur dann, wenn die Applikation ein Manifest mit passender Kompatibilität aufweist.
Ich hatte es eben mal unter Windows 10 getestet und dort wird Windows von meiner Software korrekt erkannt, obwohl ich GetVersionEx(W) nutze.
Spezielle Manifeste nutze ich nicht
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.635 Beiträge
 
Delphi 5 Professional
 
#32

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 01:17
Zitat:
Ein 8.0 lässt sich auch mit GetVersionEx korrekt erkennen, 8.1 und höher nur dann, wenn die Applikation ein Manifest mit passender Kompatibilität aufweist.
Ich hatte es eben mal unter Windows 10 getestet und dort wird Windows von meiner Software korrekt erkannt, obwohl ich GetVersionEx(W) nutze.
Spezielle Manifeste nutze ich nicht
Da gibt es nur 3 Möglichkeiten:
  • kein GetVersionEx benutzt bzw. (nur) die neuen Funktionen
  • das Manifest gibt Kompatibilität mit Win10 an; das muss ja kein spezielles Manifest sein, k.a. ob irgendein neueres Delphi die Kompatibilität im Manifest hat, wobei ich das für Win10 nicht so recht glaube (aber wir sind ja hier nicht in der Kirche )
  • du benutzt nicht nur GetVersionEx sondern (auch) andere Methoden, wie z.B. die hier im Thread erwähnte Registry
MfG Dalai
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.045 Beiträge
 
Delphi 11 Alexandria
 
#33

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 07:35
Ein 8.0 lässt sich auch mit GetVersionEx korrekt erkennen, 8.1 und höher nur dann, wenn die Applikation ein Manifest mit passender Kompatibilität aufweist.
Wenn es das nicht tut, dann wird es wie ein altes Programm behandelt und einige Dinge werden emuliert/umgeleitet, damit es fast so ist, als liefe es in einem alten Windows.
Und somit hat sich das Problem auch gelöst.

Ob es aber inntelligent ist, das Programm einfach nicht mehr zu starten, nur weil das Windows angeblich zu neu ist, ist auch keine gute Lösung.
> Schadensersatzansprüche?

Dann bringt Mikrosoft ein Windowsupdate raus, das ändert die Version und schon knallt es wieder, weil sich die Version geändert hat.

Eine Warnmeldung wäre ja auch möglich.
Und wie bereits erwähnt, kann man die Zukunft nicht planen, also kann man mit Sicherheit nur auf alte Versionen reagieren und eine Warnung/Funktionsverweigerung explizit auf "bekannte" Probleme ausrichten.
"Sie verwenden Windows 98. Hier gibt bekannte es es Probleme, welche die korekte Funktion des Programms beeinflussen ... Tschüss"
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (21. Dez 2014 um 07:37 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.075 Beiträge
 
Delphi 10.4 Sydney
 
#34

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 08:10
Soweit ich das verstehe - also Bitte an die Wissenden: korrigieren wenn ich es falsch verstanden habe - die neue API ist ein Ersatz für die alten Funktionen GetVersion und GetVersionEx ab Windows 8.0. Mit allen vorherigen Versionen funktioniert GetVersion und GetVersionEx nach wie vor.
Ab Win8.1, wobei es möglich ist, dass MS hier seit 8.0 anregte, die neuen Funktionen zu nutzen bzw. die alten nicht zu benutzen. Ein 8.0 lässt sich auch mit GetVersionEx korrekt erkennen, 8.1 und höher nur dann, wenn die Applikation ein Manifest mit passender Kompatibilität aufweist.
Das ist aber schon seit Windows Vista so. Nicht umsonst laufen unsere Anwendungen mit 4 ID für Vista, 7, 8 und 8.1
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#35

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 10:20
Und wie bereits erwähnt, kann man die Zukunft nicht planen, also kann man mit Sicherheit nur auf alte Versionen reagieren....
Die Formulierung "die Zukunft zu planen" gefällt mir

Mein Versuch das zu tun sieht so aus:

Delphi-Quellcode:

function WindowsBuildFromRegistry: Boolean;
var
  s: string;
begin
  Result := false;
  with TRegistry.Create(KEY_EXECUTE) do
  try
    RootKey := HKEY_LOCAL_MACHINE;
    if OpenKeyReadOnly(rsRegWinVerInfoKey) then
    try
      OSInfo.dwBuildNumber := Cardinal(StrToIntDef(ReadString('CurrentBuildNumber'),0));
      Result := true;
    except
    end;
    CloseKey;
  finally
    Free;
  end;
end;

function GetWinVersion: TWinVersion;
begin
  Result := WinUnknown;
  case OSInfo.dwPlatformId of
    VER_PLATFORM_WIN32s : Result := Win32s;
    VER_PLATFORM_WIN32_WINDOWS : begin
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0)
      then Result := Win95;
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 10)
      then Result := Win98;
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 90)
      then Result := WinME;
    end;{-VER_PLATFORM_WIN32_WINDOWS-}
    VER_PLATFORM_WIN32_NT: begin
      if (OSInfo.dwMajorVersion = 4) and (OSInfo.dwMinorVersion = 0)
      then Result := WinNT;
      if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 0)
      then Result := Win2000;
      if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 1)
      then Result := WinXP;
      if (OSInfo.dwMajorVersion = 5) and (OSInfo.dwMinorVersion = 2) then
      begin
        if GetSystemMetrics(SM_SERVERR2) <> 0
        then Result := Win2003R2 else
        if (OSInfo.wProductType = VER_NT_WORKSTATION)
        then Result := WinXP64 else
        if OSInfo.wSuiteMask = VER_SUITE_WH_SERVER
        then Result := WinHomeSrv
        else Result := Win2003;
      end;
      if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 0) then
      begin
        if (OSInfo.wProductType = VER_NT_WORKSTATION)
        then Result := WinVista
        else Result := Win2008;
      end;
      if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 1) then
      begin
        if (OSInfo.wProductType = VER_NT_WORKSTATION)
        then Result := Win7
        else Result := Win2008R2;
      end;
      if (OSInfo.dwMajorVersion = 6) and (OSInfo.dwMinorVersion = 2) then
      begin
        if WindowsBuildFromRegistry then begin
          case OSInfo.dwBuildNumber of
            9200 : case OSInfo.wProductType of
                     VER_NT_WORKSTATION : Result := Win8;
                     VER_NT_DOMAIN_CONTROLLER : Result := Win2012;
                     VER_NT_SERVER : Result := Win2012;
                   end;
            9600 : case OSInfo.wProductType of
                     VER_NT_WORKSTATION : Result := Win81;
                     VER_NT_DOMAIN_CONTROLLER : Result := Win2012R2;
                     VER_NT_SERVER : Result := Win2012R2;
                   end;
            9841..9880 : Result := Windows10; // Die Preview ist aktuell bei Build 9879
          end;
        end;
      end;
    end;{-VER_PLATFORM_WIN32_NT-}
  end;
end;
Wobei die Manifeste natürlich mit jeder neuen Win-Version angepasst werden.

[edit]Die Windows-Version-Prüfung habe ich natürlich in eine DLL ausgelagert, d.h. wenn z.B. in Kürze ein neues Buid der 10-er Preview kommt, dann tausche ich einfach die DLL aus und muss nicht gleich die komplette App neu compilieren
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS

Geändert von mm1256 (21. Dez 2014 um 10:24 Uhr)
  Mit Zitat antworten Zitat
Insider2004
(Gast)

n/a Beiträge
 
#36

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 10:42
Übertreibt ihr nicht ein wenig? Ich hatte seit 20 Jahren nie die Notwendigkeit, die Windows Version abzufragen. Mein Zeugs ist so gemacht, dass es auf allen Windowsen läuft.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
640 Beiträge
 
Delphi 10.1 Berlin Professional
 
#37

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 10:57
Nun, "laufen" ist die eine Sache, aber wie löst du OS-Abhängige Situationen, z.B. wenn deine App unter normalem Userkontext läuft, und du eine App mit Admin-Rechten starten musst. Ein Beispiel, wie ich meine, wo man das OS kennen sollte oder muss:

Delphi-Quellcode:
{------------------------------------------------------------------------------}
{-- Anwendung starten, wenn nötig mit Admin-Rechten                          --}
{------------------------------------------------------------------------------}
function RuWin_ShellExec(aHandle: HWND; FileName, Parameters, Directory: string;
                         ShowCmd: Integer; AsAdmin, Wait: boolean): Boolean;
var
  SEI: TShellExecuteInfo;
begin
  FillChar(SEI, SizeOf(SEI), #0);
  SEI.cbSize := SizeOf(SEI);
  SEI.Wnd := aHandle;
  SEI.fMask := SEE_MASK_NOCLOSEPROCESS;
  {-Bis zu XP "AsAdmin" automatisch ignorieren-}
  if WindowsVersion < WinVista then AsAdmin := false;
  if AsAdmin
  then SEI.lpVerb := 'runas'
  else SEI.lpVerb := 'open';
  SEI.lpFile := PChar(FileName);
  SEI.lpParameters := PChar(Parameters);
  SEI.lpDirectory := PChar(Directory);
  SEI.nShow := ShowCmd;
  Result := ShellExecuteEx(@SEI);
  if Result then
  if Wait then begin
    if SEI.hProcess > 32 then begin
      WaitForInputIdle(SEI.hProcess, INFINITE);
      WaitForSingleObject(SEI.hProcess, INFINITE);
    end;
  end;
  CloseHandle(SEI.hProcess);
end;
Oder, wie löst man das besser?
Gruss Otto
Wenn du mit Gott reden willst, dann bete.
Wenn du ihn treffen willst, schreib bei Tempo 220 eine SMS
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.075 Beiträge
 
Delphi 10.4 Sydney
 
#38

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 11:12
Nun, "laufen" ist die eine Sache, aber wie löst du OS-Abhängige Situationen,
Für einfache Anwendungen beschränkt man sich halt auf das kleinest OS.
Und mit dynamischen Laden der API-Einsprungspunkte kann man auch einiges abfangen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
greenmile

Registriert seit: 17. Apr 2003
1.103 Beiträge
 
Delphi 10.3 Rio
 
#39

AW: GetVersionEx unter Windows 10

  Alt 21. Dez 2014, 11:44
Ich finde das alles ein wenig Overkill. Ich binde die Ressource mit $R ein und gut is'. So schnell kommen keine neuen Windows Versionen und falls mal eine ganz plötzlich um die Ecke kommt passe ich meine Ressource an. Ist mir lieber als Registry-Einträge zu lesen, die können morgen auch weg sein.
  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 03:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf