Sửa lỗi 'Error 1067: The process terminated unexpectedly' Khi Khởi Động Windows Service

intermediate🪟 Windows2026-07-04| Windows 10, Windows 11, Windows Server 2016/2019/2022 — mọi Windows Service (ứng dụng tự viết, dịch vụ bên thứ ba, Node.js/Java/Python chạy dưới dạng service)

Error Message

Windows could not start the service on Local Computer. Error 1067: The process terminated unexpectedly.
#windows-service#error-1067#service-crash#event-viewer#sc

Chuyện gì đang xảy ra

Bạn cố khởi động một Windows Service — từ Services.msc, dòng lệnh, hoặc sau khi reboot — và nhận được thông báo này:

Windows could not start the service on Local Computer.
Error 1067: The process terminated unexpectedly.

Dịch ra: tiến trình của service (.exe) đã khởi động, rồi lập tức bị crash trước khi kịp báo cáo trạng thái "running" về Service Control Manager. Windows thấy tiến trình kết thúc quá nhanh. Nó không biết tại sao — chỉ biết rằng tiến trình đã không tồn tại được.

1067 là triệu chứng, không phải chẩn đoán. Bạn không thể fix nếu không biết nguyên nhân crash — và câu trả lời đó nằm trong log.

Bước 1: Mở Event Viewer trước tiên

Event Viewer hầu như luôn có lỗi thực sự. Thông báo 1067 chỉ là lớp bọc bên ngoài; nguyên nhân crash thật sự — thiếu DLL, file config sai, xung đột port — được ghi lại riêng.

Mở nó:

eventvwr.msc

Kiểm tra hai nơi:

  • Windows Logs → Application — lỗi từ chính tiến trình service
  • Windows Logs → System — sự kiện từ Service Control Manager (nguồn: Service Control Manager)

Lọc các sự kiện "Error" màu đỏ có thời gian xảy ra gần lúc bạn cố khởi động service. Phần mô tả trong các sự kiện đó — không phải thông báo 1067 — mới là thứ cho bạn biết thực sự đã xảy ra chuyện gì.

Những thứ thường gặp:

  • The program can't start because VCRUNTIME140.dll was not found → thiếu Visual C++ runtime
  • Failed to open config file: C:\path\to\config.json → sai thư mục làm việc hoặc thiếu file
  • bind: Only one usage of each socket address is normally permitted → port đã bị chiếm
  • Access is denied → vấn đề quyền truy cập file hoặc registry
  • Lỗi riêng của ứng dụng từ code service của bạn

Bước 2: Kiểm tra cấu hình service

Đảm bảo đường dẫn binary đúng và tài khoản service trông hợp lệ:

sc qc "YourServiceName"

Lệnh này hiển thị kết quả như sau:

SERVICE_NAME: YourServiceName
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : C:\path\to\service.exe --config C:\path\to\config.ini
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : Your Service
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem

Xác nhận file binary thực sự tồn tại tại đường dẫn đó:

Test-Path "C:\path\to\service.exe"

False có nghĩa là service đã được đăng ký với một đường dẫn không còn tồn tại — thường xảy ra sau khi cài lại hoặc di chuyển thư mục. Sửa lại:

sc config "YourServiceName" binpath= "C:\correct\path\to\service.exe"

Khoảng trắng sau binpath= là bắt buộc — cú pháp của sc rất khó tính về điều này.

Bước 3: Chạy file thực thi trực tiếp

Mở command prompt với quyền Administrator và chạy file binary của service trực tiếp:

"C:\path\to\service.exe"

Hoặc với tham số:

"C:\path\to\service.exe" --config "C:\path\to\config.ini"

Chạy thủ công buộc lỗi phải hiển thị ra console thay vì để Service Control Manager nuốt chửng im lặng. Thiếu dependency, giá trị config sai, vấn đề quyền truy cập — tất cả đều in ra ngay lập tức khi bạn tự chạy binary, thay vì biến mất vào lớp bọc 1067 chung chung.

Nếu binary thoát ngay lập tức, kiểm tra exit code:

