я создаю приложение диспетчера задач (сервер-клиент) .. поэтому я получаю список процессоров с сервера в виде строки.
моя проблема в том, что 60-65% процессоров не удалось получить на стороне сервера, как вы видите на снимке диспетчера задач. Обратите внимание, что приложение сервера отлажено как администратор
Код сервера:
public void GetProcessors()
{
int i =0,j = 0;
string answer = "";
foreach (Process p in Process.GetProcesses())
{
try
{
answer += p.MainModule.ModuleName
+ "|" + p.Id.ToString()
+ "|" + string.Format("{0:N0} K", p.WorkingSet64 / 1024)
+ "|" + p.MainModule.FileVersionInfo.FileDescription;
i++;
answer += "?";
}
catch
{
j++;
}
}
answer = answer.Remove(answer.Length - 1, 1);
send(string.Format("get<{0}<{1}<{2}", answer, i, j));
}
Клиентская сторона:
это вызвало метод getProcessors из класса менеджера задач
switch(command[1])
{
case "get":
Console.WriteLine(command[2]);
if (InvokeRequired)
{
Action a = () => taskManager1.GetProcessors(command[2], command[3], command[4]);
Invoke(a);
}
break;
default:
break;
}
(на стороне клиента) КЛАСС УПРАВЛЕНИЯ ЗАДАЧАМИ:
public void GetProcessors(string cmd,string success,string fail)
{
string[] Processors = cmd.Split('?');
foreach (string process in Processors)
{
string[] info = process.Split('|');
if (info.Length < 4)
{
MessageBox.Show(info.Length.ToString());
continue;
}
ListViewItem item = new ListViewItem(info[0]);
item.SubItems.Add(info[1]);
item.SubItems.Add(info[2]);
item.SubItems.Add(info[3]);
listView1.Items.Add(item);
}
labelProcess.Text = string.Format("Processors: {0}", success);
failedLabel.Text = string.Format("Failed: {0}", fail);
}
я получил эти исключения
85 СБОЙ: 83 являются {"32-битные процессы не могут получить доступ к модулям 64-битных процессов."}
остальные 2 СБОИ: {"Невозможно перечислить модули процесса."}
после того, как я отредактировал код и попытался запустить его без использования Process.MainModule .. он дает мне:
process: 147 .. FAIL: 0 .. так почему я не могу получить доступ к process.MainModule?
Как мне это исправить ??