我创建了多个Windows服务,在每一个中我使用以下构造来维护我的服务或在测试时调试它。
将此代码提取到具有类dll
的共享库WinServiceBase
并调用WinServiceBase.StartOrInstallService(args, mainLogic, minutes)
它无效。
服务似乎“启动”,因为它显示在Windows服务面板中,但没有任何反应,也没有记录。
服务
public static void Main(string[] args)
{
IMainLogic mainLogic = new MainLogic();
int minutes = 120;
// WinServiceBase.StartOrInstallService(args, mainLogic, minutes);
if (Environment.UserInteractive)
{
if (args.Length == 0)
{
mainLogic.Start();
// timeout for debugging
Thread.Sleep(TimeSpan.FromMinutes(minutes));
mainLogic.Pause();
}
else if (args.Length == 1)
{
switch (args[0])
{
case "-install":
ManagedInstallerClass.InstallHelper(new string[] { Assembly.GetCallingAssembly().Location });
break;
case "-uninstall":
ManagedInstallerClass.InstallHelper(new string[] { "/u", Assembly.GetCallingAssembly().Location });
break;
}
}
}
else
{
log.InfoFormat("Service: start...");
ServiceBase.Run(WinServiceBase.GetInstance(mainLogic));
}
}
共享类库
ServiceBase只是IMainLogic接口的一个包装器,用于启动服务,从app.config
读取其名称并提供基于上述主要方法的静态方法。
public class WinServiceBase : ServiceBase
{
public static StartOrInstallService(String[] args, IMainLogic mainLogic, int minutes)
{
// same code as above main
}
}