2013-06-25 51 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