Kesalahan 5: Akses Ditolak saat memulai layanan windows

97

Saya mendapatkan kesalahan ini ketika saya mencoba untuk memulai layanan windows yang saya buat di C #:

teks alt

Kode Saya sejauh ini:

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;
}

Perbarui # 1

Saya memecahkan masalah di atas dengan memberikan izin ke akun NETWORK SERVICE tetapi sekarang saya memiliki masalah lain:

teks alt

Perbarui # 2

Layanan tidak dapat dimulai. System.InvalidOperationException: Layanan 'RightAccessManagementWcf.RightAccessWcf' tidak memiliki titik akhir aplikasi (non-infrastruktur). Hal ini mungkin karena tidak ada file konfigurasi yang ditemukan untuk aplikasi Anda, atau karena tidak ada elemen layanan yang cocok dengan nama layanan yang dapat ditemukan di file konfigurasi, atau karena tidak ada titik akhir yang ditentukan dalam elemen layanan. di System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (deskripsi ServiceDescription) di System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost (deskripsi ServiceDescription, ServiceHostBase serviceHost) di System.ServiceModel.ServiceHostize.Suntime TimeSpan timeout) di System.ServiceModel.Channels.CommunicationObject.

Kris-I
sumber
2
Masalah kedua Anda tidak mudah dipecahkan hanya dari pesan itu. Anda perlu melihat log acara Anda dan melihat apa kesalahan sebenarnya.
Matt Ellen
1
Periksa apakah akun Sistem memiliki akses ke folder tersebut.
Pengembang

Jawaban:

116

Saya menyadari posting ini sudah tua, tetapi tidak ada solusi yang ditandai dan saya hanya ingin menjelaskan bagaimana saya menyelesaikan ini.

Error 5: Access DeniedKesalahan pertama diselesaikan dengan memberikan izin ke direktori keluaran ke NETWORK SERVICEakun.

Started and then stoppedKesalahan kedua tampaknya menjadi pesan umum ketika ada yang salah dengan layanan. Periksa Event Viewer (khususnya 'Windows Logs> Application') untuk pesan kesalahan yang sebenarnya.

Dalam kasus saya, itu adalah pengaturan konfigurasi layanan yang buruk di app.config.

Justin Skiles
sumber
7
Saya mengubah izin dengan menavigasi ke folder menggunakan Explorer, klik kanan, Properti, Keamanan, dan kemudian memberikan izin yang benar ke akun LAYANAN JARINGAN dalam daftar nama pengguna.
Justin Skiles
Dalam kasus saya tentang "Kesalahan 5", itu Layanan Jaringan tidak memiliki hak akses ke folder yang dapat dieksekusi. Karena ini untuk pengembangan, saya tidak ingin menempatkan file ke dalam folder Program File tetapi folder bersama yang dapat saya salin file dari mesin dev. Pemberian Network Service hak Read / Execute / List sudah cukup baik.
ZZZ
5
Saya Menambahkan LAYANAN LOKAL "dan" LAYANAN JARINGAN "ke folder bin \ Debug saya dan berfungsi, Terima kasih!
Hernaldo Gonzalez
3
Hanya catatan untuk orang-orang: jika mengubah izin tidak memperbaiki masalah Anda, pastikan untuk memeriksa kesalahan pada Event Viewer. Saya memiliki kesalahan SQL yang sama sekali tidak terkait yang mencegah layanan untuk memulai tetapi masih memberi saya "Kesalahan 5: Akses ditolak." kesalahan.
dtryan
Terima kasih atas catatan tentang "Penampil acara" - sama dengan saya, kesalahan tidak terkait "Titik akhir tidak ditemukan" tetapi disamarkan sebagai "Akses Ditolak (5)"
David Votrubec
26

Komputer -> Kelola -> Layanan -> properti [layanan Anda]. Kemudian tab dengan informasi akun. Bermain dengan pengaturan tersebut, seperti menjalankan layanan dengan akun administrator atau lebih.

Itu berhasil untuk saya.

EDIT: Yang juga bisa menjadi masalah adalah, sebagian besar layanan dijalankan sebagai LOCAL SERVICEatau LOCAL SYSTEMakun. Sekarang ketika Anda menjalankan C:/my-admin-dir/service.exedengan akun-akun itu tetapi mereka tidak diizinkan untuk mengeksekusi apa pun di direktori itu, Anda akan mendapatkannya error 5. Jadi cari layanan yang dapat dieksekusi, RMB direktori -> Properti -> Keamanan dan pastikan bahwa akun tempat layanan dijalankan, ada dalam daftar pengguna yang diizinkan untuk memiliki kendali penuh atas direktori.

