Tôi muốn hiển thị một số phần tử giao diện người dùng bổ sung khi quá trình đang được chạy với tư cách Quản trị viên so với khi không, tương tự như cách Visual Studio 2008 hiển thị 'Quản trị viên' trong thanh tiêu đề khi chạy dưới dạng quản trị viên. Làm thế nào tôi có thể nói?Làm cách nào để biết liệu quy trình của tôi có đang chạy với tư cách Quản trị viên không?
Trả lời
Về mặt kỹ thuật, nếu bạn muốn xem các thành viên là các địa phương quản trị tài khoản, sau đó bạn có thể nhận được security identifier (SID) của người sử dụng dòng điện qua User
property trên WindowsIdentity
class, như vậy (các tĩnh GetCurrent
method được người dùng Windows hiện tại):
WindowsIdentity windowsIdentity = WindowsIdentity.GetCurrent();
string sid = windowsIdentity.User.ToString();
Thuộc tính User
trả về SID của người dùng has a number of predefined values for various groups and users.
Sau đó, bạn sẽ kiểm tra để xem nếu the SID has the following pattern, indicating it is the local administrator account (which is a well-known SID):
S-1-5- {phần SID khác} -500
Hoặc, nếu bạn không muốn để phân tích chuỗi, bạn có thể sử dụng lớp SecurityIdentifier
:
// Get the built-in administrator account.
var sid = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid,
null);
// Compare to the current user.
bool isBuiltInAdmin = (windowsIdentity.User == sid);
Howeve r, tôi nghi ngờ rằng những gì bạn thực sự muốn biết là nếu người dùng hiện tại là thành viên của quản trị viên nhóm cho máy địa phương. Bạn có thể nhận SID này bằng cách sử dụng WellKnownSidType
của BuiltinAdministratorsSid
:
// Get the SID of the admin group on the local machine.
var localAdminGroupSid = new SecurityIdentifier(
WellKnownSidType.BuiltinAdministratorsSid, null);
Sau đó, bạn có thể kiểm tra Groups
property trên WindowsIdentity
của người sử dụng để xem nếu người dùng đó là một thành viên của nhóm quản trị cục bộ, như vậy:
bool isLocalAdmin = windowsIdentity.Groups.
Select(g => (SecurityIdentifier) g.Translate(typeof(SecurityIdentifier))).
Any(s => s == localAdminGroupSid);
Điều này có kiểm tra xem người dùng hiện tại có phải là quản trị viên hay quy trình đang chạy với tư cách là quản trị viên không?Người dùng không phải là quản trị viên vẫn có thể chạy một quy trình với tư cách quản trị viên bằng cách nhấp chuột phải vào quá trình và chọn "Chạy với tư cách quản trị viên". –
@JanTacci Nếu người dùng nhấp chuột phải và chọn chạy với tư cách là quản trị viên, thì quá trình này sẽ chạy với tư cách người dùng trong nhóm quản trị viên được chọn từ hộp thoại UAC được hiển thị, quá trình này không chạy dưới người dùng đã đăng nhập tại điểm đó . – casperOne
là quản trị viên và chạy ứng dụng với tư cách quản trị viên là hai điều khác nhau. Ngay cả khi tôi là quản trị viên, tôi vẫn có thể chạy ứng dụng mà không có đặc quyền, trong trường hợp của tôi, nó gây ra sự cố cho tôi. –
Tôi nghĩ đây là một cơ chế đơn giản.
using System.Security.Principal;
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
Tôi cảm thấy điều quan trọng cần lưu ý là tôi đã gặp khó khăn khi cố gắng sử dụng câu trả lời của WellpernSidType.BuiltinAdministratorsSid cho mỗi casperOne ở trên. Theo số WellKnownSiDType MSDN, BuiltinAdministratorsSid "Chỉ ra SID khớp với tài khoản quản trị viên." Vì vậy, tôi mong đợi mã của casperOne hoạt động, và đoán nó có thể xảy ra trong một số môi trường. Thật không may, nó không có trên Windows 2003 của tôi với .NET 2.0 (mã kế thừa). Nó thực sự trả về S-1-5-32-544, theo this article là sid cho nhóm quản trị nhóm. Do đó, sự so sánh thất bại đối với tôi. Tôi sẽ phải thực hiện so sánh chuỗi của riêng tôi để bắt đầu với "S-1-5-21" (kb 243330 cho biết "21" được bao gồm mặc dù blog được tham chiếu ở trên không) và kết thúc bằng "500".
Đây là một lớp lót để thực hiện.
using System.Security.Principal;
static bool IsElevated => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
- 1. Làm cách nào để cài đặt Chạy với tư cách quản trị viên
- 2. Java: chạy với tư cách là quản trị viên
- 3. Cách đặt "Chạy chương trình này với tư cách quản trị viên" theo lập trình
- 4. Cài đặt Inno: Cách đặt trình cài đặt "Chạy với tư cách quản trị viên"?
- 5. Làm cách nào để biết quản trị viên ứng dụng của tôi hay không
- 6. Win C#: Chạy ứng dụng với tư cách quản trị viên không có dấu nhắc UAC
- 7. Chạy trình biên dịch python (py2exe) với tư cách là quản trị viên trong Vista
- 8. Cách tạo tập tin batch để chạy cmd với tư cách quản trị viên
- 9. Cách xóa yêu cầu "Chạy với tư cách quản trị viên" trong C#
- 10. Làm cách nào để biết liệu tôi có đang chạy từ JRuby và Ruby không?
- 11. Làm cách nào để sử dụng JScript để tạo lối tắt sử dụng "Chạy với tư cách quản trị viên"
- 12. Chạy tệp Java với tư cách Quản trị viên với đầy đủ các đặc quyền
- 13. Làm thế nào tôi có thể gỡ lỗi dịch vụ IIS cục bộ bằng Visual Studio đang chạy với tư cách người dùng không phải Quản trị viên?
- 14. Không thể truy cập ổ đĩa mạng trong PowerShell đang chạy với tư cách là quản trị viên
- 15. NSIS: Cài đặt Ứng dụng để luôn chạy với tư cách Quản trị viên
- 16. Làm cách nào để biết tập lệnh Perl của tôi có đang chạy trong Windows không?
- 17. Làm thế nào để buộc chương trình C# Winforms của tôi chạy với tư cách là quản trị viên trên bất kỳ máy tính nào?
- 18. Chạy ứng dụng .NET với tư cách là quản trị viên
- 19. Dự án thiết lập Dịch vụ Windows - chạy dịch vụ với tư cách quản trị viên
- 20. Phát hiện xem chương trình có đang chạy với đầy đủ quyền quản trị viên
- 21. Tôi có thể sửa đổi môi trường Win7 để cho phép chương trình .Net luôn chạy với tư cách Quản trị viên không?
- 22. Làm cách nào để biết liệu cập nhật CHẾ ĐỘ HOẠT ĐỘNG có đang chạy không?
- 23. chạy cmd.exe với tư cách là quản trị viên trong tập lệnh
- 24. Chính xác 'Chạy làm quản trị viên' làm gì?
- 25. Làm cách nào để biết liệu chương trình của tôi có bật ARC hay không?
- 26. Cách kiểm tra xem quy trình có quyền quản trị
- 27. Tôi làm cách nào để thêm trình soạn thảo WSYWYG vào quản trị viên Django?
- 28. Làm cách nào để biết mã của bạn có đang chạy trên iPhone hay iPhone3G không?
- 29. Visual studio 2010 Yêu cầu chạy với tư cách quản trị viên để xây dựng trang web
- 30. Tôi làm cách nào để có được tên nhóm địa phương cho khách/quản trị viên?
trả lời cho điều này là như nhau: http://stackoverflow.com/questions/95912/how-can-i-detect-if-my-process-is-running-uac-elevated-or- không phải – DSO
Ngoài ra, hãy xem http://www.blackwasp.co.uk/CheckAdmin.aspx –