IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Список процессов, Visual Studio 2008, C#
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


С помощью каких компонент можно вывести на экран список работающих процессов?


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Вывести на экран? Да хоть с помощью TextBox-а. Главное этот список получить, а уж отобразить-то не проблема.

P.S. для получения можешь использовать
Process[] processes = Process.GetProcesses(Environment.MachineName);
, а потом пробежаться по всему массиву processes и вытащить оттуда все, что тебе надо...

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Спасибо большое! буду разбираться


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Вродь разобрался.
А кто-нибудь знает, как настроить Visual Studio, чтобы она компилировала приложения, запускающиеся на компах, на которых не стоит Visual Studio?


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Unknown @ 20.03.2008 18:05) *
Вродь разобрался.
А кто-нибудь знает, как настроить Visual Studio, чтобы она компилировала приложения, запускающиеся на компах, на которых не стоит Visual Studio?

Если на компе нету VS, то для ручной компиляции проекта тебе потребуется наличие на целевой машине утиллиты MSBuild.exe (поставляется вместе с SDK), с помощю которой можно собрать студийный проект.
Ну и конечно никто не отменял ручную работу с csc.exe (комилятором C#).

В любом случае на машине должен стоять .NET Framework хоть какой-нибудь версии (в идеале не ниже 2.0).

Сообщение отредактировано: hardcase -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Нет, я не хочу компилировать проект на компе без VS - я хочу запускать на нем заранее откомпилированный проект.


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Unknown @ 21.03.2008 20:42) *
Нет, я не хочу компилировать проект на компе без VS - я хочу запускать на нем заранее откомпилированный проект.
На целевой машине должен быть .NET Framework минимум 2.0 версии.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Аха, спасибо!


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Подскажите, пожалуста, как получить пути к исполняемым файлам/процессам!


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Unknown @ 23.03.2008 21:42) *
Подскажите, пожалуста, как получить пути к исполняемым файлам/процессам!
Например вот так:
Код

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 -


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


ясно! спасибо!


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(klem4 @ 24.03.2008 7:56) *
Код
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

Как показывает дизассемблер, получение массива происходит один раз - самой первой инструкцией.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 104
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


И еще один вопрос не по теме: можно ли программы, написанные в VS2008, исправлять и перекомпилировывать )) в VS2005?


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Помню была такая проблема в переносом проекта с vs2005->2003 вроде, решалась она созданием нового проекта на 2003 и заменой из него некоторых файлов относящихся к файлам формы из проекта 2005, точно не помню к сожалению, 2 года назад дело было, думаю гугл или яндекс помогут smile.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Unknown @ 7.04.2008 23:46) *
И еще один вопрос не по теме: можно ли программы, написанные в VS2008, исправлять и перекомпилировывать )) в VS2005?
Можно. Но с тем условием, что проекты нацелены на Fw 2.0, а не на 3.0 или 3.5.


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 21:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name