2009-07-13 4 views
1

많은 하위 컨트롤이 포함 된 WPF 앱이 있습니다.외부 프로세스에서 실행되는 WPF "컨트롤"만들기

이러한 컨트롤 중 하나는 내부적으로 액세스 위반을 일으키는 네이티브 코드를 실행하고 응용 프로그램을 중단시키는 타사 라이브러리를 호스팅합니다. 불행히도 라이브러리를 제거하는 것은 옵션이 아닙니다.

내가하고 싶은 것은 새 Windows 프로세스를 시작하고 그 안에 제 3 자 라이브러리를 호스트하며 어떻게 든 통신합니다. Google 크롬과 IE8이 브라우저 플러그인을 처리하는 것과 같은 방식입니다.

제 3 자 라이브러리가 화면에 그려야하므로 문제가 발생합니다. 따라서 WPF 앱의 기본 창에 HTML iframe과 동일한 기능이 있어야합니다.

나는 이것을 시작하는 방법을 모르지만, 지금까지는 구글을 찾기가 어렵다. 어떤 조언을 크게 주시면 감사하겠습니다.

+0

여기서 무엇을 했습니까? 이것에 대해 매우 궁금해. –

+0

아직 아무 것도하지 않았습니다. 우리가 할 때이 질문을 업데이 트해야 할 것입니다 –

답변

0

아마도 가장 쉬운 작업은 아닙니다. 별도의 App-Domain에서 제 3 자의 물건을 호스팅하는 것을 고려 했습니까? 그렇게하면 다른 프로젝트의 번거 로움을 덜어 줄뿐만 아니라 우수한 수준의 격리를 얻을 수 있습니다. 끊임없이 새로 고쳐야합니까? 아니면 응용 프로그램의 미리 정의 된 지점에서 새로 고칠 수 있습니까? 어쩌면 당신이 기본적으로 타사 출력의 스크린 샷을 찍은 다음 원래 응용 프로그램의 이미지로 표시 할 수 있습니다.

+0

나는 그것을 이해하고 별도의 AppDomain 여전히 동일한 Win32 프로세스 내에 살고 있습니까? 타사 응용 프로그램이 네이티브 코드 수준 (win32 액세스 위반 등등)에서 충돌하기 때문에 별도의 Windows 프로세스에서 실행해야합니다. 이러한 일이 발생하면 전체 Windows 프로세스가 다운됩니다. .NET 및 모두 –

+0

AppDomain이 트릭을 수행해야합니다. 하나의 AppDomain이 다운되면 다른 것도 괜찮습니다. AppDomain을 ".NET 프로세스"(일종의)라고 생각하십시오. – Andy

+0

이 작업을 수행하려면 경계를 넘어서 컨트롤을 가져와야하며 컨트롤은 MarshallByRefObject를 확장하지 않습니다. 그래서 이것은 효과가 없을 것입니다. – Will

3

이것은 힘든 것이지만 다행스럽게도 약간의 작업이 있습니다. 요즘엔이 공간에서 잘 했어.

.NET 3.5에서 System.Addin 네임 스페이스에 대해 들어 보셨습니까? 이 경우 아마도 도움이 될 수 있습니다. 컨트롤을 별도의 AppDomain에로드 할 수 있지만 동일한 UI에 표시 할 수 있습니다. 나는 당신이 모든 것을 제대로하기 위해 약간의 일을해야한다고 생각한다.하지만 결코 불가능하다. 나는 그래서 만약이 매우 관심 http://clraddins.codeplex.com/

: 그들은 코드 플렉스에 자신의 샘플 및 도우미 코드를 유지처럼 http://blogs.msdn.com/clraddins/archive/2007/08/06/appdomain-isolated-wpf-add-ins-jesse-kaplan.aspx

보인다

는 추가 기능 팀이 초기 포스트에서보세요 이 일을하게되면, 이것이 어떻게 당신을 위해 갔는지 알려주세요!

+0

감사합니다. 전에 System.Addins를 조사했는데 제대로 작동해야합니다. clr-addins 샘플을 다운로드하고 살펴 보겠습니다. System.Addins에서 요구하는 계약 내용은 필자가 필요로하거나 원했던 것보다 훨씬 더 무거워서 기본 기술을 사용하고 자체적으로 사용하는 기본 기술을 이해할 수 있기를 바랍니다. –

+0

나는 그것을 읽는 방식으로 많이하고있다. 당신이 동적 인 것을 많이 필요로하지 않는다면, "파이프 라인 생성기"를보십시오 ... 바라건대 그것은 당신을 시작할 것이고 어쩌면 많은 계약 물건들을 무시할 수있을 것입니다. 그들은 거기에서 꽤 미친 마법을하고 있습니다. 나는 잘못 읽었을 수는 있지만 그들은 공정하지 못한 것에 대한지지를 얻은 것처럼 보입니다 ... 구현하기가 미친 것 같습니다. –

관련 문제