Ответ 1
Попробуйте установить PriorityClass ПОСЛЕ запуска процесса. Диспетчер задач работает таким образом, позволяя вам установить приоритет для уже запущенного процесса.
Я хочу выполнить инструмент командной строки для обработки данных. Его не нужно блокировать. Я хочу, чтобы это был низкий приоритет. Поэтому я написал ниже
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;
приложение работает нормально.
Попробуйте установить PriorityClass ПОСЛЕ запуска процесса. Диспетчер задач работает таким образом, позволяя вам установить приоритет для уже запущенного процесса.
Если вы готовы к P/Invoke до CreateProcess
, вы можете передать CREATE_SUSPENDED
в флагах. Затем вы можете настроить приоритет процесса, прежде чем возобновлять процесс.
Вы можете создать процесс с более низким приоритетом, сделав небольшой взлом. Вы понижаете приоритет родительского процесса, создаете новый процесс и возвращаетесь обратно к исходному приоритету процесса:
var parent = Process.GetCurrentProcess();
var original = parent.PriorityClass;
parent.PriorityClass = ProcessPriorityClass.Idle;
var child = Process.Start("cmd.exe");
parent.PriorityClass = original;
child
будет иметь приоритет процесса Idle
в начале.