当我们想要在Windows系统上运行某一个程序时,我们通常会使用Windows服务。在C#语言中,我们可以使用Topshelf库快速地创建和管理Windows服务。下面是使用Topshelf库创建Windows服务的步骤:
步骤1:创建一个控制台程序
首先需要创建一个新的C#控制台项目。在Visual Studio中,选择“新建项目”并选择“控制台应用程序”。
步骤2:安装Topshelf库
可以使用NuGet包管理器来安装Topshelf库。方法如下:
- 在Visual Studio中,右键选择项目,并选择“管理NuGet包…”。
- 在NuGet包管理器中搜索“Topshelf”。
- 安装Topshelf库。
步骤3:编写代码
在程序的入口点Main方法中,增加以下代码:
using Topshelf;
class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new MyService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
// 设置服务的名称
x.SetServiceName("My Service");
// 设置服务的显示名称
x.SetDisplayName("My Service");
// 设置服务的描述
x.SetDescription("This is my service.");
// 设置服务启动类型:自动、手动或禁用
x.StartAutomatically();
// 设置运行账户
x.RunAsLocalSystem();
});
}
}
public class MyService
{
public void Start()
{
// 服务启动时的操作
}
public void Stop()
{
// 服务停止时的操作
}
}
上面的代码中,我们定义了一个名为“My Service”的服务,并设置了服务的显示名称、描述、启动类型和运行账户。MyService类中包含了服务启动和停止时的操作。
步骤4:安装和卸载服务
通过Visual Studio打开“Developer Command Prompt for VS”命令行窗口,使用以下命令来安装或卸载服务:
安装服务:
MyService.exe install
卸载服务:
MyService.exe uninstall
示例1:服务每秒打印一次当前时间戳
下面是一个示例代码,这个服务每隔1秒钟就会打印当前的时间戳:
using System;
using System.Threading;
using Topshelf;
class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new MyService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
// 设置服务的名称
x.SetServiceName("My Service");
// 设置服务的显示名称
x.SetDisplayName("My Service");
// 设置服务的描述
x.SetDescription("This is my service.");
// 设置服务启动类型:自动、手动或禁用
x.StartAutomatically();
// 设置运行账户
x.RunAsLocalSystem();
});
}
}
public class MyService
{
private Timer _timer;
public void Start()
{
_timer = new Timer(PrintTime, null, 0, 1000);
}
public void Stop()
{
_timer.Dispose();
}
private void PrintTime(object state)
{
Console.WriteLine(DateTime.Now.ToString());
}
}
示例2:服务监控某一目录下的文件变化
下面是一个示例代码,这个服务会监控某一目录下的文件变化并打印相应的信息:
using System;
using System.IO;
using Topshelf;
class Program
{
static void Main(string[] args)
{
HostFactory.Run(x =>
{
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new MyService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
// 设置服务的名称
x.SetServiceName("My Service");
// 设置服务的显示名称
x.SetDisplayName("My Service");
// 设置服务的描述
x.SetDescription("This is my service.");
// 设置服务启动类型:自动、手动或禁用
x.StartAutomatically();
// 设置运行账户
x.RunAsLocalSystem();
});
}
}
public class MyService
{
private FileSystemWatcher _watcher;
public void Start()
{
_watcher = new FileSystemWatcher(@"C:\path\to\watched\directory");
_watcher.Created += new FileSystemEventHandler(OnCreated);
_watcher.Deleted += new FileSystemEventHandler(OnDeleted);
_watcher.Renamed += new RenamedEventHandler(OnRenamed);
_watcher.EnableRaisingEvents = true;
}
public void Stop()
{
_watcher.Dispose();
}
private void OnCreated(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"File created: {e.Name}");
}
private void OnDeleted(object sender, FileSystemEventArgs e)
{
Console.WriteLine($"File deleted: {e.Name}");
}
private void OnRenamed(object sender, RenamedEventArgs e)
{
Console.WriteLine($"File renamed: {e.OldName} to {e.Name}");
}
}
总结
使用Topshelf库是C#语言中快速创建和管理Windows服务的推荐方法。在上面的示例代码中,我们演示了如何使用Topshelf库来创建一个简单的服务,如何通过命令行来安装和卸载服务,以及如何通过示例来实现服务的具体功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#用Topshelf创建Windows服务的步骤分享 - Python技术站