2013-04-17 3 views
1

입니다. C#에서 쉘 확장을 작성했습니다. 내 고유 컨텍스트 메뉴 항목 (FileExtensionMenu)을 표시합니다. 내 메뉴 항목을 클릭 한 후 선택한 파일 이름을 내 기본 응용 프로그램에 제출하여이 파일로 처리 할 수 ​​있습니다.쉘 익스텐션과 C#으로 작성된 응용 프로그램간에 통신하는 기본 방법은

제 질문은 확장 기능과 애플리케이션간에 통신하는 방법입니다. 아니면 셸 확장 코드로 프로그램 논리를 전송해야합니까? 당신의 도움이

+1

당신은 할 수 있습니다 아담이 아래에 적혀 대신

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

당신이 뭔가있을 것이라는 점을 염두에 예를 들어 곰을 볼 때, 당신은 전송 메커니즘으로 명명 된 파이프를 사용해야하므로합니다 셸 확장없이이 작업을 수행하려면 파일 연결 만 추가하면됩니다. 어느 것이 "선호하는 길"이 될 것인가. –

+0

[this] (http://blogs.msdn.com/b/oldnewthing/archive/2006/12/18/1317290.aspx) 및 [this] (http://blogs.msdn.com/b/)를 읽어보십시오. 왜 이것이 나쁜 생각인지에 대한 (비록 일부 [동의하지] (http://stackoverflow.com/questions/15834410/regasm-codebase-works-but-file-homenewthing/archive/2013/02/22/10396079.aspx) regasm-codebase-regfile-does-no/15835909 # comment22533300_15835909)와 같이 생성되었습니다. –

답변

2

에 미리

덕분에 당신은 실행중인 응용 프로그램의 메소드를 호출 할 Windows Communication Foundation (WCF)를 사용할 수 있습니다. 설정하기가 다소 까다 롭지 만, 일단 RPC를 사용하면 RPC를 통해 메소드를 호출하는 것이 매우 쉽습니다.

이 메서드는 별도의 스레드에서 호출되므로 필요에 따라 UI 호출에 마샬링해야합니다 (Windows Forms의 경우 Control.Invoke() 또는 Control.BeginInvoke() 사용).

See here for full details.

또한 see here for a simple example입니다.

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

특히 OP는 명명 된 파이프 (.NET Remoting에서 IPC의 후속 모델)를 사용해야합니다. http://stackoverflow.com/questions/1613586/c-sharp-wcf-inter-process-communication –