Zitat von
Hobby-Programmierer:
Vielleicht zeigst du mal den Code damit wir uns selber schnell was basteln können zum testen.
Das stammt aus DelphiWorks, einer OpenSource-Lib die ich vor Jahren mal öffentlich gepflegt (delphiworks.sourceforge.net) und dann irgendwann aus Zeitmangel eingestellt habe. Bezogen auf den Mehraufwand das Ding zu veröffentlichen statt nur im Hausgebrauch zu verwenden. Die aktuelle Version 1.5 ist im Anhang. Die betreffende Funktion ist dwGetOS() in der dwWinSystem.pas sowie dwGetOSName() in der selben
Unit.
Zitat von
Hobby-Programmierer:
Auf meinem Acer Server spielt deine Version 5 verrückt. Irgendwie schlägt der Zufallsgenerator zu. Startet man dein Programm öfter nacheinander (jeweils nur eine Instanz aktiv) kommen gelegentlich versch. Versionen raus. Bisher hatte ich:
Microsoft Windows Server 2003
Microsoft Windows Server 2003 Security Appliance
Microsoft Windows Server 2003 Enterprise Edition
Microsoft Windows Server 2003 Web Edition.
Betreffender Abschnitt ab Zeile 296:
Delphi-Quellcode:
if (OSV.wSuiteMask and VER_SUITE_DATACENTER) <> 0 then begin
result:= OS_WINDOWS_SERVER_2003_DATACENTER;
end else if (OSV.wSuiteMask and VER_SUITE_ENTERPRISE) <> 0 then begin
result:= OS_WINDOWS_SERVER_2003_ENTERPRISE;
end else if (OSV.wSuiteMask and VER_SUITE_SECURITY_APPLIANCE) <> 0 then begin
result:= OS_WINDOWS_SERVER_2003_SECAPPL;
end else if (OSV.wSuiteMask and VER_SUITE_BLADE) <> 0 then begin
result:= OS_WINDOWS_SERVER_2003_WEBEDITION;
end else if (OSV.wSuiteMask and VER_SUITE_WH_SERVER) <> 0 then begin
result:= OS_WINDOWS_HOME_SERVER_2003;
end else begin
result:= OS_WINDOWS_SERVER_2003;
end;
Würde dann bedeuten, dass OSV von GetVersionEx nicht richtig initialisiert wird, seltsam.
Zitat von
Hobby-Programmierer:
Die Startzeit von ca. 2 Sekunden - selbst in der VM macht mich zumindest misstrauisch.
Mich aber auch... Bei mir startet das Ding ratzfatz, egal ob in der VM (VirtualPC) oder auf dem Hostsystem. Dass die Anwendung keinen "Mist" macht dürfte ja mit einem entsprechenden Traceprogramm jeder überprüfen können. Hier der gesamte Quelltext des Hostprogrammes:
Delphi-Quellcode:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 =
class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
dwWinSystem, dwTypes;
procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:= dwGetOSName;
end;
end.
EDIT: Ich denke, ich habe den Fehler gefunden. OSV wurde tatsächlich nicht richtig initialisiert. Ich konnte auch den beschriebenen Zufallseffekt reproduzieren und beheben. Im Anhang nun die korrigierte Version von DelphiWorks mit nochmals erweiterter Plattform-Erkennung und das Demo-Programm, ebenfalls ein wenig erweitert. Die Demo bringt nun eine Textliste der Rückgaben von GetVersionEx, GetSystemMetrics und GetSystemInfo. Das kann mir helfen, bei falsch erkannten Plattformen den Fehler zu finden bzw. neue Plattformen nachzutragen.