在Windows服务中,怎样根据是否ping通服务器来决定执行A.exe还是B.exe?在正常情况下,运行着A.exe和MyService,其中MyService用来判断是否可以ping通服务器,这点是做好了的,现在想让
当Ping服务器失败时,A关闭,而开始执行B。  这样该怎么做?A  B  和 MyService 这三个应用程序都是在一个文件夹下的。       protected override void OnStart(string[] args)
        {            t.Elapsed += new ElapsedEventHandler(t_Elapsed);
        }        private void t_Elapsed(object sender, ElapsedEventArgs e)
        {
            if(!ping通)
            {
                执行B.EXE           // ?
            }
            if(恢复ping通)
            {  恢复执行A.exe        // ? }
        }

解决方案 »

  1.   

    使用Process类杀掉A的进程,使用Process类启动B
    如果没有理解错的话,你的MyService应该是个系统服务吧,你需要在服务管理器中将你的MyService设置为允许与桌面应用程序交互.
    void kill(string proc_name)
    {
        Process[] ps = Process.GetProcessesByName(proc_name);
        foreach(Process p in ps)
        {
            if(p.ProcessName.ToLower() == proc_name)
            {
                p.Kill();
                break;
            }
        }
    }
      

  2.   


    我的MyService 是用C#开发的 Windows 服务程序。 怎样设置“服务管理器中将你的MyService设置为允许与桌面应用程序交互”?
      

  3.   


    这样 在进程里面有B。exe 。 但是B并没有运行窗体,只是在进程里面可以看到,这是怎么回事?
      

  4.   

    设置与桌面交互,你可以在你的服务中添加Installer
    在Installer的AfterInstall实件中调用
    SetServiceDesktopInsteract("你的服务名称");
    来实现与桌面交互,或者在服务管理中设置,都可以.搞windows开发对系统不熟悉就算代码再厉害也是没用的,你需要去全面了解一下操作系统了.
      

  5.   

    可以实现的
    ping 的时候 发现
    ping 通了 执行A 
    可以 Process.Start(“A.EXE”) 来实现
    ping 不通了 执行B
    可以 Process.Start(“B.EXE”) 来实现
      

  6.   


    进行有A。exe。 但是A是一个窗体程序,本应该打开窗体,但是A窗体没有显现。而知识进程中有,这是怎么回事?