首页 新闻 搜索 专区 学院

windows服务问题(超高手进)

0
悬赏园豆:5 [已解决问题] 解决于 2012-10-11 21:26

private bool isrun;

protected override void OnStart(string[] args)
     {

          isrun =true;
          while (isrun)
            {
                try
                {
                        StreamWriter sw = File.AppendText(@"d:\myserver.txt");
                        sw.WriteLine(string.Format("服务启动,启动时间{0}", DateTime.Now));
                    }
                }
                catch (Exception ex)
                {
                    WirteWinLog(ex);
                }

                System.Threading.Thread.Sleep(10*1000);
            }

        }

        protected override void OnStop()
        {

            isrun=false;
            StreamWriter sw = File.AppendText(@"d:\myserver.txt");
            sw.WriteLine(string.Format("服务停止,启动时间{0}", DateTime.Now));
            sw.Close();
        }

为什么服务发布后无法停止呢????

彬彬@科比的主页 彬彬@科比 | 初学一级 | 园豆:43
提问于:2012-09-30 23:34
< >
分享
最佳答案
0

因为 你的service 永远不会从 onstart method里退出.  一直在while loop里 运行,  onstop 没有机会执行。

你可以用一个 backgroundWorker,  onstart 里 初始化worker,   工作在 worker 里做,  onstop把worker停止。

收获园豆:5
gunsmoke | 老鸟四级 |园豆:3592 | 2012-10-03 06:29

isrun=false;我不是在stop中执行了这个吗?怎么不能停止呢。。可否说的详细点。。难道OnStart中要怎样才行?????

彬彬@科比 | 园豆:43 (初学一级) | 2012-10-05 14:03
其他回答(2)
0

把你的isrun设置为静态的试试。

秦楼东 | 园豆:913 (小虾三级) | 2012-10-01 00:42

为什么要静态?不是全局变量吗

支持(0) 反对(0) 彬彬@科比 | 园豆:43 (初学一级) | 2012-10-01 09:59

@彬彬@科比: 

但是那个类的实例不一定就是全局的,启动时实例化那个类,停止时再次实例化,那么内部的变量就是2个不同实例的变量了啊。

支持(0) 反对(0) 秦楼东 | 园豆:913 (小虾三级) | 2012-10-01 14:01
0

你是如何判断 无法停止的?在本地先测试,然后安装后在服务列表里停止 ,再查找原因

dreamhappy | 园豆:4 (初学一级) | 2012-10-02 13:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册