c:\starLog.txt   放到c盘了,换成其它盘试试,要给足够权限。

解决方案 »

  1.   


    不好意思,忘记说明了,没调用  scan()方法时,是可以正常启动并运行的。
      

  2.   

    当您停止或暂停托管 Microsoft Windows 服务时,如果该服务停止或暂停过程所花的时间比已配置的时间长,您会收到错误信息
    原因
    ServiceBase 类直接从 Advapi32.dll 文件的 ScDispatcherLoop 中定义的 Service 命令处理程序调用 OnStop 方法。30 秒之后,如果 ScDispatcherLoop 线程未准备好从服务控制管理器接收新的服务命令,则 Windows 服务控制器会将此服务标记为“超时”。因此,就会收到此错误信息。
    解决方案
    要解决此问题,请获取最新的 Microsoft .NET Framework 1.1 Service Pack
      

  3.   

    哥哥,我是启动服务就出错了,不是停止的时候。
    另外,我没写SCAN()方法时,服务时没问题的,可以启动并正常运行。
    请看看是不是SCAN()方法是不是有什么问题啊?
    拜托拜托。
      

  4.   

    启动时间太长了,服务启动时间要小于30秒SCAN() 方法是死循环的!建议用线程去跑!
      

  5.   


    我把循环去掉后,可以启动了。
    不过我想每天某个时间运行一次,线程该怎么弄啊?
        public partial class MyselfService : ServiceBase
        {
            //判断线程是否停止
            bool isStoped = false;        //死循环标识
            bool flag = true;        public MyselfService()
            {
                InitializeComponent();
            }        protected override void OnStart(string[] args)
            {
                using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\starLog.txt", true))
                {
                    sw.WriteLine("startTime is " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                    sw.Flush();
                    flag = true;
                    isStoped = false;                //启动线程
                    Thread thread = new Thread(new ThreadStart(Scan));
                    thread.IsBackground = true;
                    thread.Start();
                }
            }        protected override void OnStop()
            {
                //更改死循环标识
                flag = false;            //等待线程停止
                while (!isStoped) {
                    Thread.Sleep(100);
                }            //结束
                using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"c:\endLog.txt", true))
                {
                    sw.WriteLine("endTime is " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                }
            }        private void Scan()
            {
                while (flag)
                {
                    if (DateTime.Now.ToShortTimeString() == "16:05")
                    {
                        new Class1().Test();
                    }
                }            //线程停止
                isStoped = true;
            }
        }改了一段 你试试!
      

  6.   


    我把循环去掉后,可以启动了。
    不过我想每天某个时间运行一次,线程该怎么弄啊?
    把你要的干的东西,写成一个普通的控制台程序然后window有个计划任务, 指定时间运行上面的控制台程序就可以了
    http://www.cnblogs.com/menglin2010/archive/2012/03/05/2380419.html
      

  7.   

    用timer就行了
    不要死循环
    即使开了线程,也要再开个timer
    什么都不做的话,系统会认为你这个服务什么都不需要执行,然后就会停止掉了