【发布时间】:2012-10-04 19:12:54
【问题描述】:
我在 c#.net 中创建了一个带有计时器的 Windows 服务。当我在 Visual Studio 中调试/构建项目时它工作正常,但安装后它不执行操作。
这背后的原因可能是什么?
代码:
public partial class Service1 : ServiceBase
{
FileStream fs;
StreamWriter m_streamWriter;
Timer tm = new Timer();
public Service1()
{
InitializeComponent();
this.ServiceName = "timerservice";
tm.Interval = 2000;
tm.Tick += new EventHandler(PerformOperations);
tm.Start();
fs = new FileStream(@"c:\mcWindowsService.txt", FileMode.OpenOrCreate, FileAccess.Write);
m_streamWriter = new StreamWriter(fs);
m_streamWriter.BaseStream.Seek(0, SeekOrigin.End);
}
private void PerformOperations(object sener, EventArgs e)
{
//StreamWriter swr = new StreamWriter("c:\\test_from_database.txt",true);
try
{
OdbcConnection con = new OdbcConnection("DSN=liquor_data");
OdbcDataAdapter adp = new OdbcDataAdapter("", con);
DataSet ds = new DataSet();
string sql = "select * from item_group";
adp.SelectCommand.CommandText = sql;
adp.Fill(ds, "item_group");
foreach (DataRow dr in ds.Tables["item_group"].Rows)
{
// swr.Write(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");
//Console.WriteLine(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");
m_streamWriter.WriteLine(dr["group_name"].ToString() + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n");
}
m_streamWriter.Flush();
}
catch (Exception ex)
{
// swr.Write("Error :"+ ex.Message + "\t\t" + DateTime.Now.TimeOfDay.ToString() + "\n"); }
}
}
}
【问题讨论】:
-
账号安装后是否有权限运行windows服务?
-
尝试取消注释 catch 以查看是否抛出了一些错误。还要检查 Windows 事件日志是否有任何错误。
-
很难相信这适用于您的开发机器。您正在使用的 Timer 类需要一个消息循环。请改用 System.Threading.Timer。
-
如果你想确保事件不会被非后台线程欺负,或者悄悄地丢失(计时器在历史上一直存在在 win svc 中永远丢失事件的问题),你不能完全使用计时器。
标签: c# .net windows timer windows-services