ข้อผิดพลาด 5: การเข้าถึงถูกปฏิเสธเมื่อเริ่มบริการ windows


98

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายามเริ่มบริการ windows ที่ฉันสร้างใน C #:

ข้อความแสดงแทน

รหัสของฉันจนถึงตอนนี้:

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

ฉันแก้ไขปัญหาข้างต้นโดยให้สิทธิ์แก่บัญชีNETWORK SERVICEแต่ตอนนี้ฉันมีปัญหาอื่น:

ข้อความแสดงแทน

อัปเดต # 2

ไม่สามารถเริ่มบริการได้ System.InvalidOperationException: Service 'RightAccessManagementWcf.RightAccessWcf' มีจุดสิ้นสุดของแอปพลิเคชันเป็นศูนย์ (ไม่ใช่โครงสร้างพื้นฐาน) อาจเป็นเพราะไม่พบไฟล์คอนฟิกูเรชันสำหรับแอ็พพลิเคชันของคุณหรือเนื่องจากไม่พบองค์ประกอบเซอร์วิสที่ตรงกับชื่อเซอร์วิสในไฟล์คอนฟิกูเรชันหรือเนื่องจากไม่มีการกำหนดจุดสิ้นสุดในองค์ประกอบเซอร์วิส ใน System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints (ServiceDescription description) ที่ System.ServiceModel.Description.DispatcherBuilderInitializeServiceHost (ServiceDescription description ServiceHostBase serviceHost) ที่ System.ServiceModel.Service.Service TimeSpan timeout) ที่ System.ServiceModel.Channels.CommunicationObject


2
ปัญหาที่สองของคุณไม่ใช่เรื่องง่ายที่จะแก้ไขจากข้อความนั้นเพียงอย่างเดียว คุณจะต้องดูในบันทึกเหตุการณ์ของคุณและดูว่าข้อผิดพลาดที่แท้จริงคืออะไร
Matt Ellen

1
ตรวจสอบว่าระบบเข้าถึงโฟลเดอร์ได้หรือไม่
DmitryBoyko

คำตอบ:


117

ฉันรู้ว่าโพสต์นี้เก่า แต่ไม่มีวิธีแก้ปัญหาใด ๆ และฉันแค่อยากจะบอกว่าฉันแก้ไขปัญหานี้อย่างไร

Error 5: Access Deniedข้อผิดพลาดแรกได้รับการแก้ไขโดยให้สิทธิ์แก่ไดเร็กทอรีเอาต์พุตไปยังไฟล์NETWORK SERVICEบัญชี

ที่สอง Started and then stoppedข้อผิดพลาดดูเหมือนจะเป็นข้อความทั่วไปเมื่อเกิดข้อผิดพลาดในบริการ ตรวจสอบ Event Viewer (โดยเฉพาะ 'Windows Logs> Application') สำหรับข้อความแสดงข้อผิดพลาดจริง

ในกรณีของฉันมันเป็นการตั้งค่าบริการที่ไม่ถูกต้องใน app.config


7
ฉันแก้ไขการอนุญาตโดยไปที่โฟลเดอร์โดยใช้ Explorer คลิกขวาคุณสมบัติความปลอดภัยจากนั้นกำหนดสิทธิ์ที่ถูกต้องให้กับบัญชี NETWORK SERVICE ในรายการชื่อผู้ใช้
Justin Skiles

ในกรณีของฉันเกี่ยวกับ "ข้อผิดพลาด 5" นั่นคือบริการเครือข่ายไม่มีสิทธิ์เข้าถึงโฟลเดอร์ของไฟล์ปฏิบัติการ เนื่องจากเป็นการพัฒนาฉันไม่ต้องการวางไฟล์ลงในโฟลเดอร์ Program File แต่เป็นโฟลเดอร์ที่ใช้ร่วมกันซึ่งฉันสามารถคัดลอกไฟล์จากเครื่อง dev ได้ การให้สิทธิ์บริการเครือข่ายในการอ่าน / ดำเนินการ / รายการควรจะดีพอ
ZZZ

