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

> Внимание!

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

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


Пионер
**

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

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


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


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


Гость






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

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

Сообщение отредактировано: volvo - 20.03.2008 14:20
 К началу страницы 
+ Ответить 
klem4
сообщение 20.03.2008 14:19
Сообщение #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 
 К началу страницы 
+ Ответить 
Unknown
сообщение 20.03.2008 15:43
Сообщение #4


Пионер
**

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

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


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


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


Пионер
**

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

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


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


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 20.03.2008 19:01
Сообщение #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 - 20.03.2008 19:04


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


Пионер
**

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

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


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


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


code warrior
****

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

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


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


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


Пионер
**

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

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


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


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


Пионер
**

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

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


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


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 24.03.2008 0:18
Сообщение #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 - 24.03.2008 0:20


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


Пионер
**

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

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


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


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


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

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

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


Код
foreach (Process p in Process.GetProcesses())


Так конечно короче, но чисто теоретически не рискуем ли мы тут получить бесконечный цикл ? Или вызов метода GetProcesses() произойдет только один раз ?

Я к тому что допустим за время каждой итерации в системе появляется еще один процесс, и если GetProcess() получает список процессов каждый раз заново, то цикл может и не завершиться.

Сообщение отредактировано: klem4 - 24.03.2008 7:59


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 24.03.2008 12:27
Сообщение #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 
 К началу страницы 
+ Ответить 
Unknown
сообщение 7.04.2008 22:46
Сообщение #15


Пионер
**

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

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


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


--------------------
go ask Alice
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 8.04.2008 7:30
Сообщение #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 
 К началу страницы 
+ Ответить 
hardcase
сообщение 8.04.2008 15:00
Сообщение #17


code warrior
****

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

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


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


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

 



- Текстовая версия 22.07.2025 15:38
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"