Я довольно широко изучал эту проблему и не могу найти ответа.
Я знаю, что исключение Only part of a ReadProcessMemory or WriteProcessMemory request was completed
возникает, когда 32-разрядный процесс пытается получить доступ к 64-битовому процессу и тот же для 64-битного изменения 32-разрядного процесса.
Решение этой проблемы заключается в изменении целевой платформы на "Любой процессор". Я пробовал это и, к сожалению, это не решает мою проблему.
Следующий блок кода - это то, что продолжает бросать исключение. Программа, которая запускает этот код, используется для открытия приложений на удаленных компьютерах и ведет список всех процессов, которые сама программа открыла, чтобы мне не пришлось перебирать все процессы.
Process processToRemove = null;
lock (_runningProcesses)
{
foreach (Process p in _runningProcesses)
{
foreach (ProcessModule module in p.Modules)
{
string[] strs = text.Split('\\');
if (module.ModuleName.Equals(strs[strs.Length - 1]))
{
processToRemove = p;
break;
}
}
if (processToRemove != null)
{
break;
}
}
if (processToRemove != null)
{
processToRemove.Kill();
_runningProcesses.Remove(processToRemove);
}
}
Эти процессы могут и, скорее всего, будут 32-битными и 64-битными, смешанными вместе.
Есть ли что-нибудь, что я делаю, чего я не должен делать, или есть лучший способ сделать все это?