Zitat von
MathiasSimmack:
gibt´s da vllt. spezielle Dateien oder Daten auf der CD, die man ausliest und mit denen man ermitteln kann, was für ein Windows das ist
Du könntest z.B. die gepackte Kernel32 Datei entpacken und die Version auslesen. Mal ein kleines Beispiel:
Delphi-Quellcode:
function SetupDecompressOrCopyFile(SourceFileName, TargetFileName: PChar; CompressionType: Pointer)
: DWORD; stdcall; external 'SETUPAPI.DLL' name 'SetupDecompressOrCopyFileA';
Delphi-Quellcode:
function GetWinCDVersion(const I386Path: String; var Major, Minor, Build, Revision: Word): Boolean;
var
TempFileName: array[0..MAX_PATH] of Char;
SourceFileName: String;
VerInfoSize: DWORD;
VerInfo: Pointer;
VerValue: PVSFixedFileInfo;
begin
Result := False;
SourceFileName := IncludeTrailingBackslash(I386Path) + 'KERNEL32.DL_';
if FileExists(SourceFileName) then
if GetTempPath(SizeOf(TempFileName), TempFileName) > 0 then
if (GetTempFileName(TempFileName, nil, 0, TempFileName) > 0) and (GetLastError = NO_ERROR) then
if SetupDecompressOrCopyFile(PChar(SourceFileName), TempFileName, nil) = NO_ERROR then
begin
VerInfoSize := GetFileVersionInfoSize(TempFileName, DWORD(nil^));
if VerInfoSize > 0 then
begin
GetMem(VerInfo, VerInfoSize);
try
if GetFileVersionInfo(TempFileName, 0, VerInfoSize, VerInfo) then
if VerQueryValue(VerInfo, '\', Pointer(VerValue), DWORD(nil^)) then
with VerValue^ do
begin
Major := dwFileVersionMS shr 16;
Minor := dwFileVersionMS and $FFFF;
Build := dwFileVersionLS shr 16;
Revision := dwFileVersionLS and $FFFF;
DeleteFile(TempFileName);
Result := True;
end;
finally
FreeMem(VerInfo);
end;
end;
end;
end;
Das läuft so aber nur unter Windows NT/2k/XP/2k3. Auf 'ner Windows 9x CD musst du dir die CAB Dateien vornehmen. Kann dir aber leider nicht sagen, woran man erkennen kann ob es eine Workstation oder Server Version ist.