Проверка экземпляров запущенного приложения и его уничтожение - PullRequest
1 голос
/ 13 июля 2009

Я использую приложение c # windows.

когда мое приложение запускается, я хочу проверить экземпляры в TaskManager для того же приложения. Если какие-либо экземпляры уже запущены, Shud убить процесс и начать новый.

Это сделано для того, чтобы убедиться, что запущен только один экземпляр приложения.

Ответы [ 4 ]

1 голос
/ 13 июля 2009

Вот быстрый и грязный способ убедиться, что запущен только один экземпляр вашей программы. Секрет в использовании Mutex.

[STAThread]
static void Main()                  
{
    bool ok;
    m = new System.Threading.Mutex(true, "YourNameHere", out ok);

    if (!ok)
    {
        MessageBox.Show("Another instance is already running.");
        return;
    }

    // Do some stuff here...

    GC.KeepAlive(m);                
}

Этот код пытается создать Mutex (взаимное исключение) с определенным именем, и если он не может его создать, то экземпляр этой программы уже должен быть запущен.

1 голос
/ 13 июля 2009

Для меня это звучит действительно агрессивно и, вероятно, не лучшая идея.

Возможно, вы хотите сохранить один экземпляр вашего приложения .

0 голосов
/ 13 июля 2009

Вместо того, чтобы зависеть от имени процесса, которое может быть побеждено даже случайно, переименовав исполняемый файл, традиционный способ проверки существующего экземпляра состоит в том, чтобы иметь именованный дескриптор, такой как мьютекс. Во время запуска проверьте, существует ли он, и немедленно выключите его, если он есть.

редактировать

Я просто прочитал вопрос еще раз, и звучит так, будто вы действительно хотите убить предыдущий экземпляр, а не убить новый. Самое близкое, что я могу вспомнить, - это то, что делает Google Chrome, когда вы открываете новое окно, а старое не отвечает, но даже это проверяет отсутствие ответа и затем запрашивает пользователя. Убийство старого процесса звучит немного экстремально. Вы уверены, что это то, что вы хотите сделать?

0 голосов
/ 13 июля 2009
public Process[] ExistingProcesses()    
{
    string processName = Process.GetCurrentProcess().ProcessName;
    Process[] processes = Process.GetProcessesByName(processName);
    return processes;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...