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.


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.


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.


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

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.


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.


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.


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


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.


3

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


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

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


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).


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.


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.



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;

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)


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.


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


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.


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.


0

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


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



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.


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.


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.


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.


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.


-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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.