2013-08-03 4 views
0

Я знаю, что могу отменить событие пользователя, щелкнув по кнопке x в форме окна, но я хочу сделать так, чтобы диспетчер задач не смог его закрыть. Я не нашел это в Интернете, но я уверен, что есть способ сделать это.Не позволяйте форме закрываться каким-либо образом

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if(e.CloseReason == CloseReason.TaskManagerClosing) 
    { 
     e.Cancel = true; 

    } 
} 
+2

Зачем вам это нужно? Это важная функция диспетчера задач. Если бы вы могли описать, что вы пытаетесь выполнить, может быть предложена альтернатива. Я думаю, вы пишете утилиту для киоска или что-то в этом роде, где вы не хотите, чтобы обычные пользователи возились с системой? Для чего-то вроде, просто зарегистрируйте пользователя в качестве гостя. –

+5

Диспетчер задач спрашивает сначала. Вы блокируете это. Затем он переключается на режим убийства и смерти. И завершает ваш процесс с помощью TerminateProcess(). Вы не можете это прекратить. Пользователь * всегда * выигрывает. –

+1

«Я уверен, что есть способ сделать это». И я уверен, что вы ошибаетесь. Невозможно предотвратить закрытие приложения пользователем. Вы можете сделать это сложнее, но в конечном итоге пользователь может убить ваше приложение. –

ответ

1

Есть несколько сценариев здесь:

  1. Вы убиваете приложение, выполнив «Завершить процесс» на вкладке Processes. В этом случае вы ничего не можете сделать.

  2. Вы выполняете «Завершить задачу» на вкладке «Приложения». Вы можете перехватить это, обработав событие закрытия вашей основной формы и написание этого кода. Вы можете узнать больше о закрытой причине here.

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
        if (e.CloseReason == CloseReason.TaskManagerClosing) 
        { 
    
        } 
    } 
    

Хотя, если вы абсолютно хотите, чтобы убедиться, что пользователь не может остановить запуск приложения, необходимо создать отдельное приложение, которое держит часы на вашем приложении. И всякий раз, когда он убивается, ваше приложение запускает его снова. Вы можете проверить, работает ли приложение или нет через следующий код и вызывать этот код через таймер после каждого 10s или любого желаемого интервала.

private bool IsProcessRunning(string name) 
{ 
    foreach (Process p in Process.GetProcesses()) 
    { 
      if (p.ProcessName.Contains(name)) 
      { 
       return true; 
      } 
     } 
     return false; 
} 
+0

Я не понимаю, как реализовать? – jister

+0

if (e.CloseReason == CloseReason.TaskManagerClosing) { e.Cancel = true; } Все еще не делает трюк, я пробовал это – jister

+0

Я обновил свой ответ – Ehsan

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

  • Нет связанных вопросов^_^