Windows服务仅部分工作

时间:2015-06-24 18:43:30

标签: c# .net service

我第一次创建了Windows服务。它不起作用。创建了OnStart.txt和OnStop.txt文件,但没有其他任何事情发生。我不相信MSProcess的运行。我该如何进行故障排除?

namespace MailScan_Service
{
    public partial class svMaster : ServiceBase
    {
        private Timer myTimer = new Timer();
            public svMaster()
            {
                InitializeComponent();
            }
            ServiceController sc = new ServiceController("MailScan Service");
            protected override void OnStart(string[] args)           
            {
                 System.IO.File.Create(AppDomain.CurrentDomain.BaseDirectory + "OnStart.txt");
                 myTimer.Start();

            }
            protected override void OnStop()
            {
                if (myTimer.Enabled == true)
                    myTimer.Stop();
                System.IO.File.Create(AppDomain.CurrentDomain.BaseDirectory + "OnStop.txt");
            }

            private void myTimer_Elapsed(object sender, ElapsedEventArgs e)
            {

                if (!sc.Status.Equals(ServiceControllerStatus.StopPending))
                {
                    MSSettings msSet = new MSSettings();
                    msSet.Load();
                    myTimer.Interval = msSet.ScanTimer * 60000;
                    MSProcess.Start();
                    msSet.Dispose();
                }
            }     
}

然而这个模拟器工作正常!

namespace MailScanSettings
{
    public partial class FormSimService : Form
    {
        public FormSimService()
        {
            InitializeComponent();
        }

        private void btnGo_Click(object sender, EventArgs e)
        {
            tbStatus.Clear();
            tbStatus.Text += "Running";
            this.BackColor = Color.Green;
            timer1.Start();
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            if (timer1.Enabled == true)
                timer1.Stop();

            this.BackColor = Color.Red;
            tbStatus.Clear();
            tbStatus.Text += "Stopped";
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            MSSettings msSet = new MSSettings();
            msSet.Load();
            timer1.Interval = msSet.ScanTimer * 60000;            
            MSProcess.Start();
            msSet.Dispose();            
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我以前必须调试很多Windows服务并且已经完成了相同的日志文件底池方法。确实令人痛苦和沮丧。

最终我在某个地方找到了一个提示,这是为了调试目的,你可以放弃这一行:

System.Diagnostics.Debugger.Launch()
在您的OnStart方法的开头

。它将弹出一个对话框并询问您要附加的调试器。由于您已经在Visual Studio中加载了解决方案,因此只需选择它即可达到您的断点。

它也可能很乏味,但效率更高。您最终处于生产力循环中,必须停止服务,卸载,修补代码,构建,重新安装,启动,调试......