Ich habe kürzlich gehört, dass es für eine .dll möglich ist, Code auszuführen, sobald er geladen wird, wenn beispielsweise eine Anwendung geladen wird, die auf die .dll verweist. Obwohl ich selbst einige Tests gemacht habe und versucht habe, hier und auf Google nach Antworten zu suchen, konnte ich keine Möglichkeit finden, eine Initialisierungsmethode für eine .dll zu erstellen.
Ich würde gerne wissen, ob es wirklich möglich ist, Code von einer DLL auszuführen, wenn er von einer Anwendung geladen wird.
Wenn ja, wie kann ich das tun?
WARNUNG (danke Ben Voigt für den Fang :)): Der folgende Code gilt nur für C # , das garantiert, dass die generierte Klasse nicht vorfieldfield ist Aber mit C ++ / CLI sollte nicht so einfach funktionieren: Verwalteter statischer C ++ - Konstruktor wurde nicht in .net4
aufgerufenWie in meinem Kommentar erwähnt, können Sie so etwas verwenden:
%Vor%Im statischen Konstruktor können Sie fortgeschrittene Dinge tun, wie das Überprüfen der Registrierung, die Kommunikation mit einem Server ...
Und wenn Sie ein schlechter Typ sind (oder nur ein Entwickler / Unternehmen, der seine Rechte schützen möchte), können Sie eine Ausnahme auslösen:
%Vor%Dies führt zu einer TypeInitializationException , die die Verwendung der gesamten Bibliotheksklasse verhindert.
Oder Sie können eine CheckMe -Methode implementieren und alle Benutzer auffordern, sie aufzurufen, bevor sie die Bibliothek verwenden oder sich authentifizieren und ein Sicherheitstoken erhalten, das sie jedes Mal verwenden, wenn sie etwas verwenden ...
BEARBEITEN:
Was auch immer der Schutz sein mag, den ein entschlossener Angreifer benutzt, könnte alle Installationen umgehen, indem er die Bibliothek dekompiliert. Wenn Sie können, sollten Sie Ihre Bibliothek auch verschleiern, um (ein wenig) geschützter zu sein.
Um sich nach einem Kommentar zu sehnen ...
Beachten Sie, dass das Versetzen von nicht-trivialem Code (d. h. langsamer Remotenetzwerkaufruf) in Startup-Code jeglicher Art (wie statischer Konstruktor einer wichtigen Klasse) die Benutzer Ihrer Bibliothek entfremden wird. Es kann sie zwingen, speziellen Code zu schreiben, um zufällige Verzögerungen beim Laden / Methodenaufruf zu vermeiden.
Einfach die "validate license" -Methode in der Bibliothek zu haben, ist wahrscheinlich eine bessere Lösung.
Beachten Sie, dass die Funktion "Telefon zuhause" oft von Benutzern nicht sehr begrüßt wird und besser dokumentiert ist. Vor allem, wenn Sie möchten, dass Ihre Bibliothek als Teil eines anderen Programms verwendbar ist.
Sie können den DLL-Code im Anwendungskonstruktor aufrufen. Dies ist der Punkt, an dem Baugruppen aufgelöst werden.