Mike de Klerk
sumber
21

Ini berhasil untuk saya.

  1. Klik kanan pada folder tingkat atas yang berisi layanan yang dapat dijalankan. Pergi ke Properties
  2. Buka Tab "Keamanan"
  3. Klik "EDIT"
  4. Klik "TAMBAH"
  5. Masukkan nama "SISTEM", klik OK
  6. Sorot pengguna SISTEM, dan klik kotak centang IZINKAN di samping "Kontrol penuh"
  7. Klik OK dua kali
cmcginty.dll
sumber
11
"SISTEM" tidak berhasil untuk saya, saya hanya berjudi dan mencoba "LAYANAN" - itu berhasil.
Exter
4
Menambahkan "SERVICE" dan memberikannya "Kontrol Penuh" berhasil untuk saya - Windows 10.
Fredrik
Karena properti Akun ServiceProcessInstaller saya (di ProjectInstaller saya) disetel ke Layanan Lokal, saya memberikan izin penuh ke akun Layanan Lokal dan itu berhasil!
Dave
14

Saya juga mendapat kesalahan yang sama, Ini diselesaikan dengan klik kanan pada Layanan> Properti> Masuk> masuk sebagai: Akun Sistem Lokal.

Asmita Chavan
sumber
Terima kasih. Saya punya masalah dengan tor.exe --service start, dan sekarang berfungsi dengan sangat baik!
Arman Karimi
Bekerja untuk saya. Namun, adakah cara untuk menentukan ini secara terprogram?
Sisir
Mengerti. Klik kanan serviceProcessInstaller -> Properties -> Account dan atur ke "LocalSystem" bukan default "User". Instal layanan dan voila.
Sisir
10

Pastikan Path to executablepoin - poinnya benar-benar dapat dieksekusi (klik kanan service -> Properties -> tab General). Melalui PowerShell (dan sc.exe) Anda dapat menginstal layanan tanpa menunjuk ke eksekusi ... ahem.

Aage
sumber
Saya tidak sengaja meninggalkan folder, bukan file .exe. Untuk memperbaiki masalah ini saya harus "sc delete servicenameXYZ" + restart server untuk menghapus layanan sepenuhnya dan menginstal ulang file layanan .exe yang benar. Kemudian itu dimulai seperti pesona. Terima kasih untuk posting ini.
Honza P.
Kamu menyelamatkanku! Menetapkan folder, bukannya path lengkap yang bisa dieksekusi ... Arghhhh! Seharusnya terlihat lebih baik ...
ilter
9

Saya mendapat solusinya:

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"

sekarang Anda dapat mencoba memulai layanan.

John
sumber
1
Saya sudah memilih "Akun sistem lokal" dan masih menerima pesan.
pengguna2568374
4

Dalam kasus saya berikut ini tidak diperiksa.

masukkan deskripsi gambar di sini

Akshay Anand
sumber
2
Untuk pembaca lain seperti saya: Tangkapan layar ini adalah bagian dari jendela properti layanan! Buka jendela Services (Run: services.msc) dan pilih Properties dari menu konteks yang muncul setelah klik kanan pada layanan!
MohaMad
4

Saya mendapatkan kesalahan ini karena saya salah membaca jawaban yang diterima dari sini: Buat layanan Windows dari yang dapat dieksekusi .

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

Karena <path_to_service_executable>, saya menggunakan jalur folder yang dapat dieksekusi, mis C:\Folder.

Ini harus menjadi jalur yang dapat dieksekusi , misalnya C:\Folder\Executable.exe.

Jamie Butterworth
sumber
3

Bagi saya - folder tempat layanan dijalankan, dan file di dalamnya, dienkripsi menggunakan opsi "Enkripsi" Windows. Menghapus itu dan - voila!

Nicholas Blumhardt
sumber
Ini ternyata menjadi masalah bagi saya - sysadmin badut di server yang saya gunakan telah memutar beberapa tombol untuk membuat semua direktori memiliki enkripsi NTFS secara default, sehingga LocalSystem tidak benar-benar memiliki kunci enkripsi untuk membacanya ...
KJ Tsanaktsidis
3

