2013-03-03 2 views
1

Приложение, которое я создаю, содержит значок уведомления, и он находится в активном состоянии в фоновом режиме (ну, вроде). Проблема в том, что когда пользователь нажимает на значок моего приложения, приложение запустится снова, и поэтому у меня есть два значка уведомлений и два действия в фоновом режиме и два из всего. И если пользователь снова нажмет значок, будет три из всех этих вещей и ... так почему-то я должен это прекратить. У меня есть идея установить флаг и установить его значение для реестра, и когда мое приложение захочет начать, в форме load event, прочитав значение, оно прекратит приложение. Но я хочу больше ... профессионального способа справиться с этим. Например, не запускается вообще.Как предотвратить запуск приложения снова и снова

ответ

1

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

static void Main() 
{ 
    Process currentProcess = Process.GetCurrentProcess(); 
    var runningProcess = (from process in Process.GetProcesses() 
          where 
          process.Id != currentProcess.Id && 
          process.ProcessName.Equals(
           currentProcess.ProcessName, 
           StringComparison.Ordinal) 
          select process).FirstOrDefault(); 
    if (runningProcess != null) 
    { 
     ShowWindow(runningProcess.MainWindowHandle, SW_SHOWMAXIMIZED); 
     return; 
    } 
} 
+0

вы видите, что я говорю, это щелчок по самому приложению (а не значку уведомления) приносит этот случай. Я имею в виду, когда нажимаю на файл app.exe, эта проблема возникает. – roostaamir

+0

Я вижу, когда он говорит, нажимает на значок, он говорит о фактическом значке рабочего стола. Не уверен, что у меня этот код висит где угодно. Я удалю это, если не найду его. –

1

Создайте какую-либо форму глобального дескриптора Mutex/Event, созданного вашим приложением, а затем в вашей открытой рутинной проверке на наличие присутствия, если это так, выйдите из маршрутизации запуска.

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

UnauthorizedAccessException on Openexisting global mutex

+0

могли бы вы говорить так, что вы говорите с несколько любительских?! Возможно с образцом кода или что-то? Вызвать это несколько мое первое реальное приложение спасибо! – roostaamir

+0

Просто чтобы быть ясно, когда вы запускайте новый экземпляр exe, он открывается в другой STA. Они не разделяют переменные, поэтому вы не можете использовать мьютексы или события, поскольку они не используются совместно. Я ошибаюсь? –

+1

GLOBAL \ Mutex видны на всей машине Windows. Вам нужно будет предоставить разрешения, если вы хотите, чтобы их можно было присоединить к ним, но они предоставляют исключения, если они существуют, и у вас нет разрешения. –

Смежные вопросы