Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Открытие ассоциированных с программой файлов в уже запущенном экземпляре программы (вместо запуска нового)

#c_sharp #net


Для того, чтобы открыть ассоциированный файл, программа проверяет при запуске были
ли переданы в нее какие-либо параметры. Для простоты можно представить, что открывается
текстовый файл.

 private static void Main(string[] args)
 {
   if(args != null && args.Length > 0)
   {
     string fileName = args[0];
     // дальше что-то делаю с файлом
   }
 }


Проблема в следующем. Если я открываю с помощью проводника очередной файл, то открывается
новая копия программы, а мне надо, чтобы файл открывался в уже открытой копии, если
она есть или открывал, если нет.
    


Ответы

Ответ 1



Есть следующий способ запуска только одной сущности любого .NET приложения: При запуске создаем и пытаемся залочить мьютекс. Если это удалось -- это первый инстанс приложения. Если взять лок не удалось -- значит, наше приложение уже запущено (поскольку мьютекс является объектом ОС и шарится между всеми процессами). Если мы обнаружили, что приложение уже запущено, нам нужно передать сообщение (в вашем случае -- путь к файлу) запущенному процессу. Это можно сделать любым из способов межпроцессорного взаимодействия: сообщения Windows, веб-сервис и т.д. При любом выходе из приложения (нормальном или аварийном) не забываем освобождать мьютекс. Пример правильного использования мьютекса -- тут. В случае Windows Forms приложения есть более простой способ, описанный на StackOverflow.

Комментариев нет:

Отправить комментарий