Kesalahan ini terjadi jika ada kesalahan dalam OnStartmetode Anda . Anda tidak dapat membuka host secara langsung dalam OnStartmetode karena ia tidak akan benar-benar terbuka saat dipanggil, tetapi ia akan menunggu kontrol. Jadi, Anda harus menggunakan utas. Ini contoh saya.

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();
    }
}
santhosh
sumber
3

jika Anda memiliki kode kesalahan 5. akses ditolak maka mungkin dalam kode Anda layanan Anda mencoba untuk berinteraksi dengan beberapa file dalam sistem seperti menulis ke file log

buka log ontab pilih properti layanan dan centang opsi untuk mengizinkan layanan berinteraksi dengan desktop, klik izinkan layanan untuk berinteraksi dengan desktop

kudzai zishumba
sumber
3

Salah satu penyebab kesalahan ini adalah izin yang tidak memadai (Pengguna yang Diotentikasi) di folder lokal Anda. Untuk memberikan izin bagi 'Pengguna yang Diautentikasi' Buka tab keamanan di properti folder Anda, Edit dan Tambahkan grup 'Pengguna yang Diautentikasi' dan Terapkan perubahan.

Setelah ini selesai, saya dapat menjalankan layanan bahkan melalui akun layanan jaringan (sebelum ini saya hanya dapat menjalankan dengan akun sistem Lokal).

Vijay kumar.S
sumber
2

Saya memiliki layanan windows yang dihosting menggunakan OWIN dan TopShelf. Saya tidak bisa memulainya. Kesalahan yang sama - "Akses ditolak 5"

Saya akhirnya memberikan semua izin ke bin / Debug saya.

Masalahnya masih belum terselesaikan.

Jadi saya melihat log acara dan ternyata Microsoft.Owin.Host.HttpListenertidak termasuk dalam perpustakaan kelas yang berisi kelas start up OWIN.

Jadi, pastikan Anda memeriksa log peristiwa untuk mengidentifikasi akar masalah sebelum mulai masuk ke perm, dll.

Pengguna SO
sumber
2
Poin bagus - kesalahan "akses ditolak" mungkin tidak ada hubungannya dengan izin; selalu periksa log aplikasi di Event Viewer.
mhenry1384
hai, saya juga memeriksa ini, di mana jalur `. \ logs` Saya masuk ke ini dari rak paling atas tetapi tidak ada
transformator
2

Dalam kasus saya, saya harus menambahkan 'Pengguna yang Diotentikasi' dalam daftar 'Nama Grup atau Pengguna' di folder tempat eksekusi diinstal.

Sankar
sumber
1

Kode Anda mungkin berjalan dalam konteks keamanan pengguna yang tidak diizinkan untuk memulai layanan.

Karena Anda menggunakan WCF, saya menduga Anda berada dalam konteks LAYANAN JARINGAN.

lihat: http://support.microsoft.com/kb/256299

Shiraz Bhaiji
sumber
1
Saya memberikan hak "LAYANAN LOKAL" dan "LAYANAN JARINGAN" pada direktori keluaran saya
Kris-I
Anda juga perlu menetapkan kebijakan grup untuk layanan sistem, support.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji
1

Gunakan Akun Sistem Lokal, bukan Akun Layanan Lokal di Pemasang Layanan.

Anda dapat melakukan ini baik dari melakukan perubahan di bawah ini dalam tampilan desain penginstal layanan Anda:
Properti Penginstal Proses Layanan -> Setel Akun ke Sistem Lokal.

atau dengan melakukan perubahan di bawah ini dalam file designer.cs dari penginstal layanan Anda:

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
Jay Shah
sumber
1

Klik kanan pada servicein service.msc dan pilih property.

Anda akan melihat jalur folder di bawah Path to executableseperti C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

Arahkan ke C: \ Users \ Me \ Desktop \ project \ Tor dan klik kanan pada Tor.

Pilih property, security, editdan kemudian add. Di kolom teks enter LOCAL SERVICE, klik ok lalu centang kotaknyaFULL CONTROL

Klik addlagi lalu masuk NETWORK SERVICE, klik ok, centang kotakFULL CONTROL

Lalu klik ok (di bagian bawah)

MagTun
sumber
0

Lihat Process Utilities > Process monitordari http://www.sysinternals.com .

