Как приостановить процесс и начать заново? - PullRequest
0 голосов
/ 02 мая 2019

Я хочу запустить процесс, но остановить его в определенной точке, а затем, если все критерии выполнены, перезапустить этот процесс.

Я вижу, как на этот вопрос дан ответ, как приостановить / возобновитьпоток , но я не могу использовать его в моей ситуации.

Как мне сделать это в wpf и использовать шаблон MVVM?

Любая точка в правильном направленииценится.

1 Ответ

0 голосов
/ 02 мая 2019

Если вы хотите приостановить процесс, а не поток, вы должны использовать методы extern

Чтобы получить процесс по имени, вы можете использовать System.Diagnostic.Process Assembly

Process[] localByName = Process.GetProcessesByName("process");

Завершение процесса:

CurrentProcess.Kill();

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

    [Flags]
    public enum ThreadAccess : int
    {
      TERMINATE = (0x0001),
      SUSPEND_RESUME = (0x0002),
      GET_CONTEXT = (0x0008),
      SET_CONTEXT = (0x0010),
      SET_INFORMATION = (0x0020),
      QUERY_INFORMATION = (0x0040),
      SET_THREAD_TOKEN = (0x0080),
      IMPERSONATE = (0x0100),
      DIRECT_IMPERSONATION = (0x0200)
    }

    [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);
    [DllImport("kernel32", CharSet = CharSet.Auto,SetLastError = true)]
    static extern bool CloseHandle(IntPtr handle);


private static void SuspendProcess(int pid)
{
   var process = Process.GetProcessById(pid);

   if (process.ProcessName == string.Empty)
     return;

   foreach (ProcessThread pT in process.Threads)
   {
      IntPtr pOpenThread = OpenThread(ThreadAccess.SUSPEND_RESUME, false, (uint)pT.Id);

      if (pOpenThread == IntPtr.Zero)
        continue;

      SuspendThread(pOpenThread);
      CloseHandle(pOpenThread);
   }
}

PS: Хотите перезапустить процесс с данными последнего сеанса?


См .: Процесс приостановки в C #

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...