2009-09-03 4 views
0

이 작업을 수행 할 수 있는지는 잘 모르겠지만 기본적으로 .NET Framework를 실행하지 않는 다른 어셈블리에서 이미 .NET 프로세스를 실행하고있는 메서드를 호출 할 수 있어야합니다. 동일한 프로세스를 공유합니다.다른 응용 프로그램에서 .NET 어셈블리를 이미 실행중인 호출 메서드

기본적으로 내가 가진 것은 응용 프로그램이며 .net 메서드를 호출하면 해당 메서드가 포함 된 어셈블리를 appdomian에로드 한 다음 메서드를 호출합니다.

로드 된 어셈블리에서 다른 프로세스로 이동하여 제공된 메서드를 호출해야합니다.

나는이 도움이되지 않을 수도 있습니다 알고 있지만이 일어나는의 사진입니다 : 낮은 품질에 대한 alt text http://img527.imageshack.us/img527/6960/probt.jpg

죄송합니다.

답변

1

앱을 제어 할 수 있습니까? 그렇다면 '채널을 열어'서로 연결하십시오. 소켓을 사용하거나 다른 소켓이나 이름이 지정된 파이프 또는 이와 유사한 소켓을 쓸 수 있습니다. 제가 둘 다 쓰고 있다면, 제가 할 수있는 일 이죠.

+0

저는 MyWrapper, MyApp 및 MyHook을 제어합니다. 명명 된 파이프를 수행하는 데 좋은 정보가 있습니까? –

+0

검색의 비트는 나를 여기에 : http://www.omegacoder.com/?p=101, 당신이 얻는 것을 위해, 조금 복잡하게 보입니다. 아마 소켓 접근 방식으로 갈 것입니다. –

0

가장 쉬운 방법은 ServiceHost를 사용하여 WCF 서비스를 노출하는 것입니다. 다른 프로세스의 프로세스에서 오브젝트에 액세스하도록 지시 할 수 없습니다. 유일한 옵션은 메시지를 다른 프로세스로 보내고 메시지를 해석하고 작업을 실행하는 것입니다. 이 도움이 http://blogs.microsoft.co.il/blogs/davids/archive/2009/05/31/a-hands-on-lab-for-wcf-moc-6461.aspx

희망 :

여기 당신은 간단한 예를 찾을 수 있습니다.

0

question은 (는) 중복 된 것으로 표시되었습니다. 그리고이 질문에 그 질문에 대한 대답이 있다고 결정한 사람들. 글쎄,이 질문에는 어떤 대답도 아직 없습니다. 내 대답이 도움이 될지도 모른다. 이 솔루션은 WPF와 함께 작동하지만 그 본질은 실제로 WPF의 indepent입니다

나는 재미있는 주제로 조금 연구했습니다. Win32를 사용하여이 작업을 수행 할 수 있다고 생각합니다. 매우 간단한 샘플을 만들었습니다. 두 개의 WPF 응용 프로그램, 처음에는 WpfSender, 두 번째 이름은 WpfListener입니다. WpfSender는 WpfListener 프로세스에 메시지를 보냅니다.

WpfSender에는 클릭 한 번만 메시지를 보내는 버튼 하나만 있습니다. WpfListener는 WpfSender에서 메시지를받을 때 메시지 상자를 표시하는 빈 창입니다. 여기

enter image description here

여기

using System; 
using System.Windows; 
using System.Windows.Interop; 


namespace WpfListener 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void MainWindow_OnLoaded(object sender, RoutedEventArgs e) 
     { 
      HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle); 
      source.AddHook(WndProc); 
     } 

     private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
     { 

      if (msg == RF_TESTMESSAGE) 
      { 
       MessageBox.Show("I receive a msg here a I can call the method"); 
       handled = true; 
      } 
      return IntPtr.Zero; 
     } 

     private const int RF_TESTMESSAGE = 0xA123; 
    } 
} 

WpfListener

코드입니다 당신은 윈도우 응용 프로그램에서 메시지를 보내는에서 Win32 API를 사용 WpfSender

using System; 
using System.Diagnostics; 
using System.Linq; 
using System.Runtime.InteropServices; 
using System.Windows; 


namespace WpfSender 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
     { 
      var process = Process.GetProcessesByName("WpfListener").FirstOrDefault(); 
      if (process == null) 
      { 
       MessageBox.Show("Listener not running"); 
      } 
      else 
      { 
       SendMessage(process.MainWindowHandle, RF_TESTMESSAGE, IntPtr.Zero, IntPtr.Zero); 
      } 
     } 

     [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
     private static extern IntPtr SendMessage(IntPtr hwnd, uint Msg, IntPtr wParam, IntPtr lParam); 

     private const int RF_TESTMESSAGE = 0xA123; 
    } 
} 

에 대한 뒤에 코드 XAML은 여기에 작성하지 않으므로 아주 간단합니다. 다시 이것은 간단한 응용 프로그램 메시지 전송을 수행하는 방법을 보여주는 간단한 샘플입니다. 한계는 당신의 상상력입니다. 각각의 액션을 나타내는 많은 int 상수를 선언 할 수 있으며, switch 문에서 선택한 액션을 호출 할 수 있습니다.

나는 내 연구에서 발견 된이 기사 따를 것을 말해야한다 :이 도움이

For knowing how to handle WndProc in Wpf

For knowing how to send messages using win32 api

희망을!

관련 문제