带定时器的Windows服务

带定时器的Windows服务,第1张

概述带定时器的Windows服务

我用c#.net中的计时器创build了一个windows服务。 它工作正常,而我在Visual Studio中deBUGging/build立项目,但安装后不执行它的 *** 作。

这背后的原因是什么?

代码:

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() + "tt" + DateTime.Now.TimeOfDay.ToString() + "n"); //Console.Writeline(dr["group_name"].ToString() + "tt" + DateTime.Now.TimeOfDay.ToString() + "n"); m_streamWriter.Writeline(dr["group_name"].ToString() + "tt" + DateTime.Now.TimeOfDay.ToString() + "n"); } m_streamWriter.Flush(); } catch (Exception ex) { // swr.Write("Error :"+ ex.Message + "tt" + DateTime.Now.TimeOfDay.ToString() + "n"); } } } }

获取txt文件的标准应用程序(.NET)

如何查看是否对文件或文件夹select“包含可inheritance的权限”?

使用C#研究目录及其子目录中文本的高效search

在禁用wow64redirect之后,“找不到指定的程序”

与本地windows服务进行通信的“正确”方式

通过应用程序解锁一个Win7桌面

可靠地检测到我的另一个应用程序正在运行

为什么winform面板仅在鼠标hover或鼠标点击时更新?

如何更改windows Service环境path

在单线程上调用WaitHandle

用windows Service的第一种方法是不容易的..

很久以前,我写了一个C#服务。

这是服务类的逻辑(测试,工作正常):

namespace MyServiceApp { public class MyService : ServiceBase { private System.Timers.Timer timer; protected overrIDe voID OnStart(string[] args) { this.timer = new System.Timers.Timer(30000D); // 30000 milliseconds = 30 seconds this.timer.autoreset = true; this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer_Elapsed); this.timer.Start(); } protected overrIDe voID OnStop() { this.timer.Stop(); this.timer = null; } private voID timer_Elapsed(object sender,System.Timers.ElapsedEventArgs e) { MyServiceApp.ServiceWork.Main(); // my separate static method for do work } public MyService() { this.Servicename = "MyService"; } // service entry point static voID Main() { System.ServiceProcess.ServiceBase.Run(new MyService()); } } }

我建议你在一个单独的静态方法(为什么不,在一个控制台应用程序中…只是添加引用)编写真正的服务工作,以简化调试和清理服务代码。

确保间隔足够,并且仅在OnStart和OnStop覆盖中记录日志。

希望这可以帮助!

你需要把你的主要代码放在OnStart方法上。

我的这个答案可能会有所帮助。

您将需要放置一些代码来在Visual Studio中启用调试,同时保持您的应用程序作为windows服务有效。 这个其他SO线程涵盖了调试windows服务的问题。

编辑 :

请参阅MSDN上OnStart方法的可用文档,其中可以阅读:

不要使用构造函数来执行应该在OnStart中的处理 。 使用OnStart处理您的服务的所有初始化。 构造函数在应用程序的可执行文件运行时调用,而不是在服务运行时调用。 该可执行文件在OnStart之前运行。 例如,当继续时,构造函数不会再被调用,因为SCM已经将对象保存在内存中。 如果OnStop释放在构造函数中而不是在OnStart中分配的资源,则在第二次调用服务时将不会再次创建所需的资源。

下面是一个工作示例,其中服务的执行是在作为ServiceBase类中的委托实现的Timer的OnTimedEvent中启动的,Timer逻辑封装在名为SetupProcessingTimer()的方法中:

public partial class MyServiceProject: ServiceBase { private Timer _timer; public MyServiceProject() { InitializeComponent(); } private voID SetupProcessingTimer() { _timer = new Timer(); _timer.autoreset = true; double interval = Settings.Default.Interval; _timer.Interval = interval * 60000; _timer.Enabled = true; _timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); } private voID OnTimedEvent(object source,ElapsedEventArgs e) { // begin your service work MakeSomething(); } protected overrIDe voID OnStart(string[] args) { SetupProcessingTimer(); } ... }

间隔是在几分钟内在app.config中定义的:

<userSettings> <MyProject.PropertIEs.Settings> <setting name="Interval" serializeAs="String"> <value>1</value> </setting> </MyProject.PropertIEs.Settings> </userSettings>

总结

以上是内存溢出为你收集整理的带定时器的Windows服务全部内容,希望文章能够帮你解决带定时器的Windows服务所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1272676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存