C#windows服务运行一段时间后失效

左手の倒影 2015-02-11 09:59:13
用C#写的Windows服务,用来监测打印机状态,通过串口向另一台PC发送数据;每天计算机启动时,可以监测到打印机状态,串口向另一台PC发送数据可以接收到,运行大概一小时后,监测不到打印机状态,服务的状态还是已启动;这时如果重新启动服务,功能就会恢复正常,一段时间后功能就失效了,事件查看器中没有错误提示,安装服务的PC系统是Windows2003,安装了金山毒霸。一下为服务代码:
protected override void OnStart(string[] args)
{
InitSetUp();
}

protected override void OnStop()
{

}

void InitSetUp()
{
path = @"win32_printer.DeviceId='" + ConfigurationManager.AppSettings["Path"].ToString() + "'";

sp.PortName = ConfigurationManager.AppSettings["Port"];
sp.Open();

thPrinter = new Thread(new ThreadStart(GetPrinterStart));
thPrinter.IsBackground = true;
thPrinter.Start();
}

void GetPrinterStart()
{
try
{
while (true)
{
PrinterStatus ret = 0;
ManagementObject printer = new ManagementObject(path);
printer.Get();
ret = (PrinterStatus)Convert.ToInt32(printer.Properties["PrinterStatus"].Value);

switch (ret)
{
case PrinterStatus.正在打印:
bPrinting = true;
break;
case PrinterStatus.打印中:
bPrinting = true;
break;
case PrinterStatus.空闲:
if (bPrinting)
{
WriteToSerialPort();
bPrinting = false;
}
break;
default:
break;
}
}
}
catch (Exception e)
{
WriteLogFile(e.ToString(), "error.txt");
}
}

void WriteToSerialPort()
{
if (!sp.IsOpen)
{
sp.Open();
}

byte[] byteBuffer = { 0XBB, 0xC3, 0XEE };
sp.Write(byteBuffer, 0, byteBuffer.Length);

}

enum PrinterStatus
{
其他状态 = 1,
未知,
空闲,
正在打印,
预热,
停止打印,
打印中,
离线
}
...全文
313 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-02-11
  • 打赏
  • 举报
回复
还有建议你单独测试WriteLogFile(e.ToString(), "error.txt");到底能不能写入文件 很有可能实际上产生了异常,但是服务用户没有写入文件的权限,所以看文件里啥都没有 你可以在服务启动的时候先执行 WriteLogFile("启动了", "error.txt");来进行测试
左手の倒影 2015-02-11
  • 打赏
  • 举报
回复
我把catch写到while里试试
左手の倒影 2015-02-11
  • 打赏
  • 举报
回复
在catch中没有捕获到异常
於黾 2015-02-11
  • 打赏
  • 举报
回复
而且你这种把while写在try里面的写法 一旦进入catch,必然整个循环都跳出,不会继续运行了
於黾 2015-02-11
  • 打赏
  • 举报
回复
查看日志啊,看不好用了的时候到底发生了什么 如果你连到底是服务检测不到打印机状态了 还是串口发送出了问题 都没搞明白, 别人也只能是靠瞎猜
左手の倒影 2015-02-11
  • 打赏
  • 举报
回复
如你说讲,错误未被记录

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