我用C#调用执行一个外部exe,安装成系统服务,已经成功了,这个服务也可以正常启动,可是停止服务时却出现问题: C#的进程停止了,但是这个外部的exe的进程却没有停止!!!在继续运行!!! 好奇怪~~是为什么啊??我在OnStop里面已经写了停止exe的程式,而且加了this.CanStop=true;可是没有运行~~?大家来帮帮我吧

解决方案 »

  1.   

    你在onstop如何写的,不会与你开启exe程序产生冲突
      

  2.   

    在onstop中枚举exe进程,然后kill
      

  3.   

    以下是OnStart和OnStop程式,大家批批:
    protected override void OnStart(string[] args)
    {
      Process[] TestService_processNames=Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName);
      System.Diagnostics.Process[] Test_processNames =       System.Diagnostics.Process.GetProcessesByName("test");  if (TestService_processNames.Length > 1 || Test_processNames.Length >0)
      {
        eventLog1.WriteEntry("Test is already running");
        return;
      } 
      else
      {
        System.Diagnostics.ProcessStartInfo  Info  =  new   System.Diagnostics.ProcessStartInfo();
        Info.FileName  =  "test.exe";
        Info.WorkingDirectory  =  "D:\\test.exe";    System.Diagnostics.Process  Proc  ;
        try
        {
          Proc=System.Diagnostics.Process.Start(Info);//启动外部程序
        }
        catch(System.ComponentModel.Win32Exception  e)
        {
          eventLog1.WriteEntry("系统找不到指定的程序文件。\r{0}"+ e.Message);
          return;
        }
      }
    }
    protected override void OnStop()
    {
      eventLog1.WriteEntry("Stop Service!");
      
      //Stop C# Service
      Process[] TestService_processNames=Process.GetProcessesByName  (System.Diagnostics.Process.GetCurrentProcess().ProcessName);
      foreach(System.Diagnostics.Process processChild in TestService_processNames)
      {
        if(!processChild.CloseMainWindow())
        {
          processChild.Kill();
        }
      }  //Stop test.exe
      System.Diagnostics.Process[] Test_processNames =   System.Diagnostics.Process.GetProcessesByName("test");
      foreach(System.Diagnostics.Process processChild in Test_processNames)
      {
        if(!processChild.CloseMainWindow())
        {
          processChild.Kill();
        }
      }
    }
      

  4.   

    启动服务后,看不到运行界面,只能通过进程来查看程式是否运行~~
    感觉OnStop没有执行
      

  5.   

    你在onstop中执行的顺序有问题,应该是先执行关闭“test.exe”,如下:
    System.Diagnostics.Process[] Test_processNames = System.Diagnostics.Process.GetProcessesByName("test");
    foreach(System.Diagnostics.Process processChild in Test_processNames)
    {
        processChild.Kill();
    }
      

  6.   

    而且我觉得不应该在OnStop中去关闭此service进程,这样操作不合理。
      

  7.   

    Knight94(愚翁):
      我改成你说的:先执行关闭“test.exe”也不行,还是没关掉也
      还有其它方法吗,请指教,非常感谢
      

  8.   

    那你看看如下这句
    System.Diagnostics.Process[] Test_processNames = System.Diagnostics.Process.GetProcessesByName("test");是否能找到相应的进程
      

  9.   

    to Ivony() :
    我就是在控制台调试的,不能kill掉,在应用程序日志里也没报错to Knight94(愚翁):
    我在另外一个win专案里断点调试,是可以找到test进程的但是我通过在日志里打印字符,\断点调试发现: 没找到test进程,
    因为foreach内部字符没打出来
      

  10.   

    已经可以kill掉了,
    Thank you,Knight94(愚翁)
    你的方法是可行的(先执行关闭“test.exe”),是我的笔下误,把test名写错了