Lời nhắc độ cao xuất hiện khi ứng dụng của bạn yêu cầu, vì một lý do nào đó. Bạn có thể kiểm soát nó bằng tệp kê khai ứng dụng. Xem bài viết Create and Embed an Application Manifest (UAC) để biết chi tiết về cách thêm tệp kê khai.
tôi sẽ đề nghị bạn như sau:
- riêng của bạn Updater và Update Checker, để chúng trong các tập tin .EXE khác nhau.
- UpdateChecker.exe không yêu cầu quyền quản trị viên, và do đó
requestedExecutionLevel
phần tử của tệp kê khai có mức asInvoker
.
- Updater.exe yêu cầu đặc quyền của quản trị viên vì nó ghi tệp ứng dụng đã cập nhật vào Tệp chương trình. Do đó,
requestedExecutionLevel
phần tử của tệp kê khai của nó có cấp độ requireAdministrator
.
Trong chương trình của bạn, bạn có thể khởi chạy UpdateChecker.exe theo bất kỳ cách nào bạn muốn. Để bắt đầu Updater.exe, bạn sẽ phải sử dụng ShellExecute
; nếu ứng dụng có tệp kê khai (và tôi khuyên bạn nên nhúng tệp kê khai), nó sẽ hiển thị lời nhắc UAC cho độ cao nếu ứng dụng muốn đặc quyền của quản trị viên. Không cần sử dụng động từ runas
.
Hoặc bạn có thể kiểm tra xem bản cập nhật có khả dụng hay không từ ứng dụng chính của bạn. Và khởi động Updater.exe chỉ khi có một phiên bản mới trên máy chủ.
Một tùy chọn khác sẽ làm cho Updater.exe kiểm tra cập nhật và áp dụng nếu có, giống như bạn làm ngay bây giờ. Trong trường hợp này Updater.exe cần có mức asInvoker
trong tệp kê khai của nó. Khi nó bắt đầu, không có thông số, nó sẽ kiểm tra xem có phiên bản mới trên máy chủ hay không.Nếu nó tìm thấy phiên bản mới hơn, nó tự động khởi chạy lại với đặc quyền của quản trị viên và chuyển thông số dòng lệnh, ví dụ: /doUpdate
, hướng dẫn nó thực hiện cập nhật thực tế.
Để tự khởi động lại, nó phải sử dụng chức năng ShellExecute
và runas
động từ, vì ShellExecute
sẽ không thể tự động phát hiện Updater.exe của bạn hiện yêu cầu quyền quản trị.
Hãy nhớ rằng ý nghĩa của runas
động từ khác nhau giữa Windows XP và Windows Vista/7, vì vậy bạn nên xử lý tình huống này nếu bạn muốn hỗ trợ các phiên bản trước của Windows. Cách tiếp cận đầu tiên tôi mô tả sẽ hoạt động trên Windows XP mà không cần xử lý thêm.
Nguồn
2011-10-16 08:44:36
Đây là những gì tôi nói. –
Tôi thích câu trả lời này tốt hơn. Ít nói, nhiều mã hơn. –