Хорошо, если вы дважды щелкнете по ярлыку, это фактически откроет другой экземпляр приложения, который не знает о том, что уже запущенный свернут в лоток.
По сути, вы хотите обнаружить, что другойэкземпляр вашего приложения работает при запуске.Если это так, сообщите существующему экземпляру вашего приложения, чтобы он показывал пользователю его пользовательский интерфейс, а затем закройте.
Ваше решение состоит из двух вещей:
- Возможность вашего приложенияпонять, что другой его экземпляр уже запущен.
- Возможность вашего приложения "общаться" (межпроцессное взаимодействие) с другими его экземплярами и указывать им, что делать.
1.Способность вашего приложения понять, что другой его экземпляр уже запущен.
Это просто в .NET.Когда ваше приложение откроется, используйте класс Mutex
.Это общесистемная блокировка, в остальном похожая на Monitor
.
Пример:
// At app startup:
bool createdNew;
var mutex = new Mutex(true, Application.ProductName, out createdNew);
if (!createdNew)
{
// Use IPC to tell the other instance of the app to show it's UI
// Return a value that signals for the app to quit
}
// At app shutdown (unless closing because we're not the first instance):
mutex.ReleaseMutex();
2.Межпроцессное взаимодействие
Существует несколько способов сделать IPC в .NET.WCF один, хотя и довольно тяжелый.Именованные каналы, вероятно, лучший выбор для вас, хотя это настолько простое требование, что базовые сообщения сокетов также должны работать.
Вот ссылка на вопрос о подходящих методах IPC в .NET, чтобы помочь вам: Каков наилучший выбор для межпроцессного взаимодействия .NET?