原贴地址: C#开发Windows服务(附源码DEMO) - 漫步猫 - 博客园
首先是创建一个项目:
创建完后是这个样子:
然后给自己的服务改一个自己想要的名字,我这里修改成MyWindowsWeiHuService,这个同时也是服务运行时候的名字,也就是鼠标右击“我的电脑”——管理——服务和应用程序——服务 里面显示的服务名。
然后开始写代码,服务运行时,执行什么代码,服务关闭时,执行什么代码:
加入你要做的事情,是创建一个txt,然后往txt里面写点东西,代码如下:
请看代码
写完代码之后,回到设计界面,操作如下:
在设计视图,点击右键,点击“添加安装程序”
点击完“添加安装程序”后
点击serviceInstaller1
可以写一下服务的描述
可以选择服务的启动类型
然后,点击serviceProcessInstaller1,设置一下Account 为LocalSystem
截止到目前,Windows服务的开发已经完成了。点击F5生成就行。
生成后,打开解决方案的 bin\Debug 文件夹,会看到生成后的文件:
服务是不能够直接双击安装的,需要在命令行里调用 installutil.exe,来安装才行,这个东西的完整路径是:%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe
运行的命令是: %SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe 这里接着你服务的完成路径。
在本案例中,完成安装命令是 :%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\软件开发测试\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe
当你将这个命令拷贝到CMD里面运行的时候,你会发现安装不成功,用C#开发出来的windows服务安装失败。
出现这个问题的运用,是因为你的CMD,没有使用管理员运行。只需要用管理员运行CMD,再在CMD里面打命令,就会安装成功了。
为了方便,我们可以将安装命令做成bat文件,然后右键管理员运行bat文件,就可以了
bat文件里面的内容如下:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe D:\软件开发测试\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe
pause
为什么要加上pause呢,因为不加的话,这个黑窗口会一闪而过,感觉好像中了病毒一样。
最后我们创建了一个“安装.bat”
我们右键,以管理员运行“安装.bat”
成功了,再敲一下回车,黑色窗口就会消失
我打开windows的服务管理器界面,看看
可以看到我们维护的名字与描述。
现在服务还没有启动,我们启动服务
启动后,我们可以看到C盘下面有我们刚才创建的文件
我们现在来结束服务吧
结束后,打开我们创建的文件看看
好的。现在我们来讲如何删除服务。
方法跟安装有点类似,也是创建一个bat文件,bat文件里面写以下内容
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u D:\软件开发测试\MyWindowsService\MyWindowsService\bin\Debug\MyWindowsService.exe
pause
保存为“卸载.bat”
同样右键,以管理员运行
卸载成功!
源码DEMO下载地址:C#开发Windows服务DEMO-C#代码类资源-CSDN下载
完整代码:
using RongZi.DBUtility;
using System;
using System.ComponentModel;
using System.Configuration;
using System.IO;
using System.ServiceProcess;
using System.Timers;
namespace MyWindowsService
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
//服务启动
protected override void OnStart(string[] args)
{
Log(LogType.info, "服务启动!");
Timer timer = new Timer();
timer.Interval = 60 * 1000; // 60 seconds 60秒执行一次
timer.Elapsed += new ElapsedEventHandler(this.OnTimer);
timer.Start();
}
//定时自动
public void OnTimer(object sender, ElapsedEventArgs args)
{
try
{
string sql = "select getdate()";
object obj = SqlHelper.ExecuteScalar(sql);//数据库操作
Log(LogType.info, "SQL查询结果:" + obj.ToString());
}
catch (Exception ex)
{
Log(LogType.error, ex.Message, ex.ToString() + ex.StackTrace);
}
}
//继续
protected override void OnContinue()
{
Log(LogType.info, "服务继续!");
}
//停止
protected override void OnStop()
{
Log(LogType.info, "服务停止!");
}
private static void Log(LogType logType, string log, string ex = "")
{
// string path = "D:\\MyWindowsService_Log\\" + logType;//文件夹路径:
string logPath = string.IsNullOrWhiteSpace(ConfigurationManager.AppSettings["logPath"]) ? "D:\\" : ConfigurationManager.AppSettings["logPath"].ToString();
string path = logPath + logType;//文件夹路径:
if (!Directory.Exists(path))//判断文件夹是否存在
{
Directory.CreateDirectory(path);//不存在,创建文件夹
}
using (FileStream stream = new FileStream(path + "\\" + DateTime.Today.ToString("yyyyMMdd") + ".txt", FileMode.Append))
using (StreamWriter writer = new StreamWriter(stream))
{
writer.WriteLine("---------------------" + DateTime.Now + "---------------------");
if (!string.IsNullOrWhiteSpace(log))
writer.WriteLine(log);
if (!string.IsNullOrWhiteSpace(ex))
writer.WriteLine(ex);
writer.WriteLine("");
}
}
public enum LogType
{
[Description("运行日志")]
info,
[Description("调试日志")]
debug,
[Description("警告日志")]
warning,
[Description("报错日志")]
error,
}
}
}
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!--日志路径,默认: D:\-->
<add key="logPath" value="D:\MyWindowsService_Log\"/>
</appSettings>
<connectionStrings>
<add name="DB" connectionString="Initial Catalog=DB;Data Source=.;User ID=sa;Password=123456" />
</connectionStrings>
</configuration>
安装.bat:
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe c:\1\MyWindowsService.exe
pause
卸载.bat
%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u c:\1\MyWindowsService.exe
pause
用记事本打开 "_安装.bat"和"_卸载.bat",修改*.exe文件所在的实际物理路径,
然后再点击右键,以"管理员身份"执行安装或卸载.
按装后→桌面→我的电脑→右键→管理,服务→找到你安装的服务→启动服务