none
Eigene DLL's installieren RRS feed

  • Frage

  • Als Übung habe ich eine DLL erstellt zuzüglich einer Anwendung zu deren Nutzung. Liegt die DLL im gleichen Ordner wie die EXE, ist die Ausführung fehlerfrei.

    Nun las ich, dass eine Anwendung standardmäßig im gleichen Ordner wie die EXE, im Systemordner (und noch in 1 oder 2 anderen Orten) nach der DLL sucht.

    Mein Versuch, die DLL nach System32 auszulagern, schlug fehl mit der Meldung, dass Datei nicht gefunden wurde und daher installiert werden soll.

    Wie installiert man eine DLL im Systemordner?

    Freitag, 14. Oktober 2011 13:07

Antworten

  • > Ich würde sagen mal den regsvr32 in der cmd ausführen.

    Das braucht man nur, wenn es sich um eine COM-Componente handelt; von dem gehe ich hier aber nicht aus!

    I.d.R. reicht das kopieren der DLL in das system32-Verzeichnis.

    Vermutlich hat der OP aber ein x64 Problem und hat es somit in das falsche system32 Verzeichnis kopiert... nimm einfach mal syswow64 !


    Jochen Kalmbach (MVP VC++)
    Freitag, 14. Oktober 2011 15:40

Alle Antworten

  • > Wie installiert man eine DLL im Systemordner?

    Mit einem Installations-Programm?


    Jochen Kalmbach (MVP VC++)
    Freitag, 14. Oktober 2011 13:19
  • Ich würde sagen mal den regsvr32 in der cmd ausführen. Also:

    regsvr32 "C:\Windows\System32\" "meine.dll"
    in die Eingabeaufforderung eingeben.


    VisualCPlusPlus
    Freitag, 14. Oktober 2011 15:13
  • > Ich würde sagen mal den regsvr32 in der cmd ausführen.

    Das braucht man nur, wenn es sich um eine COM-Componente handelt; von dem gehe ich hier aber nicht aus!

    I.d.R. reicht das kopieren der DLL in das system32-Verzeichnis.

    Vermutlich hat der OP aber ein x64 Problem und hat es somit in das falsche system32 Verzeichnis kopiert... nimm einfach mal syswow64 !


    Jochen Kalmbach (MVP VC++)
    Freitag, 14. Oktober 2011 15:40
  • Und COM Komponenten müssen gerade weil sie registriert werden gerade nicht unbedingt in das Systemverzeichnis.
    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 15. Oktober 2011 13:47
    Moderator
  • Warum willst Du das überhaupt, sie in das System-Verzeichnis kopieren?

    Kopiere Sie in das Programmverzeichnis der EXE, das ist meines Erachtens die beste Methode!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 15. Oktober 2011 13:49
    Moderator
  • Eigentlich wollte ich den Platzhirsch Jochen fragen, wer ihn genötigt hat, auf meine banale Frage zu antworten. Schließlich führte sein 2. Kommentar jedoch zum Ziel (syswow64). Also Jochen, es sei Dir Deine 1. Wortmeldung verziehen.

    Nun, warum will ich die DLL unbedingt im Systemordner haben? Es sollte nur ein Test sein, man weiß nie, ob man dies nicht einmal braucht.

    Martin, jetzt stellt sich aber doch noch eine Frage. Jochen schlug ein Installationsprogramm vor. Wozu, wenn die DLL einfach nur reinkopiert werden muß (was auch im Einklang steht mit den Erläuterungen von Microsoft, wonach standardmäßig die DLL auch im Systemordner gesucht wird)? Die Antwort von VC++ klang anfangs sehr überzeugend, so dass ich ihm voreilig einen Punkt gegeben habe. Der Test jedoch führte nicht zum Erfolg: permanent Fehlermeldung, wobei auch die vorgeschlagene Syntax nach meiner Meinung nicht korrekt war.

    Einen computerfreien Samstag-Abend wünsch ich Euch, Tom

    Samstag, 15. Oktober 2011 18:42
  • Jochen und ich stellen Software her und Leben von dem, was dies einbringt ;)

    Für uns ist es der übliche Weg Installationsprogramme zu bauen und keine Software in irgendwelche Verzeichnisse manuell zu kopieren,was ein "normaler" Benutzer auch gar nicht kann. System32/Syswow64 ist dem "Benutzer" nicht zum Schreiben freigegeben.

    Wenn Du Fehlermeldungen bekommst, dannliegt dies gewisslich nicht daran, dass Deine DLL im Systemverzeichnis liegt.
    Was für ein vorgeschlagener Syntax.

    Dein Posting erschließt sich mir nicht...


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Samstag, 15. Oktober 2011 20:18
    Moderator
  • Moin, moin

    Ich meinte den vorgeschlagenen Aufruf:

    regsvr32 "C:\Windows\System32\" "meine.dll"

    Dieser führt zur Meldung, dass das Modul nicht gefunden wurde.

    Außerdem verlangt regsvr32:

    Stattdessen brachte eben einfaches Kopieren der DLL in den Ordner syswow64 den Erfolg.

    Ich will doch das Vorgehen, ein größeres Programmsystem per Installationsroutine zu installieren, gar nicht in Frage stellen. Mir ging es doch lediglich darum,  verschiedene Vorgehensweisen für mich zu testen.

    Gruß Tom

    Sonntag, 16. Oktober 2011 08:46
  • Wozu, wenn die DLL einfach nur reinkopiert werden muß (was auch im Einklang steht mit den Erläuterungen von Microsoft, wonach standardmäßig die DLL auch im Systemordner gesucht wird)? Die Antwort von VC++ klang anfangs sehr überzeugend, so dass ich ihm voreilig einen Punkt gegeben habe. Der Test jedoch führte nicht zum Erfolg: permanent Fehlermeldung, wobei auch die vorgeschlagene Syntax nach meiner Meinung nicht korrekt war.

    Ich kann Dir nicht ganz folgen...
    Die Such-Rehenfolge ist IMHO historisch bedingt.. und das schon seit Win3x...
    I.d.R. sollte man nach system32 nur Dateien kopieren, die "geshared" werden sollen. Und dazu braucht man eine Installationprogramm, da nur dieses den "Referenzzähler" korrekt verwaltet...


    Jochen Kalmbach (MVP VC++)
    Sonntag, 16. Oktober 2011 08:48
  • Ich meinte den vorgeschlagenen Aufruf:

    regsvr32 "C:\Windows\System32\" "meine.dll"

    regsvr32 wird nur bei COM oder ActiveX-Controls benötigt. Da Du sowas nicht erstellt hast, ist es sinnlos...


    Jochen Kalmbach (MVP VC++)
    Sonntag, 16. Oktober 2011 08:50
  • Für diese Übung (im Rahmen eines Fernkurses zu C++) reichte die Erstellung und Einbindung einer einfachen DLL zur Demonstration von Modularisierung. Dies hat nun geklappt. Danke für den Moment. Tom
    Sonntag, 16. Oktober 2011 18:21
  • Hallo tom krist,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Mittwoch, 9. November 2011 11:31
    Moderator