Вывод информации по процессу - C#
Формулировка задачи:
Всем привет, не могу понять
Работа в консоли:
И так мне нужно ввести название процесса в консоль, и после появиться информация о процессе, как сделать проверку по диспетчеру задач? (например если я ввожу в консоль: explorer - то сделать вывод путь к нему и дальнейшие действие..., если же какой-то другой не понятный ( Shwabra - то мол такого процесса не существует! )
Возможно это покажется легкой задачей, но мой утомленный мозг с этой задачей не справляется )
Так вот не могу понять как реализовать?!
P.S: Как мне всё это совместить?
1 - Вывод путь: Process.Start("что ввели в консоли - как сюда это впихнуть?");
2 - После вывода путь: сделать дальнейшее действие, например, убить процесс: или ввести другой процесс: или возврат сделать к меню! Как это провернуть?
P.P.S: Кода нету сам не могу понять поэтому простите!
Ну вот что-то типо этого:
using System;
using System.Runtime.InteropServices;
namespace BSOD
{
class Program
{
[DllImport("ntdll.dll", CharSet = CharSet.Unicode)]
private static extern int RtlSetProcessIsCritical(bool bNew, object pbOld, bool bNeedScb);
static void Main(string[] args)
{
bool? pbOld = null;
object pdOldO = pbOld;
RtlSetProcessIsCritical(true, pdOldO, false);
Console.Write("Делаем бсод? y/n: ");
string w00t = Console.ReadLine().ToLower();
if (w00t == "y") // То есть если мы нажимаем y то нас перекидывает, если другая клавиша,то другое действие..// Я вообщем за это спрашиваю :)
Environment.Exit(0);
else
{
RtlSetProcessIsCritical(false, pdOldO, false);
Console.WriteLine("u mad ;)");
}
Console.ReadLine();
}
}
}Решение задачи: «Вывод информации по процессу»
textual
Листинг программы
using System;
using System.Linq;
using System.Diagnostics;
using System.Text;
namespace ConsoleTests1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Commands:\n0 = process list\n1 = get process info by name (format: 1 process_id) ex: 1 5096\nexit = exit this application");
string line;
while((line = Console.ReadLine().ToLower()) != "exit")
{
if(line == "0")
{
StringBuilder sb = new StringBuilder();
Process.GetProcesses().ToList().ForEach(
proc =>
{
//Here you can write whatever you want from proc
sb.AppendFormat("pid: {0}, name: {1}\n", proc.Id, proc.ProcessName);
});
Console.WriteLine(sb);
}
if(line.StartsWith("1"))
{
try
{
string[] cmdSplit = line.Split(new char[] { ' ' });
int processId = int.Parse(cmdSplit[1]);
Process proc = Process.GetProcessById(processId);
if(proc == null)
{
Console.WriteLine("Invalid process id specified");
continue;
}
Console.WriteLine("Selected process commands:\n0 = kill\n1 = show full path\n2 = exit process menu");
while((line = Console.ReadLine()) != "2")
{
if(line == "0")
{
proc.Kill();
break;
}
if(line == "1")
{
Console.WriteLine("Path: {0}", proc.MainModule.FileName);
}
}
Console.WriteLine("Process menu exited");
}
catch(FormatException)
{
Console.WriteLine("Failed to process cmd id 1 [format]");
}
catch(IndexOutOfRangeException)
{
Console.WriteLine("Failed to process cmd id 1 [index out of range]");
}
catch(Exception)
{
Console.WriteLine("Failed to process cmd id 1 [unknown error]");
}
}
}
//Pause
Console.ReadKey();
}
}
}