5
ฉันเพิ่ม LOCAL SERVICE "และ" NETWORK SERVICE "ลงในโฟลเดอร์ bin \ Debug และใช้งานได้ขอบคุณ!
Hernaldo Gonzalez

3
เพียงแค่แจ้งให้ผู้คนทราบ: หากการเปลี่ยนสิทธิ์ไม่สามารถแก้ไขปัญหาของคุณได้โปรดตรวจสอบข้อผิดพลาดใน Event Viewer ฉันมีข้อผิดพลาด SQL ที่ไม่เกี่ยวข้องโดยสิ้นเชิงซึ่งทำให้บริการไม่สามารถเริ่มทำงานได้ แต่ยังคงให้ "ข้อผิดพลาด 5: การเข้าถึงถูกปฏิเสธ" ข้อผิดพลาด
dtryan

ขอขอบคุณสำหรับหมายเหตุเกี่ยวกับ "โปรแกรมดูเหตุการณ์" - เช่นเดียวกับฉันข้อผิดพลาดที่ไม่เกี่ยวข้อง "ไม่พบปลายทาง" แต่ถูกปลอมแปลงเป็น "การเข้าถึงถูกปฏิเสธ (5)"
David Votrubec

27

คอมพิวเตอร์ -> จัดการ -> บริการ -> คุณสมบัติ [บริการของคุณ] จากนั้นแท็บที่มีข้อมูลบัญชี เล่นกับการตั้งค่าเหล่านั้นเช่นเรียกใช้บริการด้วยบัญชีผู้ดูแลระบบหรือมากกว่านั้น

ที่ทำเพื่อฉัน

แก้ไข: สิ่งที่อาจเป็นปัญหาก็คือบริการส่วนใหญ่ทำงานเป็นLOCAL SERVICEหรือLOCAL SYSTEMบัญชี ตอนนี้เมื่อคุณทำงานC:/my-admin-dir/service.exeกับบัญชีเหล่านั้น error 5แต่พวกเขาจะไม่ได้รับอนุญาตให้ดำเนินการอะไรในไดเรกทอรีที่คุณจะได้รับ ดังนั้นค้นหาไฟล์ปฏิบัติการของบริการ RMB ไดเร็กทอรี -> คุณสมบัติ -> ความปลอดภัยและตรวจสอบให้แน่ใจว่าบัญชีที่ใช้บริการนั้นอยู่ในรายชื่อผู้ใช้ที่ได้รับการจัดสรรเพื่อให้สามารถควบคุมไดเร็กทอรีได้อย่างสมบูรณ์


21

สิ่งนี้ได้ผลสำหรับฉัน

  1. คลิกขวาที่โฟลเดอร์ระดับบนสุดที่มีบริการปฏิบัติการ ไปที่คุณสมบัติ
  2. ไปที่แท็บ "ความปลอดภัย"
  3. คลิก "แก้ไข"
  4. คลิก "เพิ่ม"
  5. ป้อนชื่อ "SYSTEM" คลิกตกลง
  6. ไฮไลต์ผู้ใช้ระบบแล้วคลิกช่องทำเครื่องหมายอนุญาตที่อยู่ถัดจาก "ควบคุมทั้งหมด"
  7. คลิกตกลงสองครั้ง

11
"ระบบ" ไม่ได้ผลสำหรับฉันฉันแค่เล่นการพนันและลองใช้ "บริการ" - นั่นเป็นเคล็ดลับ
Exter

4
การเพิ่ม "SERVICE" และให้ "การควบคุมทั้งหมด" ใช้ได้ผลสำหรับฉัน - Windows 10
Fredrik

เนื่องจากคุณสมบัติบัญชีของ ServiceProcessInstaller ของฉัน (ใน ProjectInstaller ของฉัน) ถูกตั้งค่าเป็น LocalService ฉันจึงให้สิทธิ์แบบเต็มแก่บัญชี Local Service และนั่นก็เป็นเคล็ดลับ!
Dave

