Полагаю, вы описываете следующую стратегию: -
- Экземпляр A вашего приложения открыт и воспроизводит трек X.
- пользователь дважды щелкает трек Y в проводнике
- windows запускает экземпляр B вашего приложения, передавая имя файла в качестве параметра
- экземпляр B обнаруживает экземпляр A
- экземпляр B отправляет сообщение экземпляру A для воспроизведения дорожки Y
- экземпляр B выключается
- экземпляр A получает сообщение, останавливает воспроизведение дорожки X и начинает воспроизведение дорожки Y
Очевидно, именно так работает медиаплеер VLC. Если вы попробуете описанное выше, вы увидите, что новый процесс VLC появится на короткое время, прежде чем ваш текущий экземпляр начнет воспроизведение новой дорожки.
Этот вид очень простого межпроцессного взаимодействия может быть достигнут с использованием чего-то вроде System.Threading.Mutex . Например. Вы можете использовать один мьютекс, чтобы указать на существование запущенного экземпляра, а другой - для передачи имени новой дорожки текущему экземпляру.
На самом деле эта статья описывает нечто очень похожее.