Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

DLL Side-by-side registration & redirection

  Alt 21. Jun 2018, 18:47
Herzlich Willkommen zu einem spannenden Thema

Warnung: Ich kenne mich nicht wirklich aus. Ich will noch nicht einmal alles verstehen, ich möchte nur etwas hinbekommen.


Eine Delphi-Anwendung verwendet eine ActiveX-Komponente. Bisher musste man hingehen und auf jedem PC mit Adminrechten einmal mit regsvr32 someLib.dll diese DLL "registrieren". Und die musste auch an diesem Pfad bleiben!

Ich möchte nun diese tolle "Side-by-side" registration nutzen: Ich kann mir diesen ganzen Registrierungsvorgang komplett sparen wenn ich
  • Der DLL someLib.dll in ihrem Manifest eine assemblyIdentity (sowie ein paar weitere Infos) gebe
  • Der Anwendung in ihrem Manifest eine assemblyIdentity gebe
  • Der Anwendung myApp.exe ins Manifest gebe dass sie die DLL someLib.dll (genau spezifiziert mit Versionsnummer und allem) verwendet

Fortan brauche ich keine Registrierung mehr. Tolle Sache, das funktioniert wirklich


Mich stören die Beschränkungen dass die DLL im gleichen Verzeichnis wie die .exe-Datei liegen muss. Es gibt ein paar weitere Regeln wo sie auch liegen darf, aber ich mag die alle nicht:

Zitat:
The first time side-by-side searches for a private assembly, it determines whether a language-specific subfolder exists in the application's directory structure. If no language-specific subfolder exists, side-by-side searches for the private assembly in the following locations using the following sequence.
Side-by-side searches the WinSxS folder.
\\<appdir>\<assemblyname>.DLL
\\<appdir>\<assemblyname>.manifest
\\<appdir>\<assemblyname>\<assemblyname>.DLL
\\<appdir>\<assemblyname>\<assemblyname>.manifest
Quelle: MSDN: About Isolated Applications and Side-by-side Assemblies > Assembly Searching Sequence


Meine Frage: Gibt es eine Möglichkeit dass ich z.B. die .exe unter .\myApp.exe haben kann und die DLL unter .\fancyLibraries\someDll.dll oder ist das nicht möglich?
  Mit Zitat antworten Zitat