Простое общение между двумя экземплярами приложения - PullRequest
2 голосов
/ 27 декабря 2010

У меня есть приложение WPF, которое может принимать несколько необязательных аргументов командной строки.

Это приложение также является приложением с одним экземпляром (используя мьютекс для закрытия любых экземпляров, если он уже открыт).

Что я хочу для этого сделать, так это то, что если кто-то пытается открыть приложение с некоторыми строковыми аргументами cmd, то приложение будет делать то, что должно делать с ними (в моем приложении оно открывает различные диалоги на основе cmd линия).

Какой самый простой способ добиться этого?

В коде psedo вот что я ищу

protected override void OnStartup(StartupEventArgs e)
{
     bool mutexIsNew;
     using (System.Threading.Mutex m = 
            new System.Threading.Mutex(true, "MyApplication", out mutexIsNew))
     {
         //if this is not the first instance of the app
         if (!mutexIsNew)
         {
              //if there is some cmd line args  
              if (e.Args.Length > 0)
              {
                   //send the args to the older instance so it can handle them
                   SendToOtherInstance(e.Args);
                   //shutdown this new instance
                   Application.Current.Shutdown();
               }

         }
     }
     base.OnStartup(e);
}

Ответы [ 4 ]

3 голосов
/ 27 декабря 2010

Существует множество реализаций приложений для одного экземпляра в Code Project, на самом деле их так много, что трудно решить, какое из них вы хотите ...

Я пробовал несколько решений, и мне действительно нравится это .Это позволяет очень легко перехватывать параметры командной строки, передаваемые во второй экземпляр.

1 голос
/ 27 декабря 2010

Почему бы вам просто не отправить сообщение Windows в диапазоне WM_USER. Вам нужно будет немного упорядочить информацию, но вы можете сделать это с помощью GlobalAlloc, GlobalLock и т. Д. Довольно просто.

0 голосов
/ 27 декабря 2010

Если вы используете .net 4, вы можете рассмотреть файлы с отображенной памятью для межпроцессного взаимодействия.Второй экземпляр может записать некоторые данные в общую память, установить системный мьютекс для уведомления исходного экземпляра, а затем завершить работу.См. Этот обзор файлов с отображением в памяти.

Или, еще проще, запишите аргументы командной строки в простой текстовый файл в папке, которая всегда отслеживается исходным экземпляром.Исходные экземпляры видят новый файл, обрабатывают его, а затем удаляют.Этот подход работает с любой версией .net и будет проще тестировать / отлаживать.

0 голосов
/ 27 декабря 2010

Вы можете рассмотреть возможность обращения логики, т. Е.закройте уже запущенный экземпляр и перезапустите его с новыми параметрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...