14

ฉันยังได้รับข้อผิดพลาดเดียวกันซึ่งแก้ไขได้โดยคลิกขวาที่บริการ> คุณสมบัติ> เข้าสู่ระบบ> เข้าสู่ระบบด้วย: บัญชีระบบภายใน


ขอบคุณ. ฉันมีปัญหากับ tor.exe - การเริ่มบริการและตอนนี้มันใช้งานได้ดี!
Arman Karimi

ทำงานให้ฉัน อย่างไรก็ตามมีการระบุสิ่งนี้โดยทางโปรแกรมหรือไม่
Sisir

เข้าใจแล้ว คลิกขวา serviceProcessInstaller -> Properties -> Account และตั้งค่าเป็น "LocalSystem" แทนค่าเริ่มต้น "User" ติดตั้งบริการและ voila
Sisir

10

ตรวจสอบให้แน่ใจว่าPath to executableชี้ไปที่ปฏิบัติการจริง (คลิกขวาบริการ -> คุณสมบัติ -> แท็บทั่วไป) ผ่าน powershell (และ sc.exe) คุณสามารถติดตั้งบริการโดยไม่ต้องชี้ไปที่ปฏิบัติการจริง ... อะแฮ่ม


ฉันบังเอิญทิ้งโฟลเดอร์ไว้ที่นั่นแทนที่จะเป็นไฟล์. exe ในการแก้ไขปัญหานี้ฉันต้อง "sc ลบ servicenameXYZ" + รีสตาร์ทเซิร์ฟเวอร์เพื่อลบบริการทั้งหมดและติดตั้งไฟล์. exe บริการที่ถูกต้องใหม่ จากนั้นมันจะเริ่มต้นอย่างมีเสน่ห์ ขอบคุณสำหรับโพสต์นี้
Honza P.

คุณช่วยฉันไว้! การกำหนดโฟลเดอร์แทนที่จะเป็นเส้นทางแบบเต็มที่เรียกใช้งานได้ ... อ๊ากกก! น่าจะดูดีกว่านี้ ...
ilter

9

ฉันมีทางออก:

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"

ตอนนี้คุณสามารถลองเริ่มบริการได้


1
ฉันเลือก "บัญชีระบบภายใน" แล้วและยังคงได้รับข้อความ
user2568374

6

ผมได้รับข้อผิดพลาดนี้เพราะผมผิดคำตอบที่ได้รับการยอมรับจากที่นี่: สร้างบริการ Windows จากปฏิบัติการ

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

สำหรับ<path_to_service_executable>ฉันใช้เส้นทางของโฟลเดอร์ปฏิบัติการเช่นC:\Folder.

จะต้องมีเส้นทางของการปฏิบัติการC:\Folder\Executable.exeเช่น


4

ในกรณีของฉันต่อไปนี้ไม่ได้รับการตรวจสอบ

ป้อนคำอธิบายภาพที่นี่


2
สำหรับผู้อ่านคนอื่น ๆ เช่นฉัน: ภาพหน้าจอนี้เป็นส่วนหนึ่งของหน้าต่างคุณสมบัติบริการ! เปิดหน้าต่างบริการ (เรียกใช้: services.msc) และเลือกคุณสมบัติจากเมนูบริบทซึ่งปรากฏขึ้นหลังจากคลิกขวาที่บริการ!
MohaMad

3

สำหรับฉัน - โฟลเดอร์ที่เรียกใช้บริการและไฟล์ในนั้นถูกเข้ารหัสโดยใช้ตัวเลือก "เข้ารหัส" ของ Windows การลบสิ่งนั้นและ - voila!


