Hata 5: Windows hizmeti başlatılırken Erişim Reddedildi


98

C # ile oluşturduğum bir Windows hizmetini başlatmaya çalıştığımda bu hatayı alıyorum:

alternatif metin

Kodum şu ana kadar:

private ServiceHost host = null;

public RightAccessHost()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    host = new ServiceHost(typeof(RightAccessWcf));
    host.Open();
}

protected override void OnStop()
{
    if (host != null)
        host.Close();
    host = null;
}

1 numaralı güncelleme

NETWORK SERVICE hesabına izinler vererek yukarıdaki sorunu çözdüm ancak şimdi başka bir sorunum var:

alternatif metin

2 numaralı güncelleme

Hizmet başlatılamıyor. System.InvalidOperationException: 'RightAccessManagementWcf.RightAccessWcf' hizmetinin sıfır uygulama (altyapı dışı) uç noktası var. Bunun nedeni, uygulamanız için hiçbir yapılandırma dosyasının bulunmaması veya yapılandırma dosyasında hizmet adıyla eşleşen hiçbir hizmet öğesinin bulunamaması veya hizmet öğesinde hiçbir uç noktanın tanımlanmamış olması olabilir. System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (ServiceDescription açıklaması) at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (ServiceDescription açıklaması, ServiceHostBase hizmetHostu) System.ServiceModel.ServiceBase TimeSpan zaman aşımı) System.ServiceModel.Channels.CommunicationObject öğesinde.


2
İkinci probleminizi sadece bu mesajdan çözmek kolay değil. Olay günlüklerinize bakmanız ve gerçek hatanın ne olduğunu görmeniz gerekecek.
Matt Ellen

1
Sistem hesabının klasöre erişimi olup olmadığını kontrol edin.
DmitryBoyko

Yanıtlar:


117

Bu yazının eski olduğunun farkındayım, ancak belirgin bir çözüm yok ve sadece bunu nasıl çözdüğümü anlatmak istedim.

İlk Error 5: Access Deniedhata, NETWORK SERVICEhesaba çıktı dizinine izinler verilerek çözüldü .

İkinci Started and then stoppedhata, hizmette hata veren bir şey olduğunda genel bir mesaj gibi görünüyor. Gerçek hata mesajı için Olay Görüntüleyiciyi (özellikle 'Windows Günlükleri> Uygulama') kontrol edin.

Benim durumumda, app.config dosyasında kötü bir servis yapılandırması ayarıydı.


7
Explorer'ı kullanarak klasöre gidip, Özellikler, Güvenlik'e sağ tıklayarak ve ardından kullanıcı adları listesindeki NETWORK SERVICE hesabına doğru izinleri atayarak izinleri değiştirdim.
Justin Skiles

"Hata 5" ile ilgili durumumda, Ağ Hizmetinin çalıştırılabilir klasörüne erişim haklarına sahip olmamasıydı. Geliştirme için olduğundan, dosyaları Program Dosyası klasörüne değil, dev makinesinden dosyaları kopyalayabileceğim bir paylaşılan klasöre yerleştirmek istemedim. Ağ Hizmetine Okuma / Yürütme / Listeleme haklarının verilmesi yeterince iyi olmalıdır.
ZZZ

5
Bin \ Debug klasörüme YEREL HİZMET "ve" AĞ HİZMETİ "
ekliyorum

3
Sadece insanlara bir not: izinleri değiştirmek sorununuzu çözmezse, hata olup olmadığını görmek için Olay Görüntüleyiciyi kontrol ettiğinizden emin olun. Hizmetin başlamasını engelleyen tamamen ilgisiz bir SQL hatası yaşadım, ancak yine de "Hata 5: Erişim reddedildi." hata.
dtryan

"Olay görüntüleyici" ile ilgili not için teşekkürler - benimle aynı, alakasız "Uç nokta bulunamadı" hatası, ancak "Erişim Engellendi (5)" olarak maskelenmiş
David Votrubec

27

Bilgisayar -> Yönet -> Hizmet -> [hizmetiniz] özellikleri. Ardından hesap bilgilerinin bulunduğu sekme. Hizmeti yönetici hesabıyla çalıştırmak gibi bu ayarlarla oynayın.

Bu benim için yaptı.

DÜZENLEME: Sorun da şu olabilir, çoğu hizmet LOCAL SERVICEveya LOCAL SYSTEMhesap olarak çalıştırılır . Şimdi C:/my-admin-dir/service.exebu hesaplarla çalıştırdığınızda , ancak o dizinde herhangi bir şey yürütmelerine izin verilmediğinde, alacaksınız error 5. Bu nedenle, hizmetin yürütülebilir dosyasını bulun, RMB dizini -> Özellikler -> Güvenlik ve hizmetin birlikte çalıştırıldığı hesabın, dizin üzerinde tam denetime sahip olmak için tüm kullanıcılar listesinde olduğundan emin olun.


21

Bu benim için çalıştı.

  1. Çalıştırılabilir hizmeti içeren üst düzey klasöre sağ tıklayın. Mülklere Git
  2. "Güvenlik" Sekmesine gidin
  3. "DÜZENLE" yi tıklayın
  4. "EKLE" yi tıklayın
  5. "SİSTEM" adını girin, Tamam'a tıklayın
  6. SİSTEM kullanıcısını vurgulayın ve "Tam denetim" in yanındaki İZİN VER onay kutusunu tıklayın
  7. Tamam'ı iki kez tıklayın

11
"SİSTEM" benim için işe yaramadı, sadece kumar oynadım ve "HİZMET" i denedim - hile yaptı.
Exter

4
"HİZMET" eklemek ve ona "Tam Denetim" vermek benim için işe yaradı - Windows 10.
Fredrik

ServiceProcessInstaller'ımın Hesap özelliği (ProjectInstaller'imde) LocalService olarak ayarlandığından, Yerel Hizmet hesabına tam izinler verdim ve bu hile yaptı!
Dave

14

Ben de aynı hatayı aldım, Servis> Özellikler> Oturum Açma> Yerel Sistem Hesabı'na sağ tıklama ile çözüldü.


Teşekkürler. Tor.exe ile ilgili bir sorun yaşadım - hizmet başlangıcı ve şimdi bir cazibe gibi çalışıyor!
Arman Karimi

Benim için çalıştı. Ancak, bunu programlı olarak belirtmenin bir yolu var mı?
Sisir

Anladım. ServiceProcessInstaller -> Özellikler -> Hesap'a sağ tıklayın ve varsayılan "Kullanıcı" yerine "Yerel Sistem" olarak ayarlayın. Hizmeti ve işi yükleyin.
Sisir

10

Path to executableGerçek bir yürütülebilir dosyayı işaret ettiğinden emin olun (Sağ tıklama hizmeti -> Özellikler -> Genel sekmesi). Powershell (ve sc.exe) aracılığıyla gerçek bir yürütülebilir dosyaya işaret etmeden bir hizmet kurabilirsiniz ... ahem.


Yanlışlıkla .exe dosyası yerine bir klasör bıraktım. Bu sorunu düzeltmek için, hizmeti tamamen silmek ve doğru hizmet .exe dosyasını yeniden yüklemek için "sc servicenameXYZ" dosyasını silip sunucuyu yeniden başlatmam gerekti. Sonra bir cazibe gibi başlar. Bu yazı için teşekkürler.
Honza P.

Beni kurtardın! Çalıştırılabilir tam yol yerine klasör atanıyor ... Arghhhh! Daha iyi
görünmeliydi

9

Çözümü aldım:

1. Go to local service window(where all services found)
2. Just right click on your service name: 
3. click on "properties" 
4. go to "log on" tab
5. select "local system account"
6. click "ok"

şimdi servisi başlatmayı deneyebilirsiniz.


1
Zaten "Yerel sistem hesabı" seçildim ve hala mesajı alıyorum.
user2568374

6

Bu hatayı alıyordum çünkü kabul edilen yanıtı buradan yanlış okudum: Windows hizmetini yürütülebilir dosyadan oluşturun .

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

Çünkü <path_to_service_executable>çalıştırılabilir klasörün yolunu kullanıyordum, örn C:\Folder.

Yürütülebilir dosyanın yolu olması gerekir , örneğin C:\Folder\Executable.exe.


4

Benim durumumda aşağıdaki kontrol edilmedi.

görüntü açıklamasını buraya girin


2
Benim gibi diğer okuyucular için: Bu ekran görüntüsü servis özellikleri penceresinin bir parçasıdır! Hizmetler penceresini açın (Çalıştır: services.msc) ve hizmete sağ tıkladıktan sonra görünen içerik menüsünden Özellikler'i seçin!
MohaMad

3

Benim için - hizmetin çalıştırılacağı klasör ve içindeki dosyalar Windows "Şifrele" seçeneği kullanılarak şifrelenmişti. Bunu kaldırmak ve - işte!


Bunun benim için sorun olduğu ortaya çıktı - kullandığım sunucudaki palyaço sistem yöneticileri, tüm dizinlerin varsayılan olarak NTFS şifrelemesine sahip olmasını sağlamak için birkaç düğmeyi çevirdi ve bu nedenle LocalSystem aslında bunları okuyacak şifreleme anahtarına sahip değil ...
KJ Tsanaktsidis

3

Bu hata, OnStartyönteminizde bir hata olduğunda ortaya çıkar . Bir ana bilgisayarı doğrudan OnStartyöntemde açamazsınız çünkü çağrıldığında aslında açılmayacaktır, bunun yerine kontrolü bekleyecektir. Yani bir iplik kullanmalısın. Bu benim örneğim.

public partial class Service1 : ServiceBase
{
    ServiceHost host;
    Thread hostThread;
    public Service1()
    {
        InitializeComponent();
         hostThread= new Thread(new ThreadStart(StartHosting));

    }

    protected override void OnStart(string[] args)
    {
        hostThread.Start();
    }

    protected void StartHosting()
    {
        host = new ServiceHost(typeof(WCFAuth.Service.AuthService));
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}

3

5. erişim reddedilen bir hata kodunuz varsa, muhtemelen kodunuzda hizmetiniz sistemdeki bazı dosyalarla bir günlük dosyasına yazmak gibi etkileşime girmeye çalışıyor

hizmet özelliklerini seçin log onsekmesini açın ve hizmetin masaüstü ile etkileşime girmesine izin vermek için seçeneği işaretleyin, hizmetin masaüstü ile etkileşim kurmasına izin ver'i tıklayın


3

Benim durumumda, yürütülebilir dosyanın yüklü olduğu klasördeki 'Grup veya Kullanıcı Adları' listesine 'Kimliği Doğrulanmış Kullanıcılar' eklemem gerekiyordu.


3

Bu hatanın nedenlerinden biri, yerel klasörünüzdeki yetersiz izinlerdir (Kimliği Doğrulanan Kullanıcılar). 'Kimliği Doğrulanmış Kullanıcılar' için izin vermek için Klasörünüzün özelliklerindeki güvenlik sekmesini açın, 'Kimliği Doğrulanmış Kullanıcılar' grubunu Düzenleyin ve Ekleyin ve Değişiklikleri uygulayın.

Bu yapıldıktan sonra hizmetleri ağ hizmeti hesabı üzerinden bile çalıştırabiliyordum (bundan önce yalnızca Yerel sistem hesabıyla çalışabiliyordum).


2

OWIN ve TopShelf kullanarak barındırılan Windows hizmetim vardı. Başlayamadım. Aynı hata - "Erişim reddedildi 5"

Tüm izinleri bin / Debug'a verdim.

Sorun hala çözülmedi.

Bu yüzden olay günlüklerine bir göz Microsoft.Owin.Host.HttpListenerattım ve OWIN başlangıç ​​sınıfını içeren sınıf kitaplığına dahil edilmediği ortaya çıktı .

Bu nedenle, izinlere girmeden önce temel nedeni belirlemek için lütfen olay günlüğünü kontrol ettiğinizden emin olun.


2
İyi nokta - "erişim reddedildi" hatasının izinlerle ilgisi olmayabilir; her zaman Olay Görüntüleyicisi'ndeki uygulama günlüğünü kontrol edin.
mhenry1384

merhaba, bunu da kontrol ediyorum, ". \ logs" yolu nerede buna üst raftan giriş yapıyorum ama orada değil
trafo


1

Service Installer'da LocalService Account yerine LocalSystem Account kullanın.

Bunu, hizmet yükleyicinizin tasarım görünümünde aşağıdaki değişikliği yaparak da yapabilirsiniz:
Hizmet İşlemi Yükleyicisinin Özellikleri -> Hesabı Yerel Sistem Olarak Ayarla.

veya servis yükleyicinizin designer.cs dosyasında aşağıdaki değişikliği yaparak:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

1

serviceİn service.msc'ye sağ tıklayın ve seçin property.

Path to executableC: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe gibi bir klasör yolu göreceksiniz.

C: \ Users \ Me \ Desktop \ project \ Tor'a gidin ve Tor'a sağ tıklayın.

Seçip property, security, editve sonra add. Metin alanına girin LOCAL SERVICE, tamam'ı tıklayın ve ardından kutuyu işaretleyinFULL CONTROL

addTekrar tıklayın ve girin NETWORK SERVICE, tıklayın ok, kutuyu işaretleyinFULL CONTROL

Ardından tamam'ı tıklayın (altta)


0

Http://www.sysinternals.com adresinden bir göz atın Process Utilities > Process monitor. .

Bu, bir sürecin ne yaptığını izlemenizi sağlayan bir araçtır. Bu hizmet sürecini izlerseniz, bir yerde erişimin reddedildiğini ve erişimin hangi kaynakta reddedildiğini görmelisiniz.


0

Hata 5 için yukarıdaki çözümün tersini yaptım. "İlk Hata 5: Erişim Reddedildi hatası, NETWORK SERVICE hesabına çıktı dizinine izinler verilerek çözüldü."

Benimkini ağ hizmeti hesabı yerine yerel hesaba değiştirdim ve yönetici olarak oturum açtığım için çalıştı


0

Bir sunucu makinesinde bu hatayı alıyorsanız, gerçek Windows hizmeti exe'ye sahip olduğunuz klasöre erişim sağlamayı deneyin. Güvenlik sekmesine gidip Yerel Hizmeti kullanıcı olarak seçmeli ve tam erişim vermelisiniz. Exe için de aynısını yapmalısın.


0

İşlem izleyicisini kullanarak sppsvc.exe'yi izledim ve HKEY_LOCAL_MACHINE \ SYSTEM \ WPA anahtarına yazmaya çalıştığını öğrendim. Bu anahtarda NETWORK SERVICE'e izin verdikten sonra servisi başlatabildim ve Windows aniden tekrar etkinleştirildiğini fark etti.


0

Hizmetimi yanlışlıkla çalışacak şekilde ayarladım, çünkü Local serviceçözümLocal System


0

Bunu anlamaya çalışırken birkaç saat boyunca masama vurduktan sonra, bir şekilde "Ana" yöntemim kodundan kurtuldu!

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new DMTestService()
};
ServiceBase.Run(ServicesToRun);

Bulduğum diğer çözümler:

  • .NET çerçevesini 4.0'a güncelleme
  • InitializeComponent () içindeki hizmet adının yükleyici hizmet adı özelliğiyle eşleştiğinden emin olmak

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
    
  • Ve güzel bir sunucu yeniden başlatması zarar vermez

Szhlopp



0

Bugün geliştirmekte olduğum bir hizmette bu sorunu yaşadım ve bu soruyla ilgili diğer önerilerin hiçbiri işe yaramadı. Benim durumumda, hizmetin çalıştığı klasörde eksik bir .dll bağımlılığım vardı.

Bağımlılıkları eklediğimde sorun ortadan kalktı.


0

Benim durumumda projeyi masaüstünde tuttum ve masaüstüne erişmek için klasöre izin eklememiz gerekiyor, bu yüzden proje klasörümü C: \ dizinine taşıdım şimdi bir cazibe gibi çalışıyor.


0

Cevabımın birçok kişiye mantıklı gelip gelmeyeceğini bilmiyorum ama ben de aynı sorunla karşılaştım ve çözüm son derece basitti. Tek yapmam gereken, kodu yönetici olarak çalıştırmak için kullandığım programı açmaktı. (sağ tıklayın -> Yönetici Olarak Çalıştır).

Hepsi buydu.


0

Hata açılır penceresinin önerdiği gibi, bu izinle ilgilidir. Bu yüzden hizmeti "LocalSystem" hesabı olarak çalıştırın.

Aynısını yapmak için, Sağ Tıklayın serviceProcessInstaller -> Properties -> Accountve "LocalSystem"varsayılan yerine ayarlayın "User". Hizmeti ve işi yükleyin.


Bu kanıtlanmış bir çalışma çözümüdür ve herhangi bir çalışma değildir. Olumsuz seçmen lütfen başkalarının anlamasını istemediğinin nedenini açıklayabilir mi?
Sisir

0

ayrıntılı hata mesajı için Windows olay günlüğünü kontrol edin. Olay günlüğünü kontrol ettikten sonra aynısını çözdüm.


-1

Dağıtmakta olduğum bir hizmette bu sorunu yaşadım ve bu soruyla ilgili diğer önerilerin hiçbiri işe yaramadı. Benim durumumda, bunun nedeni .config (xml) bilgimin geçerli olmamasıydı. Qualif'ten prod'a kopyalarken kopyalama ve yapıştırma hatası yaptım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.