stiftmaster - Di 02.03.10 00:06
Titel: Windows Versionsermittlung: WinMe
Hallo,
heute hatte ich den angenehmen Task zu ermitteln, wieso unsere Software nicht unter Windows ME läuft - weil grundsätzlich spricht nix dagegen, dass sie es tun sollte - und da mehrere Kunden nachgefragt haben...
Naja - das Problem ist ganz einfach: wir machen eine Versionsüberprüfung und die gibt falsche Werte zurück. Folgendes konnte ich in einer VM reproduzieren:
Delphi-Quelltext
1: 2: 3: 4: 5:
| function GetIdString: string; begin Result := 'Platform: ' + IntToStr(Win32Platform) + ' - Major: ' + IntToStr(Win32MajorVersion) + ' - Minor: ' + IntToStr(Win32MinorVersion); end; |
Wenn ich obige Funktion aufrufe, dann wird unter ME angezeigt: 1 - 4 - 90, was auch korrekt ist. Wenn allerdings der Dateiname "Setup.exe" lautet und ich dann die Funktion aufrufe, dann wird 1 - 4 - 10 => Win98 ausgegeben, was falsch ist.
Jemand n' Plan, was das soll. Gibt es dafür n' Lösung. Das kann doch net sein, dass wegen eines Dateinames es so ein Problem gibt, oder übersehe ich da einfach was???
Bin für jeden Tipp dankbar
Gruß
Stefan
PS: ich weiß, dass ME überholt ist, aber was will ich machen :-)
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Di 02.03.2010 um 14:59
stiftmaster - Di 02.03.10 00:42
Hi,
zufällig kam gerade noch ein Kollege vorbei. Der kannte das Problem doch tatsächlich und konnte mir folgenden Link nennen:
http://www.koders.com/delphi/fidA8142CDCA3101614556794922FF44CE03354F4AA.aspx
Damit läuft das tatsächlich - was für ein Driss... Aber eine logische Erklärung, wieso ME bei Setup.exe so etwas macht, gibt es nicht, oder?
Dankend
Stefan
AScomp - Do 11.03.10 20:15
Hallo,
da kommen alte Erinnerungen wieder hoch.
Vor demselben Problem stand ich vor etlichen Jahren auch. Hatte eine Software ähnlich InnoSetup entwickelt und ärgerte mich, dass die setup.exe bei Windows ME ständig Windows 98 als OS ermittelt hat.
Weshalb das so war, konnte niemand sagen.
Allerdings liegt die Vermutung nahe, dass Windows Dateien mit dem Namen "setup.exe" etwas anders interpretiert. So wird beispielsweise aus einer normalen EXE-Datei unter Windows Vista und Windows 7 eine mit Administorrechten gestartete EXE-Datei, sobald sie nach setup.exe umbenannt wird.
Damals funktionierte folg. Funktion dann auch unter ME und mit Dateiname setup.exe korrekt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| function TFormMain.WinSystem: String; var OSVersion: TOSVersionInfo; WinVersion: String; OrdHigh, OrdLow: DWORD; MajorVer, MinorVer: Integer; begin OSVersion.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); GetVersionEx(OSVersion);
if OSVersion.dwPlatformId = VER_PLATFORM_WIN32_NT then begin MajorVer := OSVersion.dwMajorVersion; MinorVer := OSVersion.dwMinorVersion; if (MajorVer >= 5) then begin if (MinorVer = 0) then WinVersion := 'Windows 2000' else WinVersion := 'Windows XP'; end else WinVersion := 'Windows NT'; end; if OSVersion.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS then begin OrdHigh := (OSVersion.dwBuildNumber shr 24) and $FF; OrdLow := (OSVersion.dwBuildNumber shr 16) and $FF; if (OrdLow >= 90) or (OrdHigh >= 5) then WinVersion := 'Windows Millennium'; if (OrdLow >= 10) and (OrdLow < 90) then WinVersion := 'Windows 98'; if (OrdLow < 10) then WinVersion := 'Windows 95'; end; result := WinVersion; end; |