公司要做一个windows监听文件夹的服务,时间紧急,马上研究,摘了很多坑,最后终于搞定了,步骤如下:
新建windows服务项目
点击切换到代码,写入代码:
protected override void OnStart(string[] args) { System.Timers.Timer timer = new System.Timers.Timer(); timer.Elapsed += new System.Timers.ElapsedEventHandler(TimedEvent); timer.Interval = 3000;//每3秒执行一次 timer.Enabled = true; this.WriteLog("搜才Organiz客户端数据同步服务:【服务启动】"); //Console.WriteLine("开始!"); //Console.ReadKey(); } protected override void OnStop() { this.WriteLog("搜才Organiz客户端数据同步服务:【服务停止】"); //Console.WriteLine("结束!"); //Console.ReadKey(); } private void TimedEvent(object sender, System.Timers.ElapsedEventArgs e) { Console.WriteLine(DateTime.Now.ToString()); using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"D:\temp1\test2.txt", true)) { file.WriteLine(DateTime.Now.ToString());// 直接追加文件末尾,换行 } } private void WriteLog(string msg) { string path = AppDomain.CurrentDomain.BaseDirectory + "\\log.txt"; FileInfo file = new FileInfo(path); if (!file.Exists) { FileStream fs = File.Create(path); fs.Close(); } using (FileStream fs = new FileStream(path, FileMode.Append, FileAccess.Write)) { using (StreamWriter sw = new StreamWriter(fs)) { sw.WriteLine(DateTime.Now.ToString() + "" + msg); } } }
注意用2015新建的项目默认用.net framework4.7.2,这里我们在项目-》属性-》应用程序 中修改为之前版本,否者App.config文件会报configration未命名错误,换回低版本即可
双击Service1.cs文件,进入设计页面,对着空白处右键-》添加安装器
修改服务属性
修改安装程序的属性
选择localsystem,这里解释一下,因为windows是多用户系统,选择localsystem是为了所有用户登录windows都可以启动服务,并且如果默认选择user,在后期安装时会填写用户和密码
然后将从C:\Windows\Microsoft.NET\Framework\v4.0.30319中拷贝installutil.exe文件到生成目录(bin/Debug目的使installutil.exe和dp0WindowsService1.exe在同一级目录)下。在该目录新建“安装.bat”文件,使用记事本打开,输入如下命令:
%~dp0InstallUtil.exe %~dp0WindowsService1.exe
pause
注意前每个命令前要加一个%~dp0,表示将目录更改为当前目录。倘若不加,可能会出错。pause 一定要换行,否则报错。
最后用管理员打开.bat文件,就完成服务注册了。
在我的电脑上右键选择“管理”,打开“服务和应用程序”下的“服务”,就能看到我们注册的服务了。