为什么Windows服务崩溃?

Geo*_*ge2 1 .net c# windows-services visual-studio-2008

我正在使用VSTS 2008 + C#+ .Net 3.5来开发Windows服务应用程序.下面的代码非常简单,我发现当File.Copy抛出异常(例如路径无效,没有权限等)时,服务将崩溃并弹出一个对话框让我调试.我的困惑是,我认为由Windows服务创建的线程的未处理异常永远不会使服务崩溃.为什么我的服务崩溃并弹出调试对话框?

   public partial class Service1 : ServiceBase
    {
        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            Thread t = new Thread (WriteF);
            t.Start();
        }

          static void WriteF() {
              File.Copy("dummy.txt", @"\\somelocation\dummy.txt");
          }

        protected override void OnStop()
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

blo*_*art 6

我认为由Windows服务创建的线程的未处理异常永远不会使服务崩溃

你的假设完全错了.Windows服务中未处理的异常将导致崩溃.出现调试对话框,因为系统上配置了调试器.从.NET 2.0开始,任何线程上的未处理异常都会关闭整个应用程序.仅仅因为你正在使用一个线程并不意味着线程中的异常会神奇地消失.

  • 是.这不是服务所特有的,对于任何应用程序都是一样的. (2认同)