สิ่งนี้กลายเป็นปัญหาสำหรับฉัน - ผู้ดูแลระบบตัวตลกบนเซิร์ฟเวอร์ที่ฉันใช้อยู่ได้บิดลูกบิดบางอย่างเพื่อให้ไดเรกทอรีทั้งหมดมีการเข้ารหัส NTFS ตามค่าเริ่มต้นดังนั้น LocalSystem จึงไม่มีคีย์การเข้ารหัสเพื่ออ่าน ...
KJ Tsanaktsidis

3

ข้อผิดพลาดนี้เกิดขึ้นเมื่อมีข้อผิดพลาดในOnStartวิธีการของคุณ คุณไม่สามารถเปิดโฮสต์ได้โดยตรงในOnStartวิธีการเนื่องจากจะไม่เปิดจริงเมื่อถูกเรียกใช้ แต่จะรอการควบคุมแทน ดังนั้นคุณต้องใช้ด้าย นี่คือตัวอย่างของฉัน

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. อาจเป็นไปได้ว่าในรหัสของคุณบริการของคุณพยายามโต้ตอบกับไฟล์บางไฟล์ในระบบเช่นการเขียนลงในไฟล์บันทึก

เปิดlog onแท็บคุณสมบัติบริการและเลือกตัวเลือกเพื่ออนุญาตให้บริการโต้ตอบกับเดสก์ท็อป คลิกอนุญาตให้บริการโต้ตอบกับเดสก์ท็อป


3

ในกรณีของฉันฉันต้องเพิ่ม 'Authenticated Users' ในรายการ 'Group or User Names' ในโฟลเดอร์ที่ติดตั้งไฟล์ปฏิบัติการ


3

สาเหตุหนึ่งของข้อผิดพลาดนี้คือสิทธิ์ไม่เพียงพอ (ผู้ใช้ที่พิสูจน์ตัวตน) ในโฟลเดอร์ภายในเครื่องของคุณ ในการให้สิทธิ์สำหรับ 'Authenticated Users' เปิดแท็บความปลอดภัยในคุณสมบัติของโฟลเดอร์ของคุณแก้ไขและเพิ่มกลุ่ม 'Authenticated Users' และใช้การเปลี่ยนแปลง

เมื่อเสร็จแล้วฉันสามารถเรียกใช้บริการได้แม้ผ่านบัญชีบริการเครือข่าย (ก่อนหน้านี้ฉันสามารถเรียกใช้ด้วยบัญชีระบบภายในเครื่องเท่านั้น)


2

ฉันมีบริการ windows ที่โฮสต์โดยใช้ OWIN และ TopShelf ฉันไม่สามารถเริ่มต้นได้ ข้อผิดพลาดเดียวกัน - "การเข้าถึงถูกปฏิเสธ 5"

ฉันลงเอยด้วยการให้ perms ทั้งหมดกับ bin / Debug ของฉัน

ปัญหายังคงไม่ได้รับการแก้ไข

ดังนั้นฉันจึงดูในบันทึกเหตุการณ์และปรากฎว่าMicrosoft.Owin.Host.HttpListenerไม่รวมอยู่ในไลบรารีคลาสที่มีคลาสเริ่มต้น OWIN

ดังนั้นโปรดตรวจสอบบันทึกเหตุการณ์เพื่อระบุสาเหตุที่แท้จริงก่อนที่จะเริ่มเข้าสู่ perms เป็นต้น


2
จุดดี - ข้อผิดพลาด "การเข้าถึงถูกปฏิเสธ" อาจไม่เกี่ยวข้องกับสิทธิ์ ตรวจสอบบันทึกแอปพลิเคชันใน Event Viewer เสมอ
mhenry1384

สวัสดีฉันยังตรวจสอบเกี่ยวกับเรื่องนี้ซึ่งเป็น `\ เส้นทาง logs` ฉันกำลังเข้าสู่ระบบนี้จาก topshelf แต่ไม่ได้มี.
หม้อแปลง

1

รหัสของคุณอาจทำงานในบริบทความปลอดภัยของผู้ใช้ที่ไม่ได้รับอนุญาตให้เริ่มบริการ

