AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OS Version ermitteln

Ein Thema von Luckie · begonnen am 30. Nov 2010 · letzter Beitrag vom 31. Dez 2010
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

OS Version ermitteln

  Alt 30. Nov 2010, 03:51
Ich weiß, dass es davon genug Versionen gibt, also warum nicht noch eine?

Könntet ihr es bitte mal testen? Ich habe es unter Windows 7 unter den verschiedenen Kompatibilitätsmodi ausprobiert. Klappt alles, bis auf Server 2008, da bekomme ich immer Vista raus.

Projekt im Anhang.
Angehängte Dateien
Dateityp: zip Project1.zip (199,8 KB, 65x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

AW: OS Version ermitteln

  Alt 30. Nov 2010, 06:26
Hallo Michael

1. Sehe ich es richtig: Wenn Architecture = AMD64 dann 64-bit, wenn Architecture = Intel dann 32-bit ?

Delphi-Quellcode:
GetSystemInfo(si);
  if (osvi.dwMajorVersion >= 6) then
  begin
    if (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64) then
      Result := Result + ' 64-bit'
    else if (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL) then
      Result := Result + ' 32-bit';
  end;
end
2. LoadLibrary ... FreeLibrary (zudem lädst du zwei Mal den Kernel)

3. (Noch) nicht Unicode tauglich.

Aufruf von GetVersionEx gibt Fehler 'The data area passed to a system call is too small'.
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#3

AW: OS Version ermitteln

  Alt 30. Nov 2010, 07:28
Hallo Michael,

auf einer Windows XP Professional SP3 Installation kommt als Ergebnis:

---------------------------
Project1
---------------------------
Windows XP Home Edition Service Pack 3 Build: 2600
---------------------------
OK
---------------------------

Ich habe mir zwar mal den Quelltext angeschaut, nur finde ich da ohne Delphi gerade den Fehler nicht. Für die Windows-API GetProductInfo gibt es noch mehr Ergbenisse. Die API arbeitet sehr zuverlässig, da ich diese bei mir im SystemInfo einsetze.

Edit:
Um zu überprüfen, ob das OS 32Bit oder 64Bit ist, würde ich diese Funktion nehmen :
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//
// Bestimmen ob das Betriebssystem 64Bit ist oder nicht
//
function IsWow64: Boolean;
type
  TIsWow64Process = function(Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;
var
  IsWow64Result: Windows.BOOL; // Result from IsWow64Process
  IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
begin
  // Try to load required function from kernel32
  IsWow64Process := Windows.GetProcAddress(Windows.GetModuleHandle('kernel32'), 'IsWow64Process');
  if Assigned(IsWow64Process) then
  begin
    // Function is implemented: call it
    if not IsWow64Process(Windows.GetCurrentProcess, IsWow64Result) then
      raise SysUtils.Exception.Create('IsWow64: bad process handle');
    // Return result of function
    Result := IsWow64Result;
  end
  else
    // Function not implemented: can't be running on Wow64
    Result := False;
end;
Dazu gibt es auch einen Beitrag hier im Forum, finde aber zu Zeit den Link nicht mehr.
Rolf Warnecke
App4Mission

Geändert von RWarnecke (30. Nov 2010 um 08:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jens Hartmann
Jens Hartmann

Registriert seit: 11. Jan 2009
Ort: Wilnsdorf
1.439 Beiträge
 
Delphi XE2 Professional
 
#4

AW: OS Version ermitteln

  Alt 30. Nov 2010, 08:50
Hallo Michael,

leider Funktioniert es bei Windows 7 Professional 64-Bit auch nicht. Da kommt die Meldung 32-Bit.

Gruß Jens
Angehängte Grafiken
Dateityp: png Test.PNG (7,4 KB, 51x aufgerufen)
Jens Hartmann
Das Leben selber ist zu kurz, also nutze jeden Tag wie er kommt.
  Mit Zitat antworten Zitat
Benutzerbild von Nersgatt
Nersgatt

Registriert seit: 12. Sep 2008
Ort: Emlichheim
693 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: OS Version ermitteln

  Alt 30. Nov 2010, 09:03
Windows 7 Prof 32 Bit: Passt
Windows XP home SP3: Passt nicht
---------------------------
Project1
---------------------------
Windows XP Professional Service Pack 3 Build: 2600
---------------------------
OK
---------------------------
(schön wärs )
Jens
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: OS Version ermitteln

  Alt 30. Nov 2010, 10:10
Hallo.

Prinzipiell stimmts bei mir:

---------------------------
Project1
---------------------------
Windows Vista rocessExefileBusiness Edition Service Pack 1 Build: 6001 32-bit
---------------------------
OK
---------------------------

Aber da hat sich glaube ich irgendwas dazwischen geschummelt, was da nicht hingehört
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: OS Version ermitteln

  Alt 31. Dez 2010, 14:57
Um zu überprüfen, ob das OS 32Bit oder 64Bit ist, würde ich diese Funktion nehmen :
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
//
// Bestimmen ob das Betriebssystem 64Bit ist oder nicht
//
function IsWow64: Boolean;
type
  TIsWow64Process = function(Handle: Windows.THandle; var Res: Windows.BOOL): Windows.BOOL; stdcall;
var
  IsWow64Result: Windows.BOOL; // Result from IsWow64Process
  IsWow64Process: TIsWow64Process; // IsWow64Process fn reference
begin
  // Try to load required function from kernel32
  IsWow64Process := Windows.GetProcAddress(Windows.GetModuleHandle('kernel32'), 'IsWow64Process');
  if Assigned(IsWow64Process) then
  begin
    // Function is implemented: call it
    if not IsWow64Process(Windows.GetCurrentProcess, IsWow64Result) then
      raise SysUtils.Exception.Create('IsWow64: bad process handle');
    // Return result of function
    Result := IsWow64Result;
  end
  else
    // Function not implemented: can't be running on Wow64
    Result := False;
end;
Das scheint nur mit 32-Bit-Programmen zu funktionieren, was auch logisch ist, weil 64-Bit-Programme nicht unter "wow64" laufen. Also ist diese Funktion als universeller Quelltext für 32- und 64-Bit-Compilate (Lazarus!) untauglich. Mit den Compilerschaltern {$IFDEF CPU32},{$IFDEF CPU64}, {$IFDEF WIN32} und/oder {$IFDEF WIN64} ist aber eine zufriedenstellende Anpassung und Ergänzung dieser Funktion möglich, so daß bei 64-Bit-Compilaten (die auf Win32-System ohnehin nicht laufen) automatisch der Wert true zurückgegeben wird.

Zu ergänzen wäre noch, daß

- unter Windows 32 Bit 64-Bit-Prozessoren von Lazarus nicht als solche (also mit 64 Bit) erkannt werden (das ist naheliegend)
- Lazarus 32 Bit unter Windows 64 Bit auch nur 32 Bit sowohl beim Prozessor als auch beim Betriebsprogramm erkennt (was m.E. ebenso naheliegend ist),

so daß mir nicht klar ist, wann {$IFDEF CPU32}<>{$IFDEF CPU64} und/oder {$IFDEF WIN32}<>{$IFDEF WIN64} jemals eintreffen sollte (CPU64 kann nur unter WIN64 festgestellt werden, umgekehrt gilt das erst recht).

Also, die obige Prozedur z.B. mit einem der beiden 32-Bit-Compilerschalter "eingekreist" (oder eingeleitet) und einem Else-Schalter (alternativ: Einer der beiden 64-Bit-Compilerschalter), der die Funkttion bei 64 Bit mit einem einfachen true zurückliefert, müßte das diese Funktion auch Bitanzahl-Plattform-übergreifend komplettieren.

Geändert von Delphi-Laie (31. Dez 2010 um 17:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz