Вопрос

У меня есть приложение 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);
}
Это было полезно?

Решение

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

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

Другие советы

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

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

Если вы используете .NET 4, вы можете рассмотреть карту памяти файлов для межпроцессной связи. Второй экземпляр может написать некоторые данные в общую память, установить систему Mutex для уведомления исходного экземпляра, а затем выключить. Посмотри это Обзор отображенных файлов памяти.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top