Приостановить процесс в C#

Спасибо Магнусу

После включения dot-net флагов я немного изменил csharp код, чтобы он стал методом visual-c# расширения в моем проекте. Теперь dot-net я могу использовать

var process = Process.GetProcessById(param.PId);
process.Suspend();

Вот код .cs-file для тех, кому может быть csharp интересно.

public static class ProcessExtension
{
    [DllImport("kernel32.dll")]
    static extern IntPtr OpenThread(ThreadAccess dwDesiredAccess, bool bInheritHandle, uint dwThreadId);
    [DllImport("kernel32.dll")]
    static extern uint SuspendThread(IntPtr hThread);
    [DllImport("kernel32.dll")]
    static extern int ResumeThread(IntPtr hThread);

    public static void Suspend(this Process process)
    {
        foreach (ProcessThread thread in process.Threads)
        {
            var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id);
            if (pOpenThread == IntPtr.Zero)
            {
                break;
            }
            SuspendThread(pOpenThread);
        }
    }
    public static void Resume(this Process process)
    {
        foreach (ProcessThread thread in process.Threads)
        {
            var pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)thread.Id);
            if (pOpenThread == IntPtr.Zero)
            {
                break;
            }
            ResumeThread(pOpenThread);
        }
    }
}

У меня есть готовая csharp утилита, которую я обычно dot-net использую для приостановки c#.net / уничтожения / вывода процесса .net в список. Полный исходный c# код: on Git

c#

.net

2022-10-16T00:43:54+00:00