Autor Beitrag
stiftmaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: Di 02.03.10 00:06 
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:

ausblenden 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 user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Di 02.03.2010 um 14:59
stiftmaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: 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: www.koders.com/delph...FF44CE03354F4AA.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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 162


Delphi 5, Delphi 7, Delphi 2007, Delphi 2009, Delphi XE, Delphi 10 Seattle
BeitragVerfasst: 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:

ausblenden volle Höhe 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 >= 5then begin
           if (MinorVer = 0then
              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 24and $FF;
        OrdLow := (OSVersion.dwBuildNumber shr 16and $FF;
        if (OrdLow >= 90or (OrdHigh >= 5then
           WinVersion := 'Windows Millennium';
        if (OrdLow >= 10and (OrdLow < 90then
           WinVersion := 'Windows 98';
        if (OrdLow < 10then
           WinVersion := 'Windows 95';
     end;
     result := WinVersion;
end;