已经将CanShutdown 设成True,主要代码如下:        /// <summary> 
        /// 设计器支持所需的方法 - 不要
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            // 
            // Service1
            // 
            this.CanShutdown = true;
            this.ServiceName = "Service1";        }namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();            log("Service1");        }        protected override void OnStart(string[] args)
        {            log("OnStart");        }        protected override void OnStop()
        {
            log("OnStop");
        }        protected override void OnShutdown()
        {
            log("OnShutdown");            EventLog.WriteEntry("Service1 OnShutdown");
            base.OnShutdown();
        }        private void log(string msg)
        {
            StreamWriter log = new StreamWriter(@"ServiceLog.txt",true);
            log.WriteLine(msg + " " +DateTime.Now.ToLongTimeString());
            log.Flush();
            log.Close();        }
    }
}

解决方案 »

  1.   

    非正常停止才是shutdown,
    抛出一个未被catch的异常就shutdown了。
    在服务管理器里面停止不是shutdown
      

  2.   

    CanShutdown 服务是否在运行它的计算机关闭时收到通知,以便能够调用 OnShutDown 过程
    CanStop  服务是否接受停止运行的请求
    参考
      

  3.   

    老大们,我遇到的问题是,上面的代码虽然设置了CanShutdown 为TRUE,但系统关机时进不了OnShutdown()
    问题在哪里????windows 服务 还有其他方法获得关机事件吗?
      

  4.   

    MSDN中的原话:ServiceBase.OnShutdown 方法 在派生类中实现时,该方法于系统即将关闭时执行。指定在系统即将关闭前所发生的处理。 使用 OnShutdown 指定系统关闭时发生的处理。通常,OnShutdown 与 OnStop 中的处理类似。该事件只在操作系统关闭时发生,而不在计算机关闭时发生。当 CanShutdown 属性为 true 时,应重写 OnShutdown。
      

  5.   

    当 CanShutdown 属性为 true 时,应重写 OnShutdown。
      

  6.   

    同样的程序,在另一台计算机上能正确响应OnShutdown,那么这两台计算机差在哪里????????????????????和组策略有关吗(因为在不正常的机器上,修改了部分组策略)????