2015-01-08 7 views
0

Я запускаю исполняемый файл, который открывает форму окна из веб-формы. В визуальной студии программа winform запускает метод, а затем правильно закрывает форму окна и выключает программу. Но когда я запускаю тот же файл, что и исполняемый файл, он закрывает окна. Я вижу, что этот исполняемый процесс по-прежнему работает как SmartSheetAPI.exe.Не удается закрыть процесс в C#

enter image description here

Когда я проверяю в свойствах имя файла «SmartSheetAPI.exe». Если я закончу этот процесс в диспетчере задач, он выключит форму окна, поэтому я знаю, что это проблема. Тем не менее, я попытался использовать приведенный ниже код на веб-форме, чтобы убить процесс, но опять же он не работает.

Process process = new Process(); 
process.StartInfo.FileName = @"P:\Visual Studio 2013\Projects\Smartsheet\SmartsheetAPI\obj\Debug\SmartSheetAPI.exe"; 
process.Start(); 
foreach (var processes in Process.GetProcessesByName("SmartSheetAPI.exe")) 
{ 
    process.Kill(); 
} 

Кто-нибудь знает, как закрыть эту штуку. Как я уже сказал, это хорошо работает в программе SmartSheetAPI в визуальной студии, но не закрывает окно как исполняемый файл. Мне просто нужно закрыть этот процесс после запуска метода.

EDIT: Процесс, который не закрывается, является vshost.exe, и по какой-то причине мое приложение закрывается по какой-либо причине (т. Е. Форма окна остается открытой). Если I process.kill(), это все выключается по мере необходимости. Однако проблема заключается в том, что когда я запускаю исполняемый файл этого файла, форма окна остается открытой, но я не могу найти vshost.exe для ее закрытия? Я отключил его, и теперь процесс, который не будет закрыт, - это файл SmartSheetAPI.exe, который является программой, которую я сейчас запускаю. Я просто хочу выйти из этой программы, но я ничего не пытаюсь работать.

+0

Если ваш процесс зависает, вам лучше разобраться в проблеме, а не убить процесс. –

+0

Следите за файловыми замками. Закройте все окна проводника, которые могут отображать информацию о файле. Сама Explorer не должна блокировать файлы, но что-то в ОС может это сделать. В Sysinternals есть программа под названием Process Explorer, которая позволяет вам искать имя файла, чтобы узнать, какой процесс заблокировал его. –

ответ

2

После вызова метода Kill вызовите метод WaitForExit, чтобы дождаться завершения процесса или проверьте свойство HasExited, чтобы определить, прошел ли процесс.

Process process = new Process(); 
process.StartInfo.FileName = @"P:\Visual Studio 2013\Projects\Smartsheet\SmartsheetAPI\obj\Debug\SmartSheetAPI.exe"; 
process.Start(); 
// do some stuff while process is alive ... 
process.Kill(); 
process.WaitForExit(); 
// do stuff after the process has been killed ... 

Для получения более подробной информации смотрите здесь: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill(v=vs.110).aspx

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

+0

Я пробовал все это, но он все еще не работает. Я не уверен, что он может ждать? Кроме того, если он что-то ждет, то почему он отключается правильно в отладчике? – Danrex

+0

Наименьшее усилие будет отслеживать (или регистрировать) и видеть, что происходит. Что касается метода 'WaitForExit', можете ли вы подтвердить, что этот метод ждет _forever_? –

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