2012-01-19 3 views
0

Я отправил еще один вопрос о получении аргументов из контекстного меню App. Если вы выберете элемент, он даст строковый путь к этому элементу, но он запустит новый экземпляр приложения для каждого элемента, выбранного более одного. С Environment.GetCommandLineArgs() он дает строковый массив с первым элементом - это .exe, вызывающий функцию, а второй элемент - путь строки выбранного элемента. Опять же, если я выберу 2 или более пунктов и щелкните правой кнопкой мыши >> запустите приложение, я получаю 2 или более экземпляра приложения, каждый из которых имеет первый элемент в качестве .exe, за которым следует второй элемент как один из выбранных элементов. (Я сделал это с MessageBox.Show() после присоединения к двум элементам, и он всплывает окно сообщения 3 раза, по 1 для каждого из трех выбранных элементов).C# Environment.GetCommandLineArgs() из контекстного меню

Теперь я использую Mutex, чтобы позволить ему запускать один раз, но я получаю только первое окно сообщения (как и ожидалось).

Как я могу получить все элементы, перечисленные в одном экземпляре, если я выбираю более одного элемента?

Вот код без взаимной блокировки:

static void Main() 
    { 
     String[] args = Environment.GetCommandLineArgs(); 
     var message = string.Join(", ", args); 
     MessageBox.Show(message); 
    } 

А вот с мьютекс:

static void Main() 
    { 
     Mutex startOnlyOne = new Mutex(false, "WinSyncSingalInstanceMutx"); 
     if (startOnlyOne.WaitOne(0, false)) 
     { 
      String[] args = Environment.GetCommandLineArgs(); 
      var message = string.Join(", ", args); 
      MessageBox.Show(message); 
      startOnlyOne.Close(); 
     } 

Никто не был в состоянии помочь мне с этим все же, я надеюсь, что кто-то может помочь я понимаю это. Заранее спасибо ...

+0

Вы используете много местоимений, которые затрудняют понимание того, что вы делаете. Вы говорите «он делает X», не уточняя, что такое «оно», например. –

+0

Приложение представляет собой контекстное меню Windows Приложение ... выберите файл на рабочем столе и щелкните правой кнопкой мыши ... в этом контекстном меню - мое приложение. Выберите приложение, и он получит путь к файлу выбранного файла и добавит его в коллекцию (если выбрано несколько файлов, он должен добавить в коллекцию более одного пути к файлу). Помогает ли это вообще? –

+0

Итак, вы имеете в виду, что ваша программа является расширением оболочки? –

ответ

1

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

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

+0

, что имеет смысл –

Смежные вопросы