| 

.NET C# Java Javascript Exception

2
Hallo zusammen.

Bei einem COM Interop Projekt versuche ich einen Weg zu finden, wo ich den Pfad der DLL im Manifest angeben kann.

Ausgangslage ist ein VB6 EXE Projekt (Demo.exe), welches eine .NET DLL (eine sogenannte Com Callable Wrapper oder CCW DLL) verwendet. Damit die .NET DLL von VB6 aus verwendet werden kann, wird die COM Interop Technik verwendet. Somit ist diese .NET Assembly COM visible.

Nun lautet die Anforderung, dass diese Com Callable DLL registrierfrei sein muss. Für AcitveX DLL gibt es ja hierzu bereits eine Lösung, indem man ein Application Manifest
erstellt. Damit kann dann die Registrierung via regsrv32 umgehen.

Die .NET Assembly (Com Callable Wrapper) kann ebenfalls im Application Manifest deklariert
werden (jedoch geschieht dies anders, als bei ActiveX DLLs) Für .NET Assemblies verwendet man einen <dependency> Block:

<dependency>
<dependentAssembly>
<assemblyIdentity name="[Name_der_.NET_Assembly]" type="win32" version="1.0.0.0" />
</dependentAssembly>
</dependency>


Für ActiveX DLLs verwendet man im Gegensatz das <file> Element:

<file name="[Pfad_und_Name_der_ActiveX_DLL]">
<typelib tlbid="..." version="1.0" flags="" helpdir="" />
<comClass clsid="..." tlbid="..." threadingModel="Apartment" progid="..." description="" />
<comClass clsid="..." tlbid="..." threadingModel="Apartment" progid="..." description="" />
</file>


Ich habe intensiv recherchiert, wie man Pfad Informationen für die .NET Assembly angeben könnte. Das Business schreibt vor, dass sämtliche DLL nicht im Applikationsverzeichnis liegen, sondern in einem Unterverzeichnis z.B. \lib
Leider habe ich bis jetzt keine Lösung gefunden, wie man das im <dependency> Block mit angeben könnte.

Gerne wollte ich noch 2 Bilder einfügen, jedoch kann ich dies nur via URL und da kenne ich kein gutes Image Hosting, welches nicht zeitlich abläuft... :-(

Für Hilfestellung danke ich im Voraus.
Mit freundlichen Grüssen,
Charles
21.02.2011
charlesdavidoff 21 1 2
3 Antworten
0
Hallo,
das ist zwar nicht die "richtige" Antwort auf deine Frage, kann dir aber vielleicht auch weiterhelfen.
Jede EXE kann über einen Registrykey ihren Suchpfad (PATH) erweitern.
Dadurch sollte es möglich sein, die DLLs in einem beliebigen Verzeichnis - auch "lib" :-) - abzulegen.

Registry Keys
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths

Description
An application that is installed for all users of the computer can be registered
under the HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths
registry key. In Windows 7 and later, an application that is installed for only one
user can be registered under the
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\App Paths
registry key.

Quelle: http://forensicartifacts.com/2010/08/registry-app_paths/


Liebe Grüße, Tom
22.02.2011
Metal-Frog 946 1 7
0
Hallo Tom
Vielen Dank für deine schnelle Antwort.
Leider habe ich die Vorgabe vom Business, nichts in die Registry zu schreiben. Denn das Modifizieren der Registry benötigt Administrationsrechte. Bei mehreren Tausend Kunden kann dies ein Problem werden und zu enormen Support-Fällen führen.

Der Ansatz ist aber interessant. Gäbe es eine Möglichkeit, dass die Applikation aufgrund einer anderen Gegebenheit die Abhängikeiten/DLLs in einem Unterverzeichnis suchen würde?

Kürzlich habe ich noch etwas über einen WinSxS Ordner gelesen, der etwas mit Manifesten zu tun hat. Ich werde weiter recherchieren.

Vielen Dank nochmals Tom
LG, Charels
22.02.2011
charlesdavidoff 21 1 2
Hallo Charles, wenn dir meine Antwort gefallen hat, wäre es nett, wenn du sie bewerten würdest. Liebe Grüße, Tom
Metal-Frog 22.02.2011
0
Hallo Charles,
wenn sonst gar nichts geht, ist vielleicht Thinstall auch eine Lösungsmöglichkeit. Dann wird die gesamte Anwendung in eine einzige EXE verpackt und kann trotzdem (virtuell) Änderungen in der Registry vornehmen.

Liebe Grüße, Tom
22.02.2011
Metal-Frog 946 1 7

Stelle deine Com-Frage jetzt!