Список процессов, Visual Studio 2008, C# |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Список процессов, Visual Studio 2008, C# |
Unknown |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
С помощью каких компонент можно вывести на экран список работающих процессов?
-------------------- go ask Alice
|
volvo |
Сообщение
#2
|
Гость |
Вывести на экран? Да хоть с помощью TextBox-а. Главное этот список получить, а уж отобразить-то не проблема.
P.S. для получения можешь использовать Process[] processes = Process.GetProcesses(Environment.MachineName); Сообщение отредактировано: volvo - |
klem4 |
Сообщение
#3
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Код using System.Diagnostics; // ... Process[] procs = Process.GetProcesses(); foreach (Process curr_proc in procs) Console.WriteLine(curr_proc.ProcessName); -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Unknown |
Сообщение
#4
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Спасибо большое! буду разбираться
-------------------- go ask Alice
|
Unknown |
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Вродь разобрался.
А кто-нибудь знает, как настроить Visual Studio, чтобы она компилировала приложения, запускающиеся на компах, на которых не стоит Visual Studio? -------------------- go ask Alice
|
hardcase |
Сообщение
#6
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Вродь разобрался. А кто-нибудь знает, как настроить Visual Studio, чтобы она компилировала приложения, запускающиеся на компах, на которых не стоит Visual Studio? Если на компе нету VS, то для ручной компиляции проекта тебе потребуется наличие на целевой машине утиллиты MSBuild.exe (поставляется вместе с SDK), с помощю которой можно собрать студийный проект. Ну и конечно никто не отменял ручную работу с csc.exe (комилятором C#). В любом случае на машине должен стоять .NET Framework хоть какой-нибудь версии (в идеале не ниже 2.0). Сообщение отредактировано: hardcase - -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Unknown |
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Нет, я не хочу компилировать проект на компе без VS - я хочу запускать на нем заранее откомпилированный проект.
-------------------- go ask Alice
|
hardcase |
Сообщение
#8
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Нет, я не хочу компилировать проект на компе без VS - я хочу запускать на нем заранее откомпилированный проект. На целевой машине должен быть .NET Framework минимум 2.0 версии.-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Unknown |
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Аха, спасибо!
-------------------- go ask Alice
|
Unknown |
Сообщение
#10
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Подскажите, пожалуста, как получить пути к исполняемым файлам/процессам!
-------------------- go ask Alice
|
hardcase |
Сообщение
#11
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Подскажите, пожалуста, как получить пути к исполняемым файлам/процессам! Например вот так:Код using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.ComponentModel; namespace ConsoleApplication11 { class Program { static void Main(string[] args) { foreach (Process p in Process.GetProcesses()) { Console.WriteLine("process '{0}':", p.ProcessName); try { string process_module_name = p.ProcessName.ToLower() + ".exe"; foreach (ProcessModule m in p.Modules) { if(m.ModuleName.ToLower() == process_module_name) { Console.WriteLine(" process file: {0}", m.FileName); break; } } } catch (Win32Exception) { Console.WriteLine("Can't get file name of process '{0}'", p.ProcessName); } } Console.ReadLine(); } } } Проходим по модулям процесса и ищем exe-модуль. Сообщение отредактировано: hardcase - -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Unknown |
Сообщение
#12
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
ясно! спасибо!
-------------------- go ask Alice
|
klem4 |
Сообщение
#13
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Код foreach (Process p in Process.GetProcesses()) Так конечно короче, но чисто теоретически не рискуем ли мы тут получить бесконечный цикл ? Или вызов метода GetProcesses() произойдет только один раз ? Я к тому что допустим за время каждой итерации в системе появляется еще один процесс, и если GetProcess() получает список процессов каждый раз заново, то цикл может и не завершиться. Сообщение отредактировано: klem4 - -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
hardcase |
Сообщение
#14
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
Код foreach (Process p in Process.GetProcesses()) Так конечно короче, но чисто теоретически не рискуем ли мы тут получить бесконечный цикл ? Или вызов метода GetProcesses() произойдет только один раз ? Вызов метода GetProcesses произойдет один раз. Для программы Код static void Main(string[] args) { Компилер сгенерирует следующий кодforeach (Process p in Process.GetProcesses()) { Console.WriteLine("process '{0}':", p.ProcessName); } Console.ReadLine(); } Код .method private hidebysig static void Main(string[] args) cil managed { .entrypoint // Code size 47 (0x2f) .maxstack 2 .locals init ([0] class [System]System.Diagnostics.Process p, [1] class [System]System.Diagnostics.Process[] CS$6$0000, [2] int32 CS$7$0001) IL_0000: call class [System]System.Diagnostics.Process[] [System]System.Diagnostics.Process::GetProcesses() IL_0005: stloc.1 IL_0006: ldc.i4.0 IL_0007: stloc.2 IL_0008: br.s IL_0022 IL_000a: ldloc.1 IL_000b: ldloc.2 IL_000c: ldelem.ref IL_000d: stloc.0 IL_000e: ldstr "process '{0}':" IL_0013: ldloc.0 IL_0014: callvirt instance string [System]System.Diagnostics.Process::get_ProcessName() IL_0019: call void [mscorlib]System.Console::WriteLine(string, object) IL_001e: ldloc.2 IL_001f: ldc.i4.1 IL_0020: add IL_0021: stloc.2 IL_0022: ldloc.2 IL_0023: ldloc.1 IL_0024: ldlen IL_0025: conv.i4 IL_0026: blt.s IL_000a IL_0028: call string [mscorlib]System.Console::ReadLine() IL_002d: pop IL_002e: ret } // end of method Program::Main Как показывает дизассемблер, получение массива происходит один раз - самой первой инструкцией. -------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Unknown |
Сообщение
#15
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
И еще один вопрос не по теме: можно ли программы, написанные в VS2008, исправлять и перекомпилировывать )) в VS2005?
-------------------- go ask Alice
|
klem4 |
Сообщение
#16
|
Perl. Just code it! Группа: Пользователи Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Помню была такая проблема в переносом проекта с vs2005->2003 вроде, решалась она созданием нового проекта на 2003 и заменой из него некоторых файлов относящихся к файлам формы из проекта 2005, точно не помню к сожалению, 2 года назад дело было, думаю гугл или яндекс помогут
-------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
hardcase |
Сообщение
#17
|
code warrior Группа: Пользователи Сообщений: 484 Пол: Мужской Реальное имя: Славен Репутация: 8 |
И еще один вопрос не по теме: можно ли программы, написанные в VS2008, исправлять и перекомпилировывать )) в VS2005? Можно. Но с тем условием, что проекты нацелены на Fw 2.0, а не на 3.0 или 3.5.-------------------- ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
|
Unknown |
Сообщение
#18
|
Пионер Группа: Пользователи Сообщений: 104 Пол: Мужской Реальное имя: Евгений Репутация: 0 |
Необходимо получить число потоков у каждого процесса. Делаю так:
Код Process[] procs = Process.GetProcesses(); foreach (Process curr_proc in procs) { ProcessThreadCollection threads; threads = curr_proc.Threads; n = 0; foreach (ProcessThread proc_thrd in threads) n++; dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[3].Value = n; } Это верное решение? Или как можно получить размер массива? Добавлено через 10 мин. И еще: необходимо получить для каждого процесса кол-во памяти, которое он занимает. Делаю так: Код Process[] procs = Process.GetProcesses(); foreach (Process curr_proc in procs) { n = curr_proc.PrivateMemorySize64 / 1024; dataGridView1.Rows[dataGridView1.RowCount - 2].Cells[2].Value = n.ToString()+" Kb"; } Но значения, которые в рез-те получаются, отличны от тех, что в стандартном Диспетчере Задач... Почему? -------------------- go ask Alice
|
Текстовая версия | 6.05.2024 9:21 |