如何将控制台应用程序转换为Windows服务?
答
在您的代码中,您可以使用Environment.UserInteractive属性来确定您处于控制台/服务中的模式。
例子:
static class Program
{
static void Main(params string[] args)
{
var service = new Service1();
if (!Environment.UserInteractive)
{
var servicesToRun = new ServiceBase[] { service };
ServiceBase.Run(servicesToRun);
return;
}
Console.WriteLine("Running as a Console Application");
Console.WriteLine(" 1. Run Service");
Console.WriteLine(" 2. Other Option");
Console.WriteLine(" 3. Exit");
Console.Write("Enter Option: ");
var input = Console.ReadLine();
switch (input)
{
case "1":
service.Start(args);
Console.WriteLine("Running Service - Press Enter To Exit");
Console.ReadLine();
break;
case "2":
break;
}
Console.WriteLine("Closing");
}
}
public partial class Service1 : ServiceBase
{
public Service1() { InitializeComponent(); }
public void Start(string[] args) { OnStart(args); }
protected override void OnStart(string[] args) { }
protected override void OnStop() { }
}
答
当我在调试模式下构建简化调试时,我经常将Windows服务作为控制台应用程序运行。
您的情况最直接的方法可能是创建一个新的Windows服务,以使您的主入口点的正确结构和正确的引用,然后将您的控制台应用代码集成到该结构中。
读取/写入/从控制台写入必须重写。
如果您必须阅读用户输入,请考虑使用替代方法将该输入提供给服务。如果您将输出写入控制台,请将其写入日志。我个人会推荐NLog。
答
项目的一般属性 - >更改类型类库。
可以去除主要功能,因为它不会在
+1
主要功能当然是在Windows服务中调用的。 – 2013-03-19 16:36:33
欢迎被调用,以#1,请仔细阅读[常见问题]和[提问]几次.. – 2013-03-19 07:19:55
你尝试过什么? http://msdn.microsoft.com/en-us/library/zt39148a(v=vs.80).aspx – Alex 2013-03-19 07:20:34
我没有得到你的问题控制台应用程序和Windows服务是两个不同的东西。你想添加Windows服务在控制台程序? – Shrivallabh 2013-03-19 07:22:04