2009-10-16 15 views
31

Yazdığım bir hizmeti dağıtmaya çalışıyorum. Gördüğünüz gibi, işe yaramıyorKendi geliştirdiğimiz bir Windows Service yükleme

Installing assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'. 
Affected parameters are: 
    logtoconsole = 
    assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe 
    logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog 
Installing service TweetLinkService... 
Creating EventLog source TweetLinkService in log Application... 
Rolling back assembly 'c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe'. 
Affected parameters are: 
    logtoconsole = 
    assemblypath = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.exe 
    logfile = c:\Users\brwatson\Development\Projects\TweetLinks\TweetLinkQueue\bin\Debug\TweetLinkQueue.InstallLog 
Restoring event log to previous state for source TweetLinkService. 
An exception occurred during the Rollback phase of the System.Diagnostics.EventLogInstaller installer. 
System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security. 
An exception occurred during the Rollback phase of the installation. This exception will be ignored and the rollback will continue. However, the machine might not fully revert to its initial state after the rollback is complete. 

: İşte InstallLog dosya. Nasıl devam edeceğimi bilmiyorum ve Bing ve Google ile duvara çarptı. ServiceProcessInstaller1 için hesabı LocalSystem'e ayarladım. Kod iyi bir şekilde derleniyor, ama şimdi şu şeyi çalıştırmak istiyorum ... herhangi bir fikir? Kutumda bir yönetici değilim ve ben komutunu çalıştırıyorum:

ınstallutil TweetLinkQueue.exe VS2008 yönetici konsolundan

. Giriş Noktası ile GÜNCELLEME

public TweetLinkService() 
{ 
    InitializeComponent(); 

    if (!EventLog.SourceExists("TweetLinkQueue")) 
    { 
     EventLog.CreateEventSource("TweetLinkQueue", "Log"); 

     TweetLinksLog.Source = "TweetLinkQueue"; 
     TweetLinksLog.Log = "Log"; 

     TweetLinksLog.WriteEntry("Log Created!"); 
    } 
} 

: Ben

namespace TweetLinkQueue 
{ 
    static class Program 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     static void Main() 
     { 
      ServiceBase[] ServicesToRun; 
      ServicesToRun = new ServiceBase[] 
      { 
       new TweetLinkService() 
      }; 
      ServiceBase.Run(ServicesToRun); 
     } 
    } 
} 
+0

/ShowCallStack seçeneğiyle birlikte installutil çalıştırırsanız herhangi bir ek bilgi alır mısınız? – itowlson

+0

Günlük dosyası bilgisi yukarıdaki sorudadır. –

+0

Hizmeti yüklemek isteyen kullanıcı Güvenlik olay günlüğüne yazma iznine sahip mi? – Oded

cevap

13

/ShowCallStack seçeneği İLE GÜNCELLEME burada

Çağrı yığını

An exception occurred during the Install phase. 
System.Security.SecurityException: The source was not found, but some or all eve 
nt logs could not be searched. Inaccessible logs: Security. 
    at System.Diagnostics.EventLog.FindSourceRegistration(String source, String m 
achineName, Boolean readOnly) 
    at System.Diagnostics.EventLog.SourceExists(String source, String machineName 
) 
    at System.Diagnostics.EventLogInstaller.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.ServiceProcess.ServiceInstaller.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.AssemblyInstaller.Install(IDictionary savedSt 
ate) 
    at System.Configuration.Install.Installer.Install(IDictionary stateSaver) 
    at System.Configuration.Install.TransactedInstaller.Install(IDictionary saved 
State) 

ve yapıcı olduğunu değil Özel problemin ne olduğundan emin ol. EventLog kaynağını oluştururken sorun oluşuyor gibi görünüyor. Bu parçayı doğru yaptığınızı bir kez daha kontrol edin. Adım adım here başvuruda bulunabilirsiniz. DÜZENLEME: ÖZELLİKLE ADIM 9'a bak. Sorun, uygulama günlüğüne uygulamanızın yerine bir uygulama günlüğünü karıştırdığınız için ortaya çıkabilir.

InstallUtil kullanımıyla ilgili bir sorun yoktur, ancak hizmetinizi yabancı bir makineye yüklemeniz gerekiyorsa, InstallUtil'in burada olması garanti edilmez. Windows hizmetinizi InstallUtil'e gerek kalmadan yükleme/kaldırma işlemini kendiniz yapmak için bu adım adım takip edebilirsiniz. Bu talimatlar için bkz. here.

2

LocalSystem hesabı, normal olarak Güvenlik olay günlüğünü okuma iznine sahip değildir (veya bu konuyla ilgili olay kaynakları oluşturmak için).

En kolay ve en güvenli çözüm, bunu çalıştırmak istediğiniz herhangi bir makinede kendi yönetim düzeyindeki kimlik bilgileriniz altında çalıştırabileceğiniz bir olay kaynağı yükleme programı oluşturmaktır. Bunu, hesabınızın bunu yapma izninin olup olmadığını görmek için basit bir test olarak denemeye bile değebilir.

class Program { 
    static void Main(string[] args) { 
     EventLog.CreateEventSource("TestSource", "Application"); 
    } 
} 

Bunu yürütürseniz, başarılı mı? Uygulama günlüğünün özelliklerine bakarak ve Filtre sekmesindeki Olay kaynaklarına göz atarak kontrol edebilirsiniz. hizmetler zaten yüklü olması gerekmektedir beri

Alternatif olarak, siz (misnamed hangi - gerçekten gerektiği gibi EventLogs yaratacak bir 'EventSourceInstaller' var) bir EventLogInstaller ekleyebilirsiniz yerine hizmetin yapıcısındaki EventLog.CreateEventSource kullanmanın montaja.

+0

Yep. Bunun nasıl yapılacağına ilişkin bir örnek için http://stackoverflow.com/questions/593454/easiest-language-to-create-a-windows-service/593803#593803 adresindeki 9. adıma bakın. –

+0

Evet - kesinlikle iyi bir örnek. –

109

Sadece bu sorunu yaşıyordum ve görsel yönetici komut istemcimi yönetici olarak çalıştırmıyordum.

+8

Bu, yanıt olarak işaretlenmelidir. –

+0

bu, makinemde neden çalıştığını açıklıyor ancak üretimde değil – TruthOf42

+2

Hizmetin yüklenmesi için bir BAT dosyası oluşturdum ve BAT dosyasını bir Yönetici olarak çalıştırıyordum (BAT dosyasına sağ tıklayıp "yönetici olarak çalıştır" seçeneğini tıklıyoruz) çalışmıyordu. Çalışması için BAT dosyası yerine "Yönetici olarak çalıştır" komut satırı ve komut satırı (cmd.exe). Sonra elle kurdum ve işe yaradı. –

8

Bu sorunu çözmek için, Visual Studio 2008 Komut İstemi'ni sağ tıklatıp yönetici olarak çalıştır'ı tıklatıp komutunuzu installutil C: \ mcWebService \ bin \ Debug \ mcWebService gibi çalıştırın.exe sonra size başarılı mesaj gösterecektir. Umut, bu çözümünüzü çözecektir.

0

Sorunum, kimlik bilgilerini girmeye çalışan bir pencereydi ve kullanıcı adımı etki alanı olmadan giriyordum. Bir kez etki alanına girdikten sonra \ username hepsi iyiydi.

İlgili konular