Если Вы хотите получить доступ к защищенным методам, Вы могли бы создать подкласс класса, который Вы хотите использовать, который представляет методы, которые Вы хотите использовать в качестве общественности (или внутренний к пространству имен, чтобы быть более безопасными) и иметь экземпляр того класса в Вашем классе (используйте его в качестве прокси).
, Насколько закрытые методы затронуты (я думаю), Вы являетесь неудачливыми.
В этом случае System.Management должен работать на вас. Вот пример для начала:
using System;
using System.Diagnostics;
using System.ServiceProcess;
using System.Management;
class Program
{
static void Main(string[] args)
{
foreach (ServiceController scTemp in ServiceController.GetServices())
{
if (scTemp.Status == ServiceControllerStatus.Stopped)
continue; // stopped, so no process ID!
ManagementObject service = new ManagementObject(@"Win32_service.Name='" + scTemp.ServiceName + "'");
object o = service.GetPropertyValue("ProcessId");
int processId = (int) ((UInt32) o);
Process process = Process.GetProcessById(processId);
Console.WriteLine("Service: {0}, Process ID: {1}", scTemp.ServiceName, processId);
}
}
}