我想创建一个控制台exe应用程序,它可以作为独立应用程序以及Windows服务运行。有可能吗?使用svchost实际上有什么好处?
答案 0 :(得分:14)
重写你的windows服务的主要方法,如果你使用parametr -c运行它将是控制台应用程序,是的,不要忘记从项目的属性窗口将项目类型更改为控制台
public static void Main(string[] args)
{
Service service = new Service();
if (args.Contains("-c", StringComparer.InvariantCultureIgnoreCase) || args.Contains("-console", StringComparer.InvariantCultureIgnoreCase))
{
service.StartService(args);
Console.ReadLine();
service.StopService();
return;
}
ServiceBase[] ServicesToRun = new ServiceBase[]
{
service
};
ServiceBase.Run(ServicesToRun);
}
StartService和StopService只调用服务的覆盖OnStart和OnStop方法
答案 1 :(得分:2)
这种情况的最佳方法是考虑组件的概念。
您的策略应该是开发一个包含您需要的所有逻辑的DLL。
之后,您将构建一个使用该DLL的控制台应用程序和Windows服务。
组件的概念和重用它们的可能性是微不足道的,并且是可取的。
当您需要更改逻辑时,您只需更改DLL,然后替换旧的DLL。您不需要任何特殊部署。