C# 让一个进程以定时间隔运行另一个进程

C# 让一个进程以定时间隔运行另一个进程,c#,C#,跟我呆一会儿: 进程A是我的主要工作进程。当它运行时,它处理信息。它可能需要30秒到20分钟的时间来完成。在这一过程中有多种变化,而且并不完全稳定。如果它崩溃了,也没什么大不了的,因为它可以在下次运行时从停止的地方开始 流程B只是我的启动流程。我希望它以给定的间隔运行进程A(比如每5分钟一次)。如果进程A已经在运行,那么进程B应该等到下一个时间间隔再尝试。即 if(!ProcessA.isRunning) ProcessA.Run(); else Wait Until Next

跟我呆一会儿:

进程A是我的主要工作进程。当它运行时,它处理信息。它可能需要30秒到20分钟的时间来完成。在这一过程中有多种变化,而且并不完全稳定。如果它崩溃了,也没什么大不了的,因为它可以在下次运行时从停止的地方开始

流程B只是我的启动流程。我希望它以给定的间隔运行进程A(比如每5分钟一次)。如果进程A已经在运行,那么进程B应该等到下一个时间间隔再尝试。即

if(!ProcessA.isRunning)
    ProcessA.Run();
else
    Wait Until Next Interval to try
进程A或多或少是编写的。我认为它将是它自己的.exe,而不是使用多线程来实现这一点


我的问题是:如何编写运行单独的.exe的进程B,并将其挂钩,以便检查它是否正在运行

已经完成了所有这一切

因此使用GetProcessByName:

// Get all instances of Notepad running on the local
// computer.
Process [] localByName = Process.GetProcessesByName("notepad");
如果在localByName中获取任何内容,则进程仍在运行

看看这门课

使用这个类,您可以检索关于系统中进程的所有类型的信息。而且,如果您自己启动该进程,则不必扫描所有进程,因此可以防止缓慢且容易出错的调用

当您有一个流程对象时,可以使用
WaitForExit
等待它完成

您可以做的是:

    var startOtherProcess = true;
    while (startOtherProcess) {
       var watchedProcess = Process.Start("MyProgram.Exe");
       watchedProcess.WaitForExit();
       if (testIfProcessingFinished) {
           startOtherProcess = false;
       }

    }

以下是以下代码的工作原理: 它检查指定的进程是否运行,如果是,它将忽略,否则它将运行您需要的。对于间隔,使用
System.Timers.Timer

[DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    static extern bool SetForegroundWindow(IntPtr hWnd);

    public void RunProcess()
    {
        bool createdNew = true;
        using (Mutex mutex = new Mutex(true, "MyApplicationName", out createdNew))
        {
            if (createdNew)
            {
                // Here you should start another process
                // if it's an *.exe, use System.Diagnostics.Process.Start("myExePath.exe");
            }
            else
            {
                Process current = Process.GetCurrentProcess();
                foreach (Process process in Process.GetProcessesByName(current.ProcessName))
                {
                    if (process.Id != current.Id)
                    {
                        SetForegroundWindow(process.MainWindowHandle);
                        break;
                    }
                }
            }
        }
    }

只希望没有其他人有一个名为“记事本”的进程。