da die CLR 4 nun Side-By-Side Prozesse unterstützt (CLR Inside Out: In-Process Side-By-Side*) ist es von Microsoft nun gestattet Shell Extensions in managed Sprachen zu schreiben.
Aus dem Grund habe ich angefangen ein Framework zu schreiben, mit dem man sehr einfach (hoffe ich jedenfalls) eigene Shell Extensions schreiben kann. Dieses Framework setzt vollständig auf .NET 4.0 auf.
Momentan unterstützt die Bibliothek folgende Shell Extensions:
- Shell Icon Overlayer
Folgende Extensions sind geplant:
- Shell Thumbnail Preview
- Shell Contextmenu Extensions
- Copy Hooks
----------------------------------------------------------------------------------------------
Kleine FAQ zu den Shell Extensions:
Wie registriere ich die DLLs, damit der Explorer diese auch findet?
Da Shell Extensions COM Objekte sind, müssen diese per RegAsm registriert werden. RegAsm wird mit dem .NET 4.0 mitgeliefert und befindet sich im Frameworkordner.
Die DLL ist registriert, aber der Explorer reagiert nicht!?
Das liegt daran, das die DLLs nicht im GAC liegen. Die KShellExtension.dll, sowie die DLL die die Shell Extension enthält müssen im GAC liegen. Diese können per GacUtil in den GAC gelegt werden.
Der Explorer reagiert unter x64 immer noch nicht auf die DLLs!?
Bei x64 Systemen muss darauf geachtet werden, das das Tool RegAsm auch in der x64 Variante benutzt wird. Sonst wird die DLL als WOW6432 registriert und der Explorer hostet nur x64 DLLs unter x64.
Kann ich die Einstellung AnyCPU verwenden?
Ja, das ist kein Problem. Bei x64 Systemen muss nur daruf geachtet werden, das auch die x64 Variante von RegAsm benutzt wird.
Alles ist richtig installiert, aber der Explorer reagiert immer noch nicht!?
Beim Registrieren wird zwar per SHChangeNotify der Shell mitgeteilt, das sich was getan hat, aber meist reagiert der Explorer erst, wenn dieser neu gestartet wird. Also entweder das System neu starten, oder per Task Manager den Explorer abschießen und neu ausführen.
----------------------------------------------------------------------------------------------
Achtung:
Theoretisch wäre es möglich die Solution auch für .NET 3.5 zu kompilieren. Ich rate davon ab! Das kann zu fatalen Systemabstürzen führen, soweit das die Maschine nicht mehr hochfahren kann!
*
Zitat |
With the ability to have multiple runtimes in process with any other runtime, we can now offer general support for writing managed shell extensions—even those that run in-process with arbitrary applications on the machine. We still do not support writing shell extensions using any version earlier than .NET Framework 4 because those versions of the runtime do not load in-process with one another and will cause failures in many cases. |