http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx
Ben de may iyi Başlat sağlamanın birkaç saniye/dakika sürer bir hizmet ile uğraşmak zorunda kaldı. Hizmet başladığında, bir SQL Server'a bağlanmaya çalışır. Ancak, tüm sunucu yeniden başlatıldığında hizmetim SQL Server ÖNCE başlıyordu. (Hizmet bağımlılığı hakkında bilgim var ama benim durumum için belli bir nedenden dolayı geçerli değil ....). SQL Server'a bağlanmak için 10 kez denemeye çalışan bir döngü yapmayı denedim, ancak Windows Zaman Aşımı nedeniyle 2. denemeden önce hizmetimi öldürüyordu.
Çözümüm: Hizmetimin "onStart()" bölümüne bir Zamanlayıcı ekledim. Ardından, hizmetin "onTick()" yöntemi, SQL Server'a bağlanmak için 10 kez çalışıyordu (30'unda beklemeyle). Başlangıçta zaman aşımı yok.
Yani temelde
,
- hizmetim 5 saniye içinde başlayacak.
- Hizmetin başlatılmasından 10 saniye sonra bir zamanlayıcı başlatılır.
- Zamanlayıcı, SQL Server'a bağlanmak için 10 kez [her seferinde 30 saniye bekletme] 'a bağlanır.
- Eğer başarılı olursa, zamanlayıcı kendini devre dışı bırakır (eğer 10 denemeden sonra), servisi durdururum.
Not sorunu çözmek için daha şık bir yol ama belki benden daha aynı durumda kimseye yardımcı olabilir benim çözümün bir kısmı,
Ayı aklınızda olsa bile, kendi başına bir başka hizmetiniz varsa, SERVICE_RUNNING gönderdiğinde hizmetinizin tamamen işlevsel olmasını bekleyebilirsiniz. Bu, SERVICE_RUNNING mesajını göndermeden önce, başlatma işleminizin _all_'ini tamamlamanız ve gerekiyorsa SetServiceStatus ile daha fazla zaman istemeniz için iyi bir nedendir. –