---
id: windows-lnk1104-process-kill
trigger: "khi build C++ (CMake/MSBuild/Ninja) bị lỗi LNK1104 cannot open file .exe"
confidence: 0.95
domain: "build_toolchain"
scope: "project"
summary: "Trên Windows, binary đang chạy bị khóa ghi bởi kernel; bắt buộc taskkill tiến trình trước khi build C++"
---

# Instinct: Xử Lý Lỗi Khóa File Thực Thi Windows (LNK1104)

## 1. Bối Cảnh & Hiện Tượng
Khi chạy lệnh biên dịch C++ (ví dụ qua CMake hoặc MSBuild), linker ném lỗi nghiêm trọng:
```text
LINK : fatal error LNK1104: cannot open file 'bin\AutoPOE2_Tests.exe'
```
hoặc
```text
LINK : fatal error LNK1104: cannot open file 'bin\AutoPOE2_Core.exe'
```

## 2. Nguyên Nhân Gốc Rễ (RCA)
Trên hệ điều hành Windows, bất kỳ tiến trình nào đang được nạp vào RAM hoặc đang chạy nền đều bị kernel khóa cấm ghi đè (`FILE_SHARE_WRITE` bị từ chối). Ngay cả khi terminal trước đó đã đóng, nếu test harness hoặc core daemon chưa thoát hẳn (zombie/background process), file `.exe` sẽ bị khóa vĩnh viễn cho đến khi tiến trình kết thúc.

## 3. Phản Xạ Hành Động Khuyến Nghị (Rule 6 Pre-Build Process Kill)
Trước khi thực hiện bất kỳ lệnh build C++ nào, BẮT BUỘC chèn lệnh `taskkill /F` vào đầu chuỗi lệnh:

```powershell
cmd /c "taskkill /F /IM AutoPOE2_Tests.exe >nul 2>&1 || exit 0"
cmd /c "taskkill /F /IM AutoPOE2_Core.exe >nul 2>&1 || exit 0"
```

Sau khi build hoàn tất, kiểm tra timestamp của file nhị phân để đảm bảo file thực sự đã được tạo mới:
```powershell
(Get-Item bin/AutoPOE2_Tests.exe).LastWriteTime
```

## 4. Bằng Chứng Thực Nghiệm
- Đã giải quyết 100% hiện tượng kẹt linker trong mọi pipeline build tự động của AutoPOE2 trên Windows 11.
