2015-02-26 13 views
8

Bir Windows Service için FluentSchedule ile birlikte Topshelf kullanıyorum.Topshelf konsol modunda çalışıyorsa nasıl algılanır

Ancak, ben edebilmek istiyorum deneme işletmesi basitçe Komutanlığı'ndan exe dosyasını çalıştıran bir yolu var mı zamanlayıcı vb

kurar FluentSchedule kodu çalıştırmak başlatmak ve uygulama TopShelf'in Konsol modunda çalışıp çalışmadığını kontrol etmek için hat (yani 'install' komutu olmadan)?

+0

Henüz yapmadıysanız, e-posta listesine https://groups.google.com/forum/#!members/topshelf-discuss'u sorardım. Belli bir yol olduğunu düşünmüyorum. Ayrıca, GitHub'da bir sorun açabilirsiniz: https://github.com/topshelf/topshelf – Travis

+0

Doğrudan TopShelf ile ilgili olmayan, ancak http://stackoverflow.com/questions/2397162/how-to-determine adresinde -if-başlangıç-içinde-bir-windows-hizmeti –

cevap

12

Bu bir tür kesmek, ancak HostControl arabirimini ConsoleRunHost için yayınlamaya çalışabilir ve bu tür bir konsol uygulaması olarak çalıştırıyorsunuz.

Bu ideal değil, elbette, ama kesinlikle daha az çirkin yapmak için bunu bir uzantı yönteminde gizleyebilirsiniz.

public static bool IsRunningAsConsole(this HostControl control) 
{ 
    return control is ConsoleRunHost; 
} 
+2

Çalışma zamanında bir HostControl olarak ne ve ne zaman başvurulacağını tanımlamakta zorlanıyorum. HostFactory.Run (x => vb.) Çağrılmadan önce bir HostControl olana kadar ne referans verebilirim? Yoksa ben çok erken mi yapıyorum? Bunu hizmet sınıfında kontrol etmeliyim, x.Service 'da yeniden başlatıyorum ve bir kez daha, o sınıfta bir HostControl olacağıma ne başvurabilirim? – Redeemed1

+0

Bunu çok erken yapıyorsunuz. HostControl gerçek servis kodunuzun içinde. Bahsettiğiniz akıcı zamanlama kodu Topshelf tarafından başlatılan hizmetin dışında oluşturulmamalıdır. Aksi takdirde, yükleme, kaldırma ve diğer Topshelf komutları için başlatılır. –

+0

Tamam, teşekkürler @ChrisPatterson, kontrol edeceğim – Redeemed1

7

Environment.UserInteractive'u kullanabilirsiniz. Teknik olarak bu, kullanıcı etkileşimli modda bir hizmeti çalıştırmak mümkün olduğundan vakaların% 100'ünde çalışmayacaktır, ancak bu bir saçma durumdur.

İlgili konular