Недопустимое исключение операции из класса процессов С#
Когда я использую отладчик VSTS для просмотра свойств экземпляра класса Process
, многие свойства помечены InvalidOperationException
. Зачем? Я делаю что-то неправильно?
Я использую VSTS 2008 + С# +.Net 2.0 для разработки консольного приложения.
Вот мой код:
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "IExplore.exe";
myProcess.StartInfo.Arguments = @"www.google.com";
myProcess.StartInfo.Verb = "runas";
myProcess.Start();
И снимок экрана отладчика:
http://i26.tinypic.com/bdldvm.jpg http://i26.tinypic.com/bdldvm.jpg
Ответы
Ответ 1
Действительно ли вы начали процесс, когда была сделана съемка отладчика? Чтобы вызвать скриншот, который я ожидаю увидеть перед тем, как вызывается метод Start()
.
Обратите внимание, что общий шаблон - это создать ProcessStartInfo
, заполнить его, а затем вызвать статический метод Process.Start(startInfo)
. Это делает его концептуально более простым: вы не видите объект Process
до его запуска.
Ответ 2
Большинство свойств становятся доступными после запуска процесса IExplore.
Ответ 3
Да, это ожидаемое поведение, и оно явно задокументировано в MSDN.
Например, свойство Process.BasePriority может вызывать исключение InvalidOperationException, когда процесс завершился или процесс не запущен (подробнее см. MSDN).
Ответ 4
Многие свойства отмечены InvalidOperationException, потому что пока вы не начнете процесс. Объект 'myProcess' не связан с каким-либо запущенным процессом и, следовательно, не может получить информацию.
Попробуйте добавить эти инструкции после кода для запуска процесса
if (myProcess != null)
{
myProcess.WaitForExit();
//or any other statements for that matter
}
Теперь, когда вы находитесь внутри оператора if, отладчик VSTS сможет отображать большинство свойств, связанных с объектом myProcess. Это происходит потому, что объект myProcess теперь связан с запущенным процессом "IExplore.exe".