Для того, чтобы открыть ассоциированный файл, программа проверяет при запуске были ли переданы в нее какие-либо параметры. Для простоты можно представить, что открывается текстовый файл.
private static void Main(string[] args)
{
if(args != null && args.Length > 0)
{
string fileName = args[0];
// дальше что-то делаю с файлом
}
}
Проблема в следующем. Если я открываю с помощью проводника очередной файл, то открывается новая копия программы, а мне надо, чтобы файл открывался в уже открытой копии, если она есть или открывал, если нет.
Ответ
Есть следующий способ запуска только одной сущности любого .NET приложения:
При запуске создаем и пытаемся залочить мьютекс. Если это удалось --
это первый инстанс приложения. Если взять лок не удалось -- значит,
наше приложение уже запущено (поскольку мьютекс является объектом ОС
и шарится между всеми процессами).
Если мы обнаружили, что приложение уже запущено, нам нужно передать
сообщение (в вашем случае -- путь к файлу) запущенному процессу. Это
можно сделать любым из способов межпроцессорного взаимодействия:
сообщения Windows, веб-сервис и т.д.
При любом выходе из приложения (нормальном или аварийном) не
забываем освобождать мьютекс.
Пример правильного использования мьютекса -- тут
В случае Windows Forms приложения есть более простой способ, описанный на StackOverflow
Комментариев нет:
Отправить комментарий