2013-06-25 39 views
1

当我温莎城堡作为我的IoC和TopShelf运行它的服务。 当我运行它作为控制台应用程序,它工作得很好。当是时它给我安装并运行它作为一种服务,经过“服务没有响应控制功能。”仅在Windows 8/Windows的Server 2012的时候我删除BuilContainer(),它只是罚款在所有平台上它在Windows 7“服务没有响应控制功能”?使用IoC的

就好了。

我还做了我的记录器记录BuildContainer之前“A0”和之后的“A1”。 “a0”将被记录,但在作为服务运行时,“a1”不会被记录。

这种方法被很多,包括我和它适用于Windows 7,但无法在Windows 8/Windows Server 2012中

 BuildContainer(); // builds IWindsorContainer and registers component. 

     HostFactory.Run(x => 
     { 
      x.Service<IService>(config => 
      { 
       config.ConstructUsing(o => Container.Resolve<IService>("myService")); 
       config.WhenStarted(o => o.Start()); 
       config.WhenStopped(o => {o.Stop(); Container.Dispose();}); 
      }); 

      x.RunAsLocalSystem(); 
      x.SetServiceName("ServiceName"); 
      x.SetDescription("ServiceDesc"); 
      x.SetDisplayName("ServiceDispName"); 

     }); 

有什么不好?

感谢, Peyman的

回答

0

最有可能的事情是让你BuildContainer()花费太长的时间,服务经理说,“嗯,你太慢了”。将应用程序作为控制台运行时没有时间限制。我不知道如果Windows版本之间改变了时限,说为什么它只是errorring上的Win8/2012。这些机器上的东西也可能使BuildContainer()花费的时间比旧系统长。

假设我是正确的,你怎么解决?如果不理解你在容器中做什么,很难说。这看起来与我的Topshelf服务看起来几乎完全一样,所以你至少在正确的轨道上。也许有些事你可以推迟在你的容器中做,直到后来呢?

+0

我要求额外的时间和问题解决,但我更喜欢不这样做,而是我在服务启动后执行此任务。 – Peyman

+0

很高兴你有一个解决方案,然后。祝你好运! – Travis