C # Environment.GetCommandLineArgs () из контекстного меню - PullRequest
0 голосов
/ 19 января 2012

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

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

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

Вот код без мьютекса:

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

А вот и с Mutex:

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();
        }

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

1 Ответ

1 голос
/ 19 января 2012

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

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

...