เนื่องจากคุณใช้ WCF ฉันเดาว่าคุณอยู่ในบริบทของ NETWORK SERVICE

ดู: http://support.microsoft.com/kb/256299


1
ฉันให้สิทธิ์ "LOCAL SERVICE" และ "NETWORK SERVICE" ในไดเรกทอรีผลลัพธ์ของฉัน
Kris-I

คุณต้องกำหนดนโยบายกลุ่มสำหรับบริการระบบsupport.microsoft.com/kb/256345/EN-US
Shiraz Bhaiji

1

ใช้บัญชี LocalSystem แทนบัญชี LocalService ใน Service Installer

คุณสามารถทำได้จากการเปลี่ยนแปลงด้านล่างในมุมมองการออกแบบของโปรแกรมติดตั้งบริการของคุณ:
คุณสมบัติของโปรแกรมติดตั้งกระบวนการบริการ -> ตั้งค่าบัญชีเป็น LocalSystem

หรือทำการเปลี่ยนแปลงด้านล่างในไฟล์ designer.cs ของโปรแกรมติดตั้งบริการของคุณ:

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

1

คลิกขวาที่serviceใน service.msc propertyและเลือก

คุณจะเห็นเส้นทางโฟลเดอร์ภายใต้Path to executableเช่น C: \ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exe

ไปที่ C: \ Users \ Me \ Desktop \ project \ Tor แล้วคลิกขวาที่ Tor

เลือกproperty, security, และจากนั้นedit addในช่องข้อความLOCAL SERVICEให้คลิกตกลงจากนั้นทำเครื่องหมายที่ช่องFULL CONTROL

คลิกaddอีกครั้งจากนั้นป้อนNETWORK SERVICEคลิกokทำเครื่องหมายในช่องFULL CONTROL

จากนั้นคลิกตกลง (ที่ด้านล่าง)


0

มีลักษณะที่Process Utilities > Process monitorจากhttp://www.sysinternals.com

นี่คือเครื่องมือที่ช่วยให้คุณตรวจสอบว่ากระบวนการทำอะไร หากคุณตรวจสอบกระบวนการบริการนี้คุณควรเห็นการเข้าถึงถูกปฏิเสธจากที่ใดที่หนึ่งและทรัพยากรใดที่การเข้าถึงถูกปฏิเสธจะได้รับ


0

สำหรับข้อผิดพลาด 5 ฉันทำตรงกันข้ามกับวิธีแก้ไขปัญหาด้านบน "ข้อผิดพลาด 5 ข้อแรก: ข้อผิดพลาดถูกปฏิเสธการเข้าถึงได้รับการแก้ไขโดยให้สิทธิ์แก่ไดเรกทอรีผลลัพธ์ไปยังบัญชี NETWORK SERVICE"

ฉันเปลี่ยนของฉันเป็นบัญชีท้องถิ่นแทนที่จะเป็นบัญชีบริการเครือข่ายและเนื่องจากฉันเข้าสู่ระบบในฐานะผู้ดูแลระบบจึงใช้งานได้


0

หากคุณได้รับข้อผิดพลาดนี้บนเครื่องเซิร์ฟเวอร์ลองให้สิทธิ์เข้าถึงโฟลเดอร์ที่คุณได้รับ exe บริการ windows จริง คุณควรไปที่แท็บความปลอดภัยและเลือก Local Service ในฐานะผู้ใช้และควรให้สิทธิ์เข้าถึงอย่างเต็มที่ คุณควรทำเช่นเดียวกันสำหรับ exe ด้วย


0

ฉันได้ตรวจสอบ sppsvc.exe โดยใช้การตรวจสอบกระบวนการและพบว่ามันพยายามเขียนลงในคีย์ HKEY_LOCAL_MACHINE \ SYSTEM \ WPA หลังจากให้สิทธิ์ NETWORK SERVICE บนคีย์นี้ฉันสามารถเริ่มบริการได้และ Windows ก็จำได้ทันทีว่ามีการเปิดใช้งานอีกครั้ง


