我正在尝试使用C#创建一个Windows服务。
我的问题是我只有Visual Studio Express 2010,因此我无法生成“服务应用程序”。我的控制台应用程序正在运行,我使用Inno Setup将其作为服务安装。
但当然,服务还没有开始。所以我的问题是,控制台应用程序和Windows服务之间的编码差异是什么 - 我必须做些什么来使我的应用程序作为服务工作。
由于
答案 0 :(得分:1)
我强烈建议您查看TopShelf以将您的控制台应用程序转换为Windows服务。所需的代码更改非常少;基本上
public class Service
{
public void Start()
{
// your code when started
}
public void Stop()
{
// your code when stopped
}
}
public class Program
{
public static void Main()
{
HostFactory.Run(x =>
{
x.Service<Service>(s =>
{
s.ConstructUsing(name=> new Service());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription("My service description");
x.SetDisplayName("ServiceName");
x.SetServiceName("ServiceName");
});
}
}
然后从命令行安装它
service.exe install
答案 1 :(得分:0)
我们在这些方面使用了一些东西:
using System.ServiceProcess;
using System.Diagnostics;
using System;
namespace MyApplicationNamespace
{
static class Program
{
static void Main(string[] args)
{
if (args != null && args.Length > 0)
{
switch (args[0])
{
case "-debug":
case "-d":
StartConsole();
break;
default:
break;
}
}
else
{
StartService();
}
}
private static void StartConsole()
{
MyApp myApp = new MyApp();
myApp.StartProcessing();
Console.ReadLine();
}
private static void StartService()
{
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] { new MyApp() };
ServiceBase.Run(ServicesToRun);
}
}
}
MyApp将继承自
System.ServiceProcess.ServiceBase
然后,您可以使用
安装该服务installutil app.exe
要从控制台运行,只需使用-d或-debug开关。