1 điểm bởi kck4156 3 giờ trước | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

MSIX là định dạng đóng gói hiện đại của Windows. Nó hoạt động dựa trên sandbox, nên các thay đổi hệ thống như registry hay liên kết tệp được cô lập; khi gỡ cài đặt sẽ không còn sót lại gì. Với MSIXBundle, bạn cũng có thể gói x64, x86, ARM64 vào một tệp duy nhất.

Vấn đề là khâu phân phối.

Để cài MSIX ngoài Store, người dùng phải bật chế độ nhà phát triển, mở PowerShell và tin cậy chứng chỉ. Với lập trình viên thì đây là quy trình hiển nhiên, nhưng với người dùng phổ thông thì tất cả đều là rào cản. Ngay cả khi tạo ứng dụng bằng Electron hay Tauri, cũng có nhiều framework không hỗ trợ đóng gói MSIX.

Vì vậy tôi đã tạo ra nó. MSIX Installer Generator là công cụ xử lý trọn gói từ đóng gói MSIX đến tạo trình cài đặt EXE chỉ cần nhấp đúp.

Dự án bắt đầu như thế nào

Ban đầu dự án này không liên quan gì đến MSIX.

Để phân phối một ứng dụng viết bằng WinUI 3 bên ngoài Store, tôi đang làm một framework cài đặt dùng định dạng gói riêng tên là .atp. Cấu trúc là nén bằng 7z rồi đưa cho trình cài đặt, còn trình cài đặt xử lý việc đăng ký registry hoặc tạo shortcut trong Start menu. Với việc đóng gói EXE đơn giản thì nó đã hoạt động đủ tốt.

Trong lúc đó, tôi chợt nghĩ: “Nếu dùng MSIX thì còn hỗ trợ cả sandbox, vậy dùng nó để làm trình cài đặt thì sao?” Cách .atp hiện có tuy tiện lợi, nhưng rốt cuộc vẫn là kiểu cài đặt truyền thống: ghi trực tiếp vào registry và tạo thư mục trong AppData, nên không đảm bảo gỡ sạch hoàn toàn. Nếu dùng MSIX, Windows sẽ tự cô lập bằng sandbox, và khi gỡ thì không còn sót lại gì.

Vì thế tôi bắt đầu thêm hỗ trợ cài đặt MSIX, nhưng làm rồi mới thấy vấn đề là người dùng phải tự làm mọi thứ: tạo chứng chỉ, viết manifest, rồi đóng gói. Cũng có nhiều trường hợp framework không hỗ trợ đóng gói MSIX. Cuối cùng tôi đã tạo một công cụ tự động hóa cả khâu đóng gói, và hiện nay nó đã trở thành dạng xử lý một lần từ đóng gói MSIX đến cấu hình trình cài đặt EXE.

Tôi muốn giải quyết vấn đề gì

Khi phân phối bằng MSIX, trải nghiệm người dùng quá tệ.

  • “Hãy bật chế độ nhà phát triển” → người dùng hoang mang
  • “Hãy mở PowerShell với quyền quản trị rồi nhập lệnh” → càng hoang mang hơn
  • “Hãy tin cậy chứng chỉ” → hoang mang nhất

Tôi muốn có cả sự đơn giản của trình cài đặt EXE truyền thống — chỉ cần nhấp đúp là xong — lẫn lợi ích sandbox của MSIX.

MSIX Installer Generator làm gì

Có hai việc chính.

1. Đóng gói MSIX

Công cụ xử lý trong GUI các việc như tạo chứng chỉ, viết manifest, đóng gói output build. Ngay cả khi framework không hỗ trợ đóng gói MSIX, bạn chỉ cần chỉ định thư mục output build. Nếu thêm các thư mục theo kiến trúc như x64, ARM64, công cụ sẽ đọc PE header để tự động nhận diện và tạo ra một tệp .msix đơn lẻ hoặc .msixbundle đa kiến trúc.

2. Cấu hình trình cài đặt EXE

Chuyển MSIX đã tạo thành trình cài đặt EXE độc lập, cài được chỉ bằng một lần nhấp đúp. Trình cài đặt tự xử lý mọi bước cần thiết cho sideloading, như cài chứng chỉ và xử lý dependency. Từ góc nhìn người dùng, chỉ cần tải trình cài đặt về rồi chạy là xong. Không có PowerShell, không cần chế độ nhà phát triển, cũng không hiện prompt chứng chỉ.

Cũng có công cụ CLI

Ngoài GUI, tôi cũng đã đưa công cụ CLI (aticmsixgen) lên NuGet. Trong CI hoặc workflow tự động hóa bằng AI, bạn có thể xử lý toàn bộ việc đóng gói MSIX và cấu hình EXE từ dòng lệnh. Công cụ được build bằng NativeAOT nên là một tệp thực thi đơn lẻ, không có dependency runtime.

dotnet tool install --global aticmsixgen

Từ CLI có thể làm tất cả: tạo chứng chỉ, viết manifest, đóng gói MSIX và cấu hình EXE.

Phù hợp với những ai

  • Người muốn phân phối bằng MSIX nhưng thấy quy trình sideloading quá phiền
  • Người dùng các framework không hỗ trợ sẵn đóng gói MSIX như Electron, Tauri, WPF
  • Người muốn phân phối nhiều kiến trúc như x64, ARM64 trong một trình cài đặt duy nhất
  • Người muốn tự động hóa đóng gói MSIX và cấu hình EXE trong CI

Liên kết

Dự án dùng giấy phép MIT; nếu có phản hồi hoặc issue, bạn có thể để lại trên GitHub. Bạn cũng có thể viết bằng tiếng Hàn.

Chưa có bình luận nào.

Chưa có bình luận nào.