0

ฉันตั้งค่าบริการของฉันให้ทำงานโดยบังเอิญเนื่องจากLocal serviceวิธีแก้ปัญหาคือการเปลี่ยนไปใช้Local System


0

หลังจากทะเลาะกับโต๊ะทำงานของฉันไม่กี่ชั่วโมงพยายามคิดออกวิธี "หลัก" ของฉันก็หมดรหัส!

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

วิธีแก้ปัญหาอื่น ๆ ที่ฉันพบ:

  • การอัปเดต. NET framework เป็น 4.0
  • ตรวจสอบให้แน่ใจว่าชื่อบริการภายใน InitializeComponent () ตรงกับคุณสมบัติชื่อบริการของโปรแกรมติดตั้ง

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
    
  • และการรีสตาร์ทเซิร์ฟเวอร์ที่ดีก็ไม่เจ็บ

Szhlopp



0

วันนี้ฉันพบปัญหานี้เกี่ยวกับบริการที่ฉันกำลังพัฒนาและข้อเสนอแนะอื่น ๆ เกี่ยวกับคำถามนี้ไม่ได้ผล ในกรณีของฉันฉันมีการอ้างอิง. dll ที่ขาดหายไปในโฟลเดอร์ที่บริการเรียกใช้

เมื่อฉันเพิ่มการอ้างอิงปัญหาก็หายไป


0

ในกรณีของฉันฉันเก็บโปรเจ็กต์ไว้บนเดสก์ท็อปและในการเข้าถึงเดสก์ท็อปเราจำเป็นต้องเพิ่มสิทธิ์ให้กับโฟลเดอร์ดังนั้นฉันจึงย้ายโฟลเดอร์โปรเจ็กต์ของฉันไปที่ไดเร็กทอรี C: \ ตอนนี้มันทำงานได้อย่างมีเสน่ห์


0

ฉันไม่รู้ว่าคำตอบของฉันจะสมเหตุสมผลกับหลาย ๆ คนหรือไม่ แต่ฉันก็ประสบปัญหาเดียวกันเช่นกันและวิธีแก้ปัญหาก็ง่ายมาก สิ่งที่ฉันต้องทำคือเปิดโปรแกรมที่ฉันใช้ในการรันโค้ดในฐานะผู้ดูแลระบบ (คลิกขวา -> Run as Administrator)

นั่นคือทั้งหมด


0

ตามที่ป๊อปอัปแสดงข้อผิดพลาดนี้เกี่ยวข้องกับการอนุญาต ดังนั้นเรียกใช้บริการเป็นบัญชี "LocalSystem"

จะทำเช่นเดียวกันคลิกขวาบนserviceProcessInstaller -> Properties -> Accountและตั้งค่าให้แทนการเริ่มต้น"LocalSystem" "User"ติดตั้งบริการและ voila


นี่เป็นการแก้ไขปัญหาที่ได้รับการพิสูจน์แล้วและไม่ใช่วิธีแก้ปัญหาใด ๆ ผู้ลงคะแนนโปรดอธิบายเหตุผลของการไม่ชอบให้ผู้อื่นเข้าใจ
Sisir

0

ตรวจสอบบันทึกเหตุการณ์ของ windows สำหรับข้อความแสดงข้อผิดพลาดโดยละเอียด ฉันแก้ไขสิ่งเดียวกันนี้หลังจากตรวจสอบบันทึกเหตุการณ์


-1

ฉันมีปัญหานี้กับบริการที่ฉันกำลังปรับใช้และคำแนะนำอื่น ๆ สำหรับคำถามนี้ไม่ได้ผล ในกรณีของฉันเป็นเพราะ. config (xml) ของฉันไม่ถูกต้อง ฉันทำสำเนาและวางข้อผิดพลาดเมื่อคัดลอกจาก qualif เป็น prod

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.