Есть ли способ?
К сожалению, нет. Действительно, существует FindOrRegisterInstanceForKey API, который позволяет регистрировать и извлекать конкретный экземпляр приложения с помощью ключа, но он не поддерживается в упакованных настольных приложениях.
Вы должны будете реализовать эту функцию самостоятельно, например, используя Mutex
. Просто запретить запуск нескольких экземпляров должно быть довольно просто. В упакованном приложении WPF вы должны изменить свойство Build Action
файла App.xaml
с ApplicationDefinition
на Page
, чтобы компилятор не генерировал для вас метод Main
по умолчанию, и написать его самостоятельно:
class Program
{
const string AppUniqueGuid = "9da112cb-a929-4c50-be53-79f31b2135ca";
[STAThread]
static void Main(string[] args)
{
using (System.Threading.Mutex mutex
= new System.Threading.Mutex(false, AppUniqueGuid))
{
if (mutex.WaitOne(0, false))
{
App application = new App();
application.InitializeComponent();
application.Run();
}
else
{
MessageBox.Show("Instance already running!");
}
}
}
}