Sửa lỗi 'System error 5: Access is denied' Khi Khởi Động hoặc Dừng Windows Service

beginner🪟 Windows2026-04-08| Windows 10, Windows 11, Windows Server 2016/2019/2022 — CMD hoặc PowerShell chạy không có quyền Administrator

Error Message

System error 5 has occurred. Access is denied.
#windows#service#access-denied#admin#cmd

Tình huống xảy ra

2 giờ sáng. Một service vừa crash trên Windows server. Bạn mở CMD, gõ lệnh quen thuộc:

net stop MyService
net start MyService

Và nhận ngay cái tát:

System error 5 has occurred.
Access is denied.

Hoặc bạn thử dùng sc:

sc stop MyService
[SC] OpenService FAILED 5:
Access is denied.

Vẫn bức tường đó. Service vẫn chết, incident vẫn còn mở, và thời gian đang cạn dần.

Tại sao lỗi này xảy ra

Error 5 là cách Windows nói rằng tiến trình đang gọi Service Control Manager (SCM) không có đủ quyền. Có hai nguyên nhân chính:

  • Bạn đang chạy CMD với tư cách user thường — dù tài khoản của bạn thuộc nhóm Administrators, UAC vẫn gỡ bỏ admin token theo mặc định. Thực tế bạn đang hoạt động như một user bình thường cho đến khi bạn chủ động nâng quyền.
  • Service có phân quyền bị khóa chặt — một số service (antivirus, EDR agent, Windows Defender) chặn tường minh việc start/stop đối với tất cả mọi người, ngoại trừ SYSTEM hoặc một tài khoản service cụ thể.

Chín phần mười là do nguyên nhân đầu tiên. Bạn đã mở CMD từ Start menu hoặc shortcut trên desktop mà không click chuột phải.

Cách sửa nhanh: Elevated CMD

Xử lý được 90% trường hợp. Mất khoảng 10 giây.

Cách 1 — Nâng quyền bằng chuột phải

  • Nhấn Win, gõ cmd
  • Chuột phải vào Command PromptRun as administrator
  • Chấp nhận UAC prompt
  • Thử lại lệnh:
net stop MyService
net start MyService

Thanh tiêu đề sẽ hiển thị "Administrator: Command Prompt" — đó là xác nhận bạn đã được nâng quyền.

Cách 2 — PowerShell một dòng (không cần giao diện đồ họa)

Đang kẹt trong terminal chưa được nâng quyền? Khởi chạy một CMD đã nâng quyền từ đó:

Start-Process cmd -Verb RunAs -ArgumentList '/k sc stop MyService'

Để dừng và khởi động lại trong một lần:

Start-Process cmd -Verb RunAs -ArgumentList '/k net stop MyService && net start MyService'

Cách 3 — Dùng cmdlet PowerShell gốc

Stop-Service -Name "MyService" -Force
Start-Service -Name "MyService"

Stop-ServiceStart-Service đều gọi vào SCM bên dưới. Ưu điểm: thông báo lỗi dễ đọc thay vì các exit code khó hiểu.

Xác nhận đã sửa thành công

sc query MyService

Tìm dòng STATE : 4 RUNNING trong kết quả. Thích dùng PowerShell hơn? Chạy lệnh này:

Get-Service -Name "MyService" | Select-Object Name, Status

Kết quả mong đợi:

Name       Status
----       ------
MyService  Running

Vẫn bị Error 5 dù đã chạy với quyền Administrator?

Kiểm tra lại thanh tiêu đề có ghi "Administrator: Command Prompt" không. Nếu có mà vẫn bị error 5, bản thân service đang có security descriptor hạn chế — admin token của bạn vẫn chưa đủ.

Kiểm tra quyền hiện tại của service

sc sdshow MyService

Bạn sẽ nhận được một chuỗi SDDL thô như D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA).... Cần tìm hai thứ: RP (quyền start) và WP (quyền stop). Nếu cả hai không xuất hiện cạnh BA (Built-in Administrators), đó chính là vấn đề.

Cấp quyền toàn quyền cho Administrators trên service

Dùng sc sdset để ghi đè descriptor. Đây là SDDL full-control chuẩn cho Administrators — an toàn với hầu hết các service không quan trọng:

sc sdset MyService "D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)"

Ý nghĩa các token quan trọng:

  • BA — Built-in Administrators
  • CCDCLCSWRPWPDTLOCRSDRCWDWO — Toàn quyền: start, stop, pause, cấu hình, xóa
  • SY — Tài khoản Local System
  • IU / SU — Người dùng Interactive và Service (chỉ đọc)

Thử lại net stop MyService sau khi chạy lệnh này. Lần này sẽ thành công.

Sửa triệt để: Đừng để mắc lỗi này lặp lại

Nếu deployment script hoặc automation của bạn cứ liên tục gặp lỗi này, giải pháp thực sự là tích hợp sẵn việc nâng quyền vào script — thay vì cứ phải nhớ click chuột phải mỗi lần.

Với scheduled task

Mở Task Scheduler, tìm task, rồi:

  • Chuột phải → Properties
  • Tích chọn Run with highest privileges
  • Trong mục "Security options", xác nhận tài khoản là Administrator

Với deployment script (file batch)

Thêm đoạn tự nâng quyền này vào đầu file .bat. Script sẽ tự khởi chạy lại với quyền admin nếu phát hiện chưa được nâng quyền:

@echo off
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo Requesting admin privileges...
    powershell -Command "Start-Process '%~f0' -Verb RunAs"
    exit /b
)

net stop MyService
net start MyService

Với PowerShell script

#Requires -RunAsAdministrator

Restart-Service -Name "MyService" -Force
Write-Host "Service restarted successfully."

Chỉ thị #Requires -RunAsAdministrator ít được dùng và ít được biết đến. PowerShell sẽ từ chối chạy script hoàn toàn nếu chưa được nâng quyền — bạn nhận được thông báo rõ ràng "phải chạy với quyền Administrator" ngay từ đầu, thay vì bị báo lỗi access denied lúc đang chạy giữa chừng.

Service từ xa: Câu chuyện khác

Quản lý service trên máy khác qua sc \\servername mà vẫn bị error 5? Nâng quyền trên máy local không đủ trong trường hợp này.

sc \\remoteserver query MyService
[SC] OpenSCManager FAILED 5:
Access is denied.

Ba cách khắc phục quyền truy cập từ xa:

  • Thêm tài khoản domain của bạn vào nhóm local Administrators trên máy từ xa (đáng tin cậy nhất)
  • Dùng runas /user:remoteserver\Administrator sc \\remoteserver stop MyService để cung cấp thông tin đăng nhập rõ ràng
  • Dùng PowerShell remoting để xử lý credential gọn hơn: Invoke-Command -ComputerName remoteserver -ScriptBlock { Restart-Service MyService } -Credential (Get-Credential)

Tóm tắt

  • 90% trường hợp: mở lại CMD với quyền Administrator, thử lại lệnh
  • Xác nhận bằng sc query MyService → tìm dòng STATE : 4 RUNNING
  • Vẫn lỗi dù đã nâng quyền: sửa DACL của service bằng sc sdset
  • Automation: thêm tự động nâng quyền vào file batch hoặc #Requires -RunAsAdministrator vào PowerShell script
  • Máy từ xa: tài khoản của bạn phải thuộc nhóm local Admins trên máy đích, không chỉ máy của bạn

Related Error Notes