echo %errorlevel%

Exit code âm như -1073741515 (hex: 0xC0000135) là dấu hiệu rõ ràng của việc thiếu DLL dependency.

Bước 4: Khắc phục nguyên nhân gốc rễ

Thiếu DLL hoặc runtime

Event Viewer hiển thị thông báo kiểu VCRUNTIME140.dll was not found? Cài đặt runtime phù hợp:

  • Với VCRUNTIME140.dll hoặc tương tự: cài Visual C++ Redistributable
  • Với Java services: xác minh JAVA_HOME đã được đặt và phiên bản JRE đúng đã được cài
  • Với .NET services: kiểm tra các runtime đã cài bằng dotnet --list-runtimes

Không tìm thấy hoặc file config không hợp lệ

Đây là cái bẫy làm nhiều người mắc phải: service không chạy từ thư mục của chính nó. Thư mục làm việc mặc định là C:\Windows\System32. Bất kỳ đường dẫn tương đối nào trong config của bạn đều âm thầm trỏ đến sai chỗ.

Luôn dùng đường dẫn tuyệt đối trong config của service, hoặc truyền vị trí config trực tiếp trong đường dẫn binary:

sc config "YourServiceName" binpath= "\"C:\path\to\service.exe\" --config \"C:\path\to\config.ini\""

Vấn đề quyền của tài khoản service

Xem SERVICE_START_NAME trong kết quả lệnh sc qc. Nếu là LocalService, NetworkService, hoặc tài khoản domain tùy chỉnh thay vì LocalSystem, tài khoản đó có thể không có quyền đọc thư mục binary hoặc các file config.

Kiểm tra quyền mà tài khoản đó có:

icacls "C:\path\to\service\directory"

Cấp quyền đọc và thực thi:

icacls "C:\path\to\service\directory" /grant "NT AUTHORITY\LocalService:(RX)" /T

Nếu service ghi file log, nó cần quyền ghi vào thư mục log — nếu không nó sẽ crash ngay khi cố mở file log mà nó không thể tạo.

Xung đột port

Một service bind port 8080 khi khởi động sẽ crash ngay lập tức nếu thứ gì đó đã chiếm port đó. Tìm kẻ gây ra:

netstat -ano | findstr :8080

Ghi lại PID ở cột cuối, rồi tra cứu nó:

tasklist | findstr 1234

Dừng tiến trình xung đột hoặc thay đổi port của service trong file config.

Bước 5: Khởi động lại service và xác nhận

Khởi động service và kiểm tra trạng thái:

sc start "YourServiceName"
sc query "YourServiceName"

Bạn muốn thấy:

STATE              : 4  RUNNING

Hoặc trong PowerShell:

Get-Service -Name "YourServiceName" | Select-Object Name, Status, StartType

Chờ 10–15 giây, rồi query lại. Một service bị crash khi khởi động thường hiển thị RUNNING trong chốc lát trước khi chuyển lại thành STOPPED. Nếu điều đó xảy ra, quay lại Event Viewer — các lỗi mới từ lần thử đó sẽ có timestamp ngay trong khoảng thời gian đó.

Bài học rút ra

  • Error 1067 luôn là triệu chứng. Lỗi thật sự nằm ở chỗ khác — thường là Event Viewer hoặc file log do chính service ghi ra.
  • Chạy .exe thủ công với quyền Administrator là bước debug nhanh nhất. Nó bộc lộ những lỗi mà Service Control Manager sẽ nuốt chửng im lặng.
  • Đường dẫn tương đối trong config của service là cái bẫy phổ biến. Service không chạy từ thư mục của chính nó — hãy dùng đường dẫn tuyệt đối.
  • Sau bất kỳ bản cập nhật Windows hoặc cài lại ứng dụng nào, hãy kiểm tra xem đường dẫn binary trong config service có còn trỏ đến vị trí hợp lệ không. Các mục registry trở nên lỗi thời khi phần mềm bị di chuyển hoặc nâng cấp.

Related Error Notes