-
如果讨厌用windows窗体创建,还要避免调试麻烦可以用Topshelf开源服务框架详见:Topshelf:
https://blog.csdn.net/tx1721110240/article/details/118722296
-
首先创建一个Windows服务程序
-
编译器生成项目如下:
-
双击右侧Service1.cs,然后在左侧右键单机添加安装程序
如图,我们看见了2个控件
右键serviceInstaller1单击属性
将ServiceName修改为TestService,这将是我们服务中显示的名称。
然后右键serviceProcessInstaller1单击属性,设置Account这代表着用那种用户启动这个服务
-
代码编写
Program.cs中Main方法是整个程序的起点,并且可以调用多个服务程序
在服务代码中,OnStart和OnStop只会执行一次,分别在开始和停止的时候。除此之外还有OnContinue,OnPause等等,详细请在ServiceBase处按F12,从元数据。
namespace TestWindowsService
{
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
try
{
this.WriteLog("服务启动");
this.ToDoSomeThings();
}
catch (Exception ex)
{
this.WriteLog(ex.Message);
ServiceController serviceController = new ServiceController();
if (serviceController.CanStop)
{
serviceController.Stop();
}
}
}
protected override void OnStop()
{
try
{
this.WriteLog("服务结束");
}
catch (Exception ex)
{
this.WriteLog(ex.Message);
ServiceController serviceController = new ServiceController();
if (serviceController.CanStop)
{
serviceController.Stop();
}
}
}
/// <summary>
///
/// </summary>
private void ToDoSomeThings()
{
DateTime dateTime = DateTime.Now;
if (dateTime.Hour == 14 && dateTime.Minute == 30)
{
int a = 0;
for (int i = 0; i < 10000; i++)
{
a += i;
}
this.WriteLog(a.ToString());
}
}
/// <summary>
/// 记录日志
/// </summary>
/// <param name="LogContent"></param>
private void WriteLog(string LogContent)
{
string FilePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "\\Log.txt";
FileStream fileStream = null;
if (File.Exists(FilePath))
{
fileStream = new FileStream(FilePath, FileMode.Append);
}
else
{
fileStream = new FileStream(FilePath, FileMode.OpenOrCreate);
}
StreamWriter streamWriter = new StreamWriter(fileStream);
streamWriter.WriteLine(DateTime.Now + System.Environment.NewLine + LogContent);
streamWriter.Close();
fileStream.Close();
GC.Collect();
}
}
}
-
保存并生成后,将服务安装
详细安装方式见上一篇
https://blog.csdn.net/tx1721110240/article/details/102649542
-
调试方式
注:因为服务未启动时无法产生进程,所以一般调试都会在项目中再创建一个控制台或窗体,调用需要调试的方法达到调试的目的,而不会使用这种调试方式。
首先启动服务
在vs中调试-》附加到进程
选择和项目名称一样的进程名,点击附加后就可以正常调试了