2011-01-31 31 views
5

Im Hiện đang làm việc trên một ApplicationLauncher/Autoupdater. Vì vậy, để cài đặt/cập nhật ứng dụng thành "Program Files", tôi cần yêu cầu quyền Quản trị viên.Quản trị viên-Privilegs cho một phương pháp duy nhất

Vâng, vì Trình cập nhật chỉ cần viết điều gì đó nếu các phiên bản mới được tìm thấy, tôi đã cố gắng chỉ yêu cầu các đặc quyền, nếu một Phiên bản mới được tìm thấy.

Các cập nhật được thực hiện mọi lúc, trước khi ra mắt ứng dụng, vì vậy yêu cầu "mọi" cho Adminrights là không có giải pháp ...

tôi đã tìm kiếm rất nhiều, và thấy như sau:

[PrincipalPermission(SecurityAction.Demand, Role = @"Administrators")] 
    private void InstallOrUpdate(AppItem appItem) 

nhưng wenn tôi cố gắng để điều này, các updater ném một SecurityException ...

Yêu cầu quyền chính không thành công.

Tôi đang làm gì sai?

Trân trọng, dognose

Trả lời

3

Bạn không thể nâng cấp quyền cho ứng dụng khi ứng dụng đang chạy. Để yêu cầu vai trò Quản trị viên, nó sẽ cần phải được thực hiện tại thời điểm khởi động của tệp thực thi.

Tùy chọn tốt nhất của bạn là để trình cập nhật của bạn kích hoạt một tệp thực thi khác nhau để thực hiện InstallOrUpdate hoặc tự chạy lại (với một đối số dòng lệnh khác), với yêu cầu quyền nâng cao tại điểm đó.

+0

Khi tôi đang thực hiện các thao tác quản trị trong Windows, tôi thấy các nút trong biểu mẫu có biểu tượng quản trị bên cạnh chúng. Khi tôi nhấp vào nút, UAC yêu cầu đặc quyền nâng cao. Bạn đang nói rằng đối với mỗi nút quản trị Windows đang khởi chạy một quy trình mới? Hay có điều gì khác xảy ra ở đó? – Phil

+0

@Phil: Có. Về cơ bản, nếu bạn nhìn thấy một dấu nhắc UAC, bạn biết một quá trình mới sẽ được bắt đầu tại thời điểm đó. –

+0

@Phil, một ví dụ điển hình là Trình quản lý tác vụ Windows và nút 'Hiển thị quy trình từ tất cả người dùng'. Nhấp vào đây không chỉ cập nhật Trình quản lý tác vụ, nó sẽ khởi chạy lại nó với các quyền nâng cao. –

2

UAC độ cao là mỗi quá trình, ví dụ: quá trình như một toàn thể được nâng lên, không tính theo phương pháp duy nhất. Hành động tốt nhất, sẽ là tạo một quy trình hành động cụ thể đòi hỏi đặc quyền nâng cao và khởi chạy quy trình đó từ trình cập nhật của bạn khi thực sự cần thực hiện một số công việc. This might help.

Các vấn đề liên quan