2009-02-16 25 views
5

Verisign signtool.exe ile hizmetimde derlemeleri imzaladığımda, makine başlatıldığında Windows 2003 Server çalıştıran bir makinede başlatılamıyor. Olay günlüğünün iki olayı vardır: 0 x35 Hizmet Sunucusu'nun bağlanmasını bekleyen zaman aşımı (30000 milisaniye). "İmzalı derlemeler, hizmetimin başlatılmasını engeller

." ve "xxx Hizmet hizmeti, aşağıdaki hata nedeniyle başlatılamadı: Hizmet, başlatma veya denetim isteğine zamanında yanıt vermedi."

Makine çalışırken, iyi çalışır. XP ve Vista'da iyi başlıyor. Meclisler imzasız olduğunda iyi başlar.

cevap

2

Montajlarınızı imzalayan Authenticode'un soğuk başlatma üzerinde çok olumsuz bir etkisi olabilir. Ayrıntılar için bu KB makalesine bakın. spacedog söylediği gibi

http://support.microsoft.com/default.aspx/kb/936707

+0

MS'in test edilmediğini söyleyen bir yama yüklenmesine rağmen, bir üretim sisteminde çok çekici görünmüyor ... –

1

, Authenticode başlangıç ​​zamanında kötü bir etkisi olabilir. Yani soru neyi imzalıyorsun? Authenticode'un sadece servis uygulamanızın imzalanabilmesi yeterlidir; Böylece Authenticode imzasını doğrulamanın ek yükü.

Montajlarınızı GAC'ye yükleyebilirsiniz - eğer mümkünse - bu, güçlü ad doğrulaması atlandığından (bkz. Authenticode and Assemblies) ve/veya başlatma zamanı hala bir sorun olduğunda montajlarınızı da kaldırabileceğiniz için başlangıç ​​performansınızı biraz daha artırır. cevap itibaren

Romulo A. CECCON tarafından Windows service startup timeout için:

SetServiceStatus ek olarak

It's good practice to finish starting your service as fast as possible. So, during the start state, do only what you absolutely need to acknowledge it started successfully; and do the rest later. If the start is still a lengthy process, use SetServiceStatus periodically to inform the Service Control Manager that you have not yet finished, so it does not time-out your service.

da hizmet başlatmak için ek süre ihtiyacı olduğunu, Hizmet Denetim Yöneticisi (SCM) anlatmaya deneyebilirsiniz ServiceBase.RequestAdditionalTime numaralı telefonu arayarak.

+0

Bu yanıt, güçlü ad imzaları ile Authenticode imzalarını birleştiriyor gibi görünüyor mu? – Dave

+1

Hayır. Ne şekilde? –

+0

(devam) Authenticode kullanıldığında, başvurulan derlemelerin güçlü ismiyle imzalanmış olması yeterlidir. Bir referans bulmaya çalışıyordum, maalesef sadece bu yazıyı buldum: http://social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/493aca7f-b5ea-4462-a15f-affe874bfe44/ –

4

Bu sorun, .NET hizmeti yürütülebilir dosyaları için çok yaygındır: hizmet, önyükleme sırasında başlamaz, ancak daha sonra manuel olarak başlatıldığında sorunsuz çalışır. ServiceBase.RequestAdditionalTime'ın kullanılıp kullanılmadığı önemli değildir: aslında, hizmet başlatma isteği zaman aşımına uğramadan önce hiç kullanıcı kodu çalıştırılmaz. Bu etki, İnternet bağlantısı olmayan makinelerde daha da belirgindir: bu durumda, hizmeti manuel olarak SCM'den başlatmanız bile başarısız olur.

<configuration> 
    <runtime> 
     <generatePublisherEvidence enabled="false"/> 
    </runtime> 
</configuration> 

Yayınevi kanıt az kullanılan bir kod Erişim Güvenliği (CAS) özelliğidir:

sizin .exe.config dosyasına aşağıdaki unsurları ekleyerek bu sorunu, disable the verification of the Authenticode signature at load time in order to create Publisher evidence, gidermek için yalnızca servis PublisherMembershipCondition dayanarak sorunlara neden olacak. Diğer tüm durumlarda, kalıcı veya kesintili başlatma hatalarını ortadan kaldıracak ve artık çalışma zamanının pahalı sertifika kontrolleri (iptal listesi aramaları dahil) yapmasını gerektirmeyecektir.

Düzenleme, Temmuz 2010: .NET Framework 4.0'ın 4.0 sürümünü kullanan uygulamalar için, bu geçici çözüm artık gerekli değildir.

İlgili konular