Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Windows-CD erkennen (https://www.delphipraxis.net/38267-windows-cd-erkennen.html)

MathiasSimmack 16. Jan 2005 22:57


Windows-CD erkennen
 
So, jetzt habe ich endlich mal wieder ein kleines Programm, das mich reizt :), und da brauche ich glatt mal Hilfe.

Ihr kennt doch diese Funktion, wenn man aufgefordert wird, die Windows-CD einzulegen, weil bspw. was nachträglich zu installieren ist. Und irgendwie erkennt das System die CD und fordert ggf. die richtige an. Ich würde etwas ähnliches gern nutzen, daher die Frage: Wie kann ich zweifelsfrei erkennen ob eine Windows 2000-, Windows XP- oder meinetwegen auch Win 2003-CD im Laufwerk liegt? 2000 und XP wären mir am wichtigsten, denn die kann ich notfalls zum Testen organisieren.

Ich habe das mal bei einem Programm gesehen, das in einem Label anzeigte, um welche Version es sich handelt. Da stand dann so was wie "Windows XP Professional", glaube ich :gruebel: Es hat jedenfalls gestimmt. Gibt es da irgendeine API-Erkennungsfunktion, die euch bekannt ist und die man nutzen kann? Keine Ahnung, 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 ... Na ja, so was jedenfalls. :)


Ich hab´s erst mal in diese Sparte geschrieben. Wenn es API- oder ähnliche Funktionen gibt, kann ein Mod den Beitrag dann ja gern verschieben.

Luckie 17. Jan 2005 00:06

Re: Windows-CD erkennen
 
Guck mal in diese beiden dateien deiner Windows CD:
Zitat:

\CDROM_IS.5;\
\CDROM_NT.5;\
da steht bei mir
Zitat:

W2k
drinne und es ist eine Windows 2000 Professional CD.

Sprint 17. Jan 2005 03:36

Re: Windows-CD erkennen
 
Zitat:

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.

MathiasSimmack 17. Jan 2005 11:45

Re: Windows-CD erkennen
 
Ich könnte auch die Versionsnummer des Setup im Root prüfen. Na ja, ich werde mir das mal durch den Kopf gehen lassen.

Ich muss erst mal noch ein Aktualisierungsproblem in dem Programm fixen. Es startet via "ShellExecuteAndWait" (von Assa) ein paar Programme, wird dadurch aber nicht aktualisiert (das Fenster, meine ich). Das sieht natürlich unschön aus, wenn man was anderes drüber packt, usw. Ihr wisst schon. Das ist erst mal wichtiger. :)


Edit-PS: trotzdem Danke erst mal bis hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz