2013-04-17 1 views
1

J'ai écrit une extension shell en C# qui affiche ma propre entrée de menu contextuel (FileExtensionMenu) Après avoir cliqué sur mon entrée de menu, l'extension shell devrait soumettre le nom du fichier choisi à mon application principale qu'il peut traiter avec ce fichier.Quelle est la manière préférée de communiquer entre une extension shell et une application écrite en C#

Ma question est quelle est la façon de communiquer entre l'extension et l'application. Ou dois-je transférer la logique du programme au code d'extension du shell?

Merci d'avance pour votre aide

+1

Vous pouvez faites ceci sans une extension shell, ajoutez simplement une association de fichier. Ce qui serait le "moyen préféré". –

+0

Veuillez lire [this] (http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx) et [this] (http://blogs.msdn.com/b/ oldnewthing/archive/2013/02/22/10396079.aspx) sur pourquoi c'est une mauvaise idée (bien que certains [pas d'accord] (http://stackoverflow.com/questions/15834410/regasm-codebase-works-but-file- avec-regasm-codebase-regfile-does-no/15835909 # comment22533300_15835909)). –

Répondre

2

Vous pouvez utiliser Windows Communication Foundation (WCF) pour appeler des méthodes dans votre application en cours d'exécution. C'est un peu fastidieux à mettre en place, mais une fois que vous l'avez fait, il est très facile d'appeler des méthodes via RPC.

Notez que les méthodes sont appelées à partir d'un thread distinct. Vous devez donc le marshaler vers les appels de l'interface utilisateur si nécessaire (en utilisant Control.Invoke() ou Control.BeginInvoke() pour Windows Forms).

See here for full details.

En outre, see here for a simple example. Comme Adam dit ci-dessous, vous devez utiliser des canaux nommés comme mécanisme de transport, de sorte que quand on regarde à l'ours par exemple à l'esprit qu'au lieu de

new NetTcpBinding(), 
"net.tcp://localhost:8000"); 

vous aurez quelque chose comme:

new NetNamedPipeBinding(), 
"net.pipe://localhost/YourServiceNameGoesHere" 
+2

Plus précisément, l'OP doit utiliser des canaux nommés (le successeur d'IPC dans .NET Remoting): http://stackoverflow.com/questions/1613586/c-sharp-wcf-inter-process-communication –

Questions connexes