2 baimao1995 baimao1995 于 2015.05.30 07:08 提问

C# 如何实现当一个指定的进程(非本身)结束后, 同时也结束掉自己的进程(本身)!

举例. 现在我同时打开了 软件A, 软件B,
软件A 是已经做好的软件或是游戏~ 不是我自己编写的.
软件B 是我自己现在要做的软件~

如何实现 在两个软件同时打开的情况下,

关闭掉软件A, 那么软件B也会自动关闭.
关闭掉软件B, 强制结束掉软件A的进程!

4个回答

gamefinity
gamefinity   Rxr 2015.05.30 09:24

所谓的B自动关闭,其实就是B执行结束。因此来说,在B中只要判断A是否存活。A若存活,则继续执行。A若不存活,则结束程序,即可。
建议由B来打开A,这样B可以wait A的进程。当进程结束时,B自己退出即可。

举例

using System;
using System.Diagnostics;
using System.Threading;

namespace Q185904
{
    public class Worker
    {
        private Process m_p;

        public Worker(Process p)
        {
            this.m_p = p;
        }

        // This method will be called when the thread is started.
        public void DoWork()
        {
            while (!_shouldStop)
            {
                Console.WriteLine("worker thread: working...");
                if (Console.KeyAvailable)
                    break;
            }
            Console.WriteLine("worker thread: terminating gracefully.");
            if (!this.m_p.HasExited)
                this.m_p.Kill();
        }

        public void RequestStop()
        {
            _shouldStop = true;
        }

        // Volatile is used as hint to the compiler that this data
        // member will be accessed by multiple threads.
        private volatile bool _shouldStop;
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            var p = Process.Start("C:\\Windows\\notepad.exe");
            p.WaitForInputIdle();
            var w = new Worker(p);
            var t = new Thread(w.DoWork);
            t.Start();
            if (!p.HasExited)
                p.WaitForExit();
            w.RequestStop();
        }
    }
}
lzp_lrp
lzp_lrp   Ds   Rxr 2015.05.30 10:34

举例. 现在我同时打开了 软件A, 软件B,
软件A 是已经做好的软件或是游戏~ 不是我自己编写的.
软件B 是我自己现在要做的软件~
如何实现 在两个软件同时打开的情况下,

关闭掉软件A, 那么软件B也会自动关闭.
关闭掉软件B, 强制结束掉软件A的进程!

如果写程序B的话,可以定时用Findwindow打到A程序,或者用列举windows所有进程(http://www.cnblogs.com/xiaojinma/archive/2012/12/06/2805583.html)
来判断A程序是否还存在,如果不存在,就退出当前程序。

如果B程序退出,可以用TerminateProcess来终止A进程

guwei4037
guwei4037   Ds   Rxr 2015.05.30 10:54

关闭掉软件B, 强制结束掉软件A的进程! 这个容易实现,直接根据A的名称Process.Kill掉进程即可。
关闭掉软件A, 那么软件B也会自动关闭. 这个比较困难,除非你能够修改A的源码或者运用其它特殊技术(自己思考)模拟实现。

devmiao
devmiao   Ds   Rxr 2015.05.30 13:30

最简单的是再写一个demon进程,它负责轮询判断ab是否存在,发现一个不存在就关闭另一个。
这个demon可以写成服务。

Csdn user default icon
上传中...
上传图片
插入图片