Was ist der richtige Weg, um eine Managed Property-Handler-Shell-Erweiterung zu implementieren?

StackOverflow https://stackoverflow.com/questions/3200245

Frage

Jetzt, da .NET CLR 4.0 Seite nebeneinander (SXS) (SXS) unterstützt, sollte es nun möglich sein, Shell zu schreiben Erweiterungen im verwalteten Code. Ich habe dies versucht und hat einen Immobilienhandler erfolgreich codiert das implementiert iPropertystore, iinitialiTewithstream und iPropertystorecapabilitäten.

der Handler Funktioniert gut und wird wie erwartet, wenn Sie Dateien über den Explorer durchsuchen. Es funktioniert auch in Ordnung, um das anzuzeigen Benutzerdefinierte Eigenschaften im Preview-Panel und im File-Eigenschaften "Detail" -Paban.

jedoch, wenn ich versuche Bearbeiten Sie eine Eigenschaft im Preview-Panel, und klicken Sie dann auf "Speichern". Ich erhalte eine "Datei in Gebrauch" Die Datei ist in Windows Explorer geöffnet.

Ein paar Tidbits:

    .
  1. Wenn der Explorer iinitialIngstream.Initialize anruft, ist die STGM-Eigenschaft auf STGM_SHARE_DENY_WRITE gesetzt.
  2. und ohne Punkt, rief Explorer iPropertystore.SetValue oder iPropertystore.commit an.
  3. Ich sehe wiederholte Anrufe an meinen Handler auf verschiedenen Threads für die gleichen Dateieigenschaften.
  4. Was muss ich also ändern (oder in der Registrierung einstellen), um das Anwesen aufzurufen, um zu arbeiten?

    update:

    Dank Ben habe ich es funktionieren. Der "schwierige Teil" (zumindest für mich) war das Verständnis dafür, dass Com Interop niemals entsandt oder auf meinem ImmobilienHandler abgeschlossen ist. Dies ging die von mir geöffneten Dateien, bis der GC rannte.

    Glücklicherweise funktioniert das "Eigenschaftshandlerprotokoll" so, dass, wenn iinitialIndeWithsream.initialize () für ein ReadValue () aufgerufen wird (), der StreamMode readonly ist, und wenn es für ein SetValue () aufgerufen wird, ist der BRUMEMODE Readwrite und Commit () wird am Ende aufgerufen.

    generasacodicetagpre.

War es hilfreich?

Lösung

Ja, Sie müssen den Bach hinzufügen (), um es öffnen zu lassen und die Referenz korrekt zu halten.

Beachten Sie, dass der Indexer Ihren Eigenschaftshandler verwendet, um die Datei zu öffnen.Wenn Sie also das Stream-Objekt austreten, bleibt die Datei offen.Sie können mithilfe der SysInternals ProCEXP, um zu sagen, welcher Prozess die Datei öffnet, oder procmon, um zu sagen, welche Anrufe und Parameter sie verwendet werden.

Andere Tipps

Explorer versucht, sicherzustellen, dass keine anderen Anwendungen interferiert, die möglicherweise die Datei öffnen.Könnte die Datei von einer anderen Anwendung rechtmäßig verwendet werden?Gibt es einen Vorschau-Handler?

Manchmal sehen wir Immobilienhandler, die ihre Streams länger öffnen als nötige (oder filebasierte Handler, die die Datei mit restriktiven Berechtigungen öffnen) öffnen.Können Sie überprüfen, ob Sie den Stream rechtzeitig freigeben?

Zum Schluss denke ich nicht, dass dies mit Ihrem unmittelbaren Problem zusammenhängt, jedoch mit .NET-Shell-Erweiterungen nicht unterstützt wird.Wir empfehlen, dass dies nicht in jedes Produkt eingebaut wird.

-Ben

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top