BDE - prüfen ob installiert und welche Version



  • Hallo Gemeinschaft,

    ich hoffe ich liege mit der Wahl des Unterforums nicht gänzlich daneben...

    Ich schlage mich zur Zeit mit der Erstellung eines Installationsassistenten für Win2K, XP und Vista herum. Diesen stelle ich mit Inno Setup 5.2.3 zusammen (übrigens: Danke an dieser Stelle noch an Braunstein für den Tipp Inno Setup zu benutzen, ein sehr gutes Programm!).

    Nun muss, damit das zu installierende Programm funktioniert, bei Bedarf die BDE Version 5.11 auf dem Zielrechner installiert werden. Wie ich die BDE installieren kann, weiß ich - es geht jetzt darum, dass ich erstmal prüfen möchte ob die BDE nicht bereits installiert ist. Wenn möglich möchte ich, falls die BDE bereits vorhanden ist, auch noch prüfen in welcher Version die BDE auf dem Zielrechner vorliegt (falls Version kleiner 5.11, müsste ein Update gefahren werden).

    Die Prüfungen muss ich in Delphi-Pascal schreiben, damit ich sie im Inno Setup nutzen kann, daher zielen meine Fragen nicht auf Codeschnipsel ab, sondern nur darauf, wo ich in einem Zielsystem zuverlässig Information über die BDE bekomme.

    Ich habe bereits im Deutschen Inno Setup Forum einen Thread zu laufen, der sich mit dem Thema beschäftigt, leider geht es dort nicht wirklich voran - deshalb wage ich es hier auch zu fragen. Hier der Link zum Thread. Dort steht auch, was ich bereits dazu gemacht habe (falls von Interesse).

    Ich denke, dass es vielleicht Möglichkeiten gibt diese Prüfungen über die Registry zu realisieren - nur Leider weiß ich nicht, welche Schlüssel ich am besten prüfen könnte.

    Also nochmal kurz:
    - ich möchte auf einem Zielsystem prüfen, ob die BDE installiert ist - was für Möglichkeiten gibt es?
    - wenn die BDE installiert ist, möchte ich prüfen in welcher Version - ist das möglich? Wenn ja, wie?
    - die Prüfung muss ich in Delphi-Code schreiben, damit ich den Code in Inno nutzen kann, daher geht es hier nicht um Codebeispiele!

    Habt Ihr Ideen / Anregungen / Wissen zu diesem Thema für mich?

    Eine tiefergehende Frage zum Thema: ist die Existenz der Datei bdeadmin.exe ein eindeutiges Indiz für eine vorhandene, installierte BDE?

    MfG



  • Kolumbus schrieb:

    - ich möchte auf einem Zielsystem prüfen, ob die BDE installiert ist - was für Möglichkeiten gibt es?
    - wenn die BDE installiert ist, möchte ich prüfen in welcher Version - ist das möglich? Wenn ja, wie?

    Als erstes fiele mir da der Registry-Key ein (HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine), auf dessen Existenz du überprüfen kannst. Eine Versionsnummer (4.0) ist bei mir in HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine\Settings\SYSTEM\INIT\VERSION zu finden, aber ob das so stimmt, weiß ich nicht genau.



  • Ich würde vielleicht die Versionsnummer der idapi.dll überprüfen. Das ist die Hauptdll für die BDE.



  • Danke soweit für eure Antworten.

    audacia schrieb:

    Als erstes fiele mir da der Registry-Key ein (HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine), auf dessen Existenz du überprüfen kannst.

    Oh, gut. Den prüfe ich bereits...

    Ich habe zu Anfang die Prüfung von einer existierenden Lösung übernommen. Da mit dieser Lösung jedoch Probleme auftraten, musste ich die komplette Lösung in Frage stellen.
    Der erste Teil der Prüfung besteht aus einer Abfrage, ob der Wert DllPath für den Schlüssel HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine existiert. Das ist ja dann schonmal korrekt. 🙂

    Der zweite Teil der Prüfung besteht aus einer Abfrage, ob die Datei bdeadmin.exe in einem festen Verzeichnis zu finden ist. Diese Datei befindet sich jedoch - je nach Betriebssystem und Sprache - in unterschiedlichen Verzeichnissen. Daher ist diese Prüfung (mit festem Verzeichnis) unbrauchbar für mich.
    Ich hatte es erstmal als gegeben hingenommen und versucht das variable Verzeichnis irgendwie herauszufinden. Nun, scheinbar steht der Verzeichniswert in DllPath (siehe oben), wobei ich aber noch nicht weiß wie ich den Wert mit Delphi-Pascal auslese und weiter nutze. Aber das lässt sich herausfinden.
    Inzwischen stellt sich mir jedoch die Frage, ob ich überhaupt auf Vorhandensein der bdeadmin.exe prüfen muss!?! Was bringt mir das noch, wenn ich mit der Prüfung des oben angegebenen Schlüssel bereits feststelle ob eine BDE installiert ist?

    audacia schrieb:

    Eine Versionsnummer (4.0) ist bei mir in HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine\Settings\SYSTEM\INIT\VERSION zu finden, aber ob das so stimmt, weiß ich nicht genau.

    Hm, bei mir steht dort auch 4.0, aber soweit ich weiß ist bei mir die BDE 5.11 installiert. 😞

    Braunstein schrieb:

    Ich würde vielleicht die Versionsnummer der idapi.dll überprüfen. Das ist die Hauptdll für die BDE.

    Aha, klingt interessant... Wie stelle ich das an? Gibt es für sowas in jeder Prog.Sprache Befehle?

    Edit: Um die Versionswirrungen noch zu vervollständigen: Wenn ich in der Systemsteuerung die BDE-Verwaltung starte und dort auf Hilfe->Info... drücke, steht dort 5.01 😕



  • Kolumbus schrieb:

    Aha, klingt interessant... Wie stelle ich das an? Gibt es für sowas in jeder Prog.Sprache Befehle?

    Dazu gibt es WinAPI-Funktionen. Die kann man z.Bsp. so einsetzen

    // Funktion liefert einen AnsiString der Versionsnummer der übergebenen Datei
    AnsiString GetFileVersionString(const AnsiString &FileName)
    {
      // prüfen ob überhaupt Info da sind
      DWORD      nSize  = GetFileVersionInfoSize(FileName.c_str(), 0);
      AnsiString Result("");
      if (nSize)
      {
        char *pInfo = new char[nSize];
        // Versionsinfo auslesen
        GetFileVersionInfo(FileName.c_str(), 0, nSize, pInfo);
        VS_FIXEDFILEINFO *FileInfo;
        UINT              uLen;
        // Root-Information auslesen
        VerQueryValue(pInfo, "\\", (void**) &FileInfo, (PUINT) &uLen);
        // Speicher freigeben
        delete [] pInfo;
        // Versionsnummer bilden
        Result.sprintf("%d.%d.%d.%d",
                       HIWORD(FileInfo->dwFileVersionMS),
                       LOWORD(FileInfo->dwFileVersionMS),
                       HIWORD(FileInfo->dwFileVersionLS),
                       LOWORD(FileInfo->dwFileVersionLS));
      }
      return Result;
    }
    

    siehe auch
    http://msdn.microsoft.com/en-us/library/aa910661.aspx



  • Scheinbar habe ich eine Lösung gefunden. Die BDE-Version bekommt man heraus, indem man die Version der bdeadmin.exe untersucht. Diese startet zwar die BDE-Verwaltung und in der steht bei mir unter Hilfe->Info... Version 5.01, die Datei bdeadmin.exe selbst hat bei mir jedoch die Version 5.2.0.2! Folglich ist BDE-Version 5.2 bei mir installiert.
    Also war die zweite Prüfung doch nicht so ganz verkehrt, nur nicht zu Ende geführt...
    Gut, dann Danke für die Antworten - ich werd mich mal ins Delphi-Forum begeben. Mal schauen ob ich den Code zusammenkriege, um den Pfad der bdeadmin.exe aus dem Registry-Schlüssel auszulesen und dann die Dateiversion zu chekken.

    Danke trotzdem für den Codeschnipsel Braunstein, wer weiß wann man's mal braucht...

    So long!


Anmelden zum Antworten