2013-11-13 6 views
2

Надеюсь, что вы можете помочь мне с этим, мой C# очень ржавый.C#: Запустите процесс, а затем убейте его с помощью кнопки

Я запускаю исполняемый файл, когда форма загружается.

private void Form1_Load(object sender, EventArgs e) 
    { 
     ProcessStartInfo exe = new ProcessStartInfo(); 
     exe.Arguments = "arguments"; 
     exe.FileName = "file.exe"; 
     Process.Start(exe); 
    } 

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

private void button1_Click(object sender, EventArgs e) 
    { 

    } 

Thanks.

+0

процесс будет достичь того, чего вы хотите Http:? //www.dotnetperls.com/kill –

+0

Если вы также автор «другой» процесс вы можете рассмотреть вопрос пользователя объект синхронизации, например с именем [мьютексом] (http://msdn.microsoft.com/en-us/library/system.threading.mutex (v = vs.110) .aspx), чтобы передать запрос на остановку. Второй процесс может иметь ожидание потока на событии и выполнять любые соответствующие действия перед выходом. – HABO

ответ

5

Process.Start возвращает объект типа Process. Вы можете сохранить его в переменной, а затем использовать метод Kill, который Immediately stops the associated process (msdn)

Например объявить поле на Form1 уровне:

class Form1 
{ 
    private Process process; 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     //running notepad as an example 
     process = Process.Start("notepad"); 
    } 

    //and then at button handler kill that process 
    private void button1_Click(object sender, EventArgs e) 
    { 
     //consider adding check for null 
     process.Kill(); 
    } 
} 
+0

Спасибо, он работает. Однако есть ли способ убить процесс, если приложение закрыто принудительно? – user2077474

0

попробовать это

try 
{ 
Process [] proc Process.GetProcessesByName("notepad"); 
proc[0].Kill(); 
} 
2

Вы должны позвонить Process.CloseMainWindow, который выполняет упорядоченное завершение процесса и закрывает все окна. В отличие от Process.Kill, что вызывает ненормальное прекращение. CloseMainWindow предпочтительнее для приложений с пользовательским интерфейсом.

process = Process.Start(exe);//in form load set field 

private void button1_Click(object sender, EventArgs e) 
{ 
    process.CloseMainWindow(); 
} 

remarks on MSDN показывает важную информацию относительно асинхронного поведения и других соответствующих деталей.

Убивает за прекращение процесса, в то время как CloseMainWindow только запрашивает завершение. Когда процесс с графическим интерфейсом выполняет , его цикл сообщения находится в состоянии ожидания. Цикл сообщений выполняется каждый раз, когда сообщение Windows отправляется процессу операционной системой . Вызов CloseMainWindow отправляет запрос на закрытие окна , которое в хорошо сформированном приложении закрывает дочерние окна и отменяет все запущенные петли сообщений для приложения. Запрос , чтобы выйти из процесса, вызвав CloseMainWindow, не вызывает приложения для выхода. Приложение может запросить подтверждение пользователя перед тем, как уйти, или оно может отказаться от выхода. Чтобы принудительно применить приложение к , используйте метод Kill. Поведение CloseMainWindow равно , идентичное тому, которое пользователь закрывает в главном окне приложения, используя в системном меню. Поэтому запрос на выход из процесса, закрыв , основное окно не заставляет приложение немедленно выйти.

и т.д ...

+1

+1, замечательная заметка о 'CloseMainWindow' –

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