我正在嘗試使用C#製作Windows服務。如何將控制檯應用程序轉換爲服務應用程序
我的問題是,我只有Visual Studio Express 2010,所以我不能生成「服務應用程序」。我的控制檯應用程序正在運行,並使用Inno Setup將其作爲服務安裝。
但當然,服務沒有啓動。所以我的問題是,控制檯應用程序和Windows服務之間的編碼區別是什麼 - 我必須做些什麼才能使我的應用程序成爲一項服務。
感謝
我正在嘗試使用C#製作Windows服務。如何將控制檯應用程序轉換爲服務應用程序
我的問題是,我只有Visual Studio Express 2010,所以我不能生成「服務應用程序」。我的控制檯應用程序正在運行,並使用Inno Setup將其作爲服務安裝。
但當然,服務沒有啓動。所以我的問題是,控制檯應用程序和Windows服務之間的編碼區別是什麼 - 我必須做些什麼才能使我的應用程序成爲一項服務。
感謝
我會強烈建議看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
我們使用這些方針的東西:
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開關。
不完全重複,但我認爲這會指向正確的方向:http://stackoverflow.com/q/7764088/56778 –