2015-12-30 4 views
3

Я программно запускаю консольные приложения. Все они отображаются как conhost.exe в диспетчере задач.Как изменить имя консольного приложения, отображаемое в диспетчере задач?

Как установить имя процесса таким образом, чтобы оно отображалось как таковое в диспетчере задач?

Пример того, как я устанавливаю мой процесс:

public static Process CreateMultiCoreExeProcess(int coreIndex, int coresToUse, string executableFilepath) 
{ 
    //* Create your Process 
    Process process = new Process 
    { 
     StartInfo = 
     { 
      FileName = executableFilepath, 
      Arguments = coreIndex + " " + coresToUse, 
      UseShellExecute = false, 
      CreateNoWindow = true, 
      RedirectStandardOutput = true, 
      RedirectStandardError = true 
     }, 
     EnableRaisingEvents = true 
    }; 

    return process; 
} 

... как вы можете видеть, что это не атрибут, который задает имя процесса (что я знаю). Я хотел бы иметь возможность задать имя процесса в то время, когда я его создаю.

DUPLICATE QUESTION REMARK: это не дубликат, как было сделано. Решение, представленное как дубликат, относится к имени STATIC для процесса, заданному в свойствах проекта. Я запускаю свой процесс DYNAMICALLY (во время выполнения) и хотел бы установить имя процесса в это время.

ОБНОВЛЕНИЕ: Я убежден, что это невозможно. По крайней мере, не в реалистичном (то есть постоянном) способе. Я вполне уверен, что мы «застреваем» с именем, указанным в информации о сборке, и его невозможно изменить программным путем в диспетчере задач. Это неудачно для моего приложения, которое состоит в том, чтобы создать 10+ идентичных исполняемых файлов процесса. Иногда я хочу убить только одного из них, но я не могу определить, какой-есть-который в диспетчере задач, потому что все они имеют одинаковое имя.

+0

Может ли кто-нибудь с более высоким разрешением, чем я, удалите панель «дублировать вопрос» наверху? Ответ на этот вопрос связан с ОПИСАНИЕМ, а не с ИМЕНИМИ. Они не одинаковы. – sapbucket

+0

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

ответ

1

Использование линии:

Console.Title = "My Console Application"; 

установить имя консоли

и установить имя/описание в диспетчере задач, это было ответить, прежде чем уже несколько раз. Проверить эту ссылку How can I set the Task Manager description for my program?

+0

Насколько я понимаю, он хочет начать новый процесс и дать имя, которое, я считаю, не способно. –

+0

@Ahmed. Я попробовал ваше решение, и оно не сработало. – sapbucket

+0

@Ahmed - ваш ответ изменяет ОПИСАНИЕ, а не ИМЯ ИЗОБРАЖЕНИЯ. – sapbucket

5

Вы можете использовать P/Invoke для изменения имени процесса после его создания. (. Так как вы не можете определить, когда вы создаете его имя по умолчанию имя, указанное в программе.)

[DllImport("user32.dll")] 
static extern int SetWindowText(IntPtr hWnd, string text); 
... 
SetWindowText(process.MainWindowHandle, "Process Name/Title"); 

Edit: Оглядевшись по сети, оказывается, возможно, придется подождать 100ms или около того перед установкой имя (либо через Thread.Sleep, либо process.WaitForInputIdle в случае приложения GUI).

+0

Этот текст окна появляется в диспетчере задач? – sapbucket

+0

@sapbucket Sorta .. http://i.imgur.com/Rz4U2Jk.png – Cyral

+0

Я пробовал это в режимах выпуска и отладки. Я использовал таймер 100 мс до и после вызова SetWindowText(). Нет изменений в имени образа процесса в диспетчере задач. – sapbucket

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