У меня есть приложение clickonce, и я настроил несколько обработчиков файлов для этого приложения (для примера я хочу обрабатывать файлы с расширениями .aaa
или .bbb
).
Если я выберу один файл с одним из этих расширений, мое приложение запустится как положено, все хорошо.Но если я выберу несколько файлов и открою их (нажав Enter или щелкнув правой кнопкой мыши и выбрав Open ), то будет запущено несколько экземпляров моего приложения - один экземпляр на файл, которыйбыло выбрано.
Это не то поведение, которое я ожидал, я хочу, чтобы только один экземпляр запускался с несколькими записями в AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData
.Может ли это быть достигнуто, или мои ожидания неверны?
Редактировать:
Просто чтобы уточнить: мы следовали подходу с одним экземпляром, как упомянуто @Matthias, первым экземпляром, который нужно запуститьup создает именованный канал сервера.Затем запускаются последующие экземпляры, обнаруживают, что они являются вторичными, передают свои аргументы командной строки (имя файла) через основной экземпляр через именованный канал, а затем завершают работу.Основной экземпляр получает имя файла через именованный канал и делает свое дело (запускает мастер импорта файлов).
Проблема возникает, когда пользователь выбирает несколько файлов (то есть 5 файлов), а затем выбирает, чтобы открыть эти файлы в приложении.Вместо того, чтобы получить один вторичный экземпляр, начинающийся с 5 имен файлов, указанных в командной строке, я получаю 5 вторичных экземпляров запуска приложения, каждый с одним именем файла в командной строке.Затем каждый из них создает клиентский канал с именем pipe и сообщает это имя файла основному экземпляру, поэтому именованный канал сервера получает 5 отдельных сообщений.
Последующие мысли:
после разговора оЭто происходит со мной, что, возможно, именно так работают зарегистрированные обработчики файлов, возможно, это не связано с clickonce.Может быть, решение заключается в том, чтобы сервер с именованным каналом приостанавливал работу после получения каждого сообщения и пытался ставить сообщения в очередь перед их действием?