Ini adalah alat yang memungkinkan Anda memantau apa yang dilakukan suatu proses. Jika Anda memantau proses layanan ini, Anda akan melihat akses ditolak di suatu tempat, dan pada sumber daya apa akses ditolak diberikan.

Pieter van Ginkel
sumber
0

Untuk kesalahan 5, saya melakukan kebalikan dari solusi di atas. "Kesalahan pertama 5: Kesalahan Akses Ditolak diselesaikan dengan memberikan izin ke direktori keluaran ke akun LAYANAN JARINGAN."

Saya mengubah milik saya ke akun lokal, bukan akun layanan jaringan, dan karena saya masuk sebagai administrator, itu berfungsi

Chris
sumber
0

Jika Anda mendapatkan kesalahan ini pada mesin server coba berikan akses ke folder yang Anda dapatkan exe layanan windows yang sebenarnya. Anda harus pergi ke tab keamanan dan memilih Layanan Lokal sebagai pengguna dan harus memberikan akses penuh. Anda juga harus melakukan hal yang sama untuk exe.

Darshana
sumber
0

Saya telah memantau sppsvc.exe menggunakan monitor proses dan menemukan bahwa itu mencoba untuk menulis ke kunci HKEY_LOCAL_MACHINE \ SYSTEM \ WPA. Setelah memberikan izin ke LAYANAN JARINGAN pada kunci ini, saya dapat memulai layanan dan Windows tiba-tiba mengenali bahwa itu diaktifkan lagi.

Guilherme Noronha
sumber
0

Saya tidak sengaja mengatur layanan saya untuk dijalankan sebagai Local servicesolusi untuk beralih keLocal System

meda
sumber
0

Setelah membenturkan tangan saya ke meja saya selama beberapa jam mencoba mencari tahu, entah bagaimana metode "Utama" saya dikosongkan dari kodenya!

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

Solusi lain yang saya temukan:

  • Memperbarui kerangka kerja .NET ke 4.0
  • Memastikan nama layanan di dalam InitializeComponent () cocok dengan properti nama layanan penginstal

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • Dan restart server yang bagus tidak ada salahnya

Szhlopp

Szhlopp
sumber
0

Dalam kasus mungkin sistem kehabisan ruang kosong pada disk lokal.

Alexander Puchkov
sumber
0

Saya mengalami masalah ini hari ini pada layanan yang saya kembangkan, dan tidak ada saran lain tentang pertanyaan ini yang berhasil. Dalam kasus saya, saya memiliki ketergantungan .dll yang hilang di folder tempat layanan dijalankan.

Ketika saya menambahkan dependensi, masalahnya hilang.

Frank Bryce
sumber
0

Dalam kasus saya, saya menyimpan proyek di desktop dan untuk mengakses desktop kami perlu menambahkan izin ke folder jadi saya cukup memindahkan folder proyek saya ke direktori C: \ sekarang berfungsi seperti pesona.

Ali786
sumber
0

Saya tidak tahu apakah jawaban saya masuk akal bagi banyak orang, tetapi saya juga menghadapi masalah yang sama dan solusinya sangat sederhana. Yang harus saya lakukan adalah membuka program yang saya gunakan untuk menjalankan kode sebagai administrator. (klik kanan -> Jalankan sebagai Administrator).

Itu saja.

Rai
sumber
0

Seperti yang ditunjukkan oleh popup kesalahan ini terkait dengan izin. Jadi jalankan layanan sebagai akun "LocalSystem".

Untuk melakukan hal yang sama, Klik Kanan serviceProcessInstaller -> Properties -> Accountdan setel ke "LocalSystem"alih-alih default "User". Instal layanan dan voila.

Sisir
sumber
Ini adalah perbaikan yang terbukti berfungsi dan bukan solusi apa pun. Bisakah down-voter menjelaskan alasan tidak suka agar orang lain mengerti
Sisir
0

periksa log peristiwa windows untuk pesan kesalahan rinci. Saya menyelesaikan hal yang sama setelah memeriksa log peristiwa.

Amrik Singh
sumber
-1

Saya mengalami masalah ini pada layanan yang saya terapkan, dan tidak ada saran lain tentang pertanyaan ini yang berhasil. Dalam kasus saya, itu karena .config (xml) saya tidak valid. Saya membuat kesalahan salin dan tempel saat menyalin dari qualif ke prod.

SabineA
sumber