Jasmin: Installation von Perl DBD::Pg / Problem mit Manifest

Hallo,

ich möchte auf einer Vista-Maschine mit Perl auf PostgreSQL zugreifen. Dazu benötige ich den Datenbanktreiber DBD::Pg. Leider gibt es diesen nicht bei ActiveState, sodass ich ihn mir bei PgFoundry herunter geladen und mit ppm installiert habe.

Ein Testskript bemängelt daraufhin dass msvcr80.dll fehle, deshalb habe ich die Datei in Windows\System32 kopiert. Daraufhin bekomme ich eine neue Fehlermeldung "R6034" und die Ausgabe:

install_driver(pg) failed: Can't load 'C:/Perl/site/lib/auto/DBD/Pg/Pg.dll' for
module DBD::Pg: load_file:Eine DLL-Initialisierungsroutine ist fehlgeschlagen at
 C:/Perl/lib/DynaLoader.pm line 202.

Daraufhin habe ich die pg.dll.manifest ins Perl-bin kopiert und in perl.exe.manifest umbenannt. Leider ohne Erfolg. Liegt es eventuell am BS? Auf meinem XP-Rechner lies sich der Fehler mit dem Erstellen der Manifest Datei beheben.

Grüße
Jasmin

  1. ich möchte auf einer Vista-Maschine mit Perl auf PostgreSQL zugreifen. Dazu benötige ich den Datenbanktreiber DBD::Pg. Leider gibt es diesen nicht bei ActiveState, sodass ich ihn mir bei PgFoundry herunter geladen und mit ppm installiert habe.

    Du hast gelesen, dass der Treiber nicht für Vista verfügbar ist?
    http://pgfoundry.org/projects/dbdpgppm/ Operating System: Windows NT/2000/XP/2003

    ~JJ

  2. Yerf!

    Ein Testskript bemängelt daraufhin dass msvcr80.dll fehle, deshalb habe ich die Datei in Windows\System32 kopiert.

    Inklusive der Manifest-Datei? Wobei diese Vorgehensweise eigentlich nicht zu empfehlen ist, die VisualC++-Runtime sollte besser sauber über ihren Installer eingerichtet werden.

    Daraufhin bekomme ich eine neue Fehlermeldung "R6034" und die Ausgabe:
    [...]
    Daraufhin habe ich die pg.dll.manifest ins Perl-bin kopiert und in perl.exe.manifest umbenannt. Leider ohne Erfolg.

    Die Manifest sollte im gleichen Verzeichnis wie die Dll liegen, der Name passt eigentlich (also nicht umbenennen).

    Liegt es eventuell am BS? Auf meinem XP-Rechner lies sich der Fehler mit dem Erstellen der Manifest Datei beheben.

    Evtl. kommt Vista mit der reinkopierten msvcr80.dll so nicht klar.

    Gruß,

    Harlequin

    --
    <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
    1. Hallo Harlequin,

      Ein Testskript bemängelt daraufhin dass msvcr80.dll fehle, deshalb habe ich die Datei in Windows\System32 kopiert.
      Inklusive der Manifest-Datei?

      Welche Manifest-Datei? Ich habe nur eine für pg.dll!

      Wobei diese Vorgehensweise eigentlich nicht zu empfehlen ist, die VisualC++-Runtime sollte besser sauber über ihren Installer eingerichtet werden.

      Ich habe also die msvcr80.dll wieder gelöscht und den Installer ausgeführt, mit dem Ergebnis, dass jetzt keine msvcr80.dll mehr gefunden wird.

      Daraufhin bekomme ich eine neue Fehlermeldung "R6034" und die Ausgabe:
      [...]
      Daraufhin habe ich die pg.dll.manifest ins Perl-bin kopiert und in perl.exe.manifest umbenannt. Leider ohne Erfolg.

      Die Manifest sollte im gleichen Verzeichnis wie die Dll liegen, der Name passt eigentlich (also nicht umbenennen).

      Welche dll meinst du jetzt? Den Tipp mit der perl.exe.manifest habe ich im Internet gelesen und auf meiner XP-Maschine hat das auch funktioniert.

      Grüße
      Jasmin

      1. Yerf!

        Welche Manifest-Datei? Ich habe nur eine für pg.dll!

        Die msvcr80.dll sollte eigentlich auch eine haben. (Wie eigentlich alles, was mit den neueren Visual-Studios erzeugt wird. Nur manchmal sind diese direkt in die dll/exe eingebunden und nicht einzeln)

        Ich habe also die msvcr80.dll wieder gelöscht und den Installer ausgeführt, mit dem Ergebnis, dass jetzt keine msvcr80.dll mehr gefunden wird.

        Schau mal unter windows\winsxs ob da etwas in der Art vorhanden ist: "x86_Microsoft.VC80.CRT"

        Die Manifest sollte im gleichen Verzeichnis wie die Dll liegen, der Name passt eigentlich (also nicht umbenennen).
        Welche dll meinst du jetzt? Den Tipp mit der perl.exe.manifest habe ich im Internet gelesen und auf meiner XP-Maschine hat das auch funktioniert.

        Die pg.dll. Eine dll die Abhängikeiten zu den VC8-dlls hat benötigt ein Manifest, in dem steht, welche Version der DLL sie benötigt.

        Das mit der perl.exe ist komisch, dass man für die das manifest braucht, nur weil sie eine dll läd, die entsprechende Abhängigkeiten hat... (allerdings ist das ganze Zeug mit den SideBySide-Assemblies irgendwie eh nicht ganz ausgegoren)

        Gruß,

        Harlequin

        --
        <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
        1. Hallo Harlequin,

          Schau mal unter windows\winsxs ob da etwas in der Art vorhanden ist: "x86_Microsoft.VC80.CRT"

          ja, sogar mehrfach und darin befinden sich die drei Dateien: msvcr80.dll, msvcm80.dll und msvcp80.dll

          In der pg.dll.manifest steht:

          <?xml version='1.0' encoding='UTF-8' standalone='yes'?>  
          <assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>  
            <dependency>  
              <dependentAssembly>  
                <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />  
              </dependentAssembly>  
            </dependency>  
          </assembly>
          

          Grüße
          Jasmin

          1. Yerf!

            ja, sogar mehrfach und darin befinden sich die drei Dateien: msvcr80.dll, msvcm80.dll und msvcp80.dll

            Ok, die Installation von dem Paket war dann wohl erfolgreich.

            <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />

            Komische Versionsnummer... Bei mir haben die entweder 8.0.50727.42 oder 8.0.50727.762 (sieht man an den Manifestdateien im Ordner WinSxS/manifest) Der publicKeyToken zumindest ist identisch.

            Kan es sein, dass die pg.dll mit einer Alpha/Betaversion vom Visualstudio übersetzt wurde? (sieht mir zumindest danach aus...)

            Du kannst ja mal versuchen die Versionsnummer im Manifest zu ändern (also von der pg.dll) auf eine Version die auf deinem System vorhanden ist.

            Gruß,

            Harlequin

            --
            <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->
            1. Hallo Harlequin,

              Du kannst ja mal versuchen die Versionsnummer im Manifest zu ändern (also von der pg.dll) auf eine Version die auf deinem System vorhanden ist.

              Hab ich gemacht, leider ohne Erfolg. Er meldet immer noch dass er die msvcr80.dll nicht finden kann, kopiert man diese an den Ort von Pg.dll bringt er einen R6034 Fehler.

              Grüße
              Jasmin

              1. Yerf!

                Hab ich gemacht, leider ohne Erfolg. Er meldet immer noch dass er die msvcr80.dll nicht finden kann, kopiert man diese an den Ort von Pg.dll bringt er einen R6034 Fehler.

                Hm, da gehen mir jetzt die Ideen aus, was da wohl noch schiefläuft. Möglicherweise ein Fehler in der DLL beim Erstellen/Linken, vielleicht steht ja deshalb Vista nicht bei den unterstützten Betriebssystemen dabei...

                Mehr Informationen bekommt man nur mit entsprechenden Debugtools (depends und ähnliches), aber das ist recht mühsam...

                Gruß,

                Harlequin

                --
                <!--[if IE]>This page is best viewed with a webbrowser. Get one today!<![endif]-->