2009-06-18 3 views
27

Я хочу выполнить инструмент командной строки для обработки данных. Его не нужно блокировать. Я хочу, чтобы это был низкий приоритет. Так что я написал нижеКак запустить процесс с низким приоритетом? C#

Process app = new Process(); 
app.StartInfo.FileName = @"bin\convert.exe"; 
app.StartInfo.Arguments = TheArgs; 
app.PriorityClass = ProcessPriorityClass.BelowNormal; 
app.Start(); 

Однако, я получаю System.InvalidOperationException с сообщением «Никакой процесс не связан с этим объектом.» Зачем? Как правильно запустить это приложение с низким приоритетом?

Без линии app.PriorityClass = ProcessPriorityClass.BelowNormal; приложение работает нормально.

ответ

38

Попробуйте установить PriorityClass ПОСЛЕ запуска процесса. Диспетчер задач работает таким образом, позволяя вам установить приоритет для уже запущенного процесса.

+1

Оказалось, что это единственный способ. – 2010-06-23 15:48:04

3

Если вы готовы к P/Invoke до CreateProcess, вы можете пройти CREATE_SUSPENDED в флагах. Затем вы можете настроить приоритет процесса, прежде чем возобновлять процесс.

4

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

var parent = Process.GetCurrentProcess(); 
var original = parent.PriorityClass; 

parent.PriorityClass = ProcessPriorityClass.Idle; 
var child   = Process.Start("cmd.exe"); 
parent.PriorityClass = original; 

child будет иметь преимущественное право на Idle процесс в самом начале.

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