我第一次创建了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();
}
}
}
答案 0 :(得分:0)
我以前必须调试很多Windows服务并且已经完成了相同的日志文件底池方法。确实令人痛苦和沮丧。
最终我在某个地方找到了一个提示,这是为了调试目的,你可以放弃这一行:
System.Diagnostics.Debugger.Launch()
在您的OnStart方法的开头。它将弹出一个对话框并询问您要附加的调试器。由于您已经在Visual Studio中加载了解决方案,因此只需选择它即可达到您的断点。
它也可能很乏味,但效率更高。您最终处于生产力循环中,必须停止服务,卸载,修补代码,构建,重新安装,启动,调试......