我有一个API(c#),我必须将其转换为Windows服务:
现在API有一个我们必须在OnStart()
调用的函数void Start()
{
while (true)
{
//code
}
Thread.Sleep(int.Parse(900000);
}
所以我编码为: Service1.cs
protected override void OnStart(string[] args)
{
Start();
}
protected override void OnStop()
{
}
Program.cs的
static void Main()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new Service1()
};
foreach (ServiceBase sb in ServicesToRun)
{
sb.CanPauseAndContinue = false;
sb.CanShutdown = true;
sb.CanStop = true;
}
ServiceBase.Run(ServicesToRun);
}
这种方式是正确的还是我应该修改或者需要添加更多内容。
答案 0 :(得分:1)
您可能希望在正常停止服务时添加OnStop方法来处理清洁人员。
您可以写入日志或关闭打开的文件,编写缓存数据 - 这一切都取决于您的实际代码,OnClose函数用于确保您从服务中正确退出。
答案 1 :(得分:1)
我建议您使用TopShelf库(可通过NuGet获取)。 使用TopShelf创建Windows服务非常简单:
public class Program
{
public static void Main()
{
HostFactory.Run(x =>
{
x.Service<TownCrier>(s =>
{
s.ConstructUsing(name=> new TownCrier());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("Sample Topshelf Host");
x.SetDisplayName("Stuff");
x.SetServiceName("stuff");
});
}
}
TopShelf的优点在于您可以在开发期间从Visual Studio(F5 / Ctrl-F5)将程序作为普通控制台应用程序运行。
但是当您需要将其安装为Windows服务时,只需使用 install 参数运行程序: Program.exe install
或卸载它: Program.exe卸载
开始服务: Program.exe启动