Cách kiểm tra ứng dụng có quyền Admin hay không

Sau đây là cách kiểm tra ứng dụng có đủ quyền Admin hay không. Mặc định khi bạn run một ứng dụng thì ứng dụng đó sẽ có quyền của user run nó. Điều đó không đồng nghĩa rằng nếu user run ứng dụng thuộc group Admin thì ứng dụng đó có full quyền Admin.

User account control setting

Như đã nói ở trên, để đảm bảo ngăn chặn các ứng dụng được chạy một cách tự động hay vô tình làm ảnh hưởng đến hệ thống, Windows có một cở chế bảo bệ đó là User Account Control Setting. Mặc định Windows sẽ luôn hỏi user rằng có thật sự bạn muốn chạy ứng dụng này không để tránh việc ứng dụng lạ sẽ can thiệp vào hệ thống Windows hay các thông tin bảo mật của user. Trường hợp bạn cho phép chạy ứng dụng bạn muốn thì ứng dụng đó cũng không có toàn quyền Admin để can thiệp vào sâu trong hệ thống. Nếu thật sự muốn ứng dụng nào đó phải chạy dưới quyền Admin thì bạn phải chủ động chạy như 2 cách sau.

Cách 1: một Right-Click => Chọn Run as administrator

Run process as admin #1

Cách 2: Chọn ứng dụng => Right-Click => Properties => Compatibility => Check Run this program as an administrator => Apply

Run process as admin #2

 

Nếu một ứng dụng không được run bởi user mà bởi một ứng dụng khác thì ứng dụng được run sau sẽ có quyền của ứng dụng đã run nó. Nghĩa là A được run bởi user PhamTuan với quyền Admin(run as Administrator), sau đó A run B thì B cũng sẽ có full quyền Admin như A.

Nếu A được run bởi user PhamTuan và bị giới hạn quyền Admin mà A lại muốn run B như Admin thì chúng ta vẫn có cách. Tôi sẽ đề cặp ở bài viết khác.

Vậy khi ứng dụng đã được run thì làm thế nào ta có thể kiểm tra được ứng dụng hiện tại có được run as administrator hay không. Hãy sử dụng đoạn code sau đây.

using System;
using System.Security.Principal;
    public static class WindowsUtility
    {
        public static bool IsUserAdministrator()
        {
            try
            {
                using (var user = WindowsIdentity.GetCurrent())
                {
                    var principal = new WindowsPrincipal(user);
                    return principal.IsInRole(WindowsBuiltInRole.Administrator);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("ERROR: Cannot check user role. {0}", ex);
            }
            return false;
        }
    }

Phạm Tuân

Cách gộp các Dll vào ứng dụng WPF
Cấu hình log4net và logging.adapter trong code c#
Tạo Facebook App trong 1 phút - new version
Hãy bình luận trực tiếp ở đây để được trả lời nhanh hơn. 3 bình luận.
  1. Bạn cho mình hỏi, mình đang làm đóng gói bộ cài. Mình muốn khi chạy file setup thì chỉ có tk Admin chạy thì được, còn tk user thì vẫn cho chạy nhưng sẽ lỗi. Và trong Visual Studio thì có cách nào để tạo tải khoản UAC cho PC ko?

    1. Mình không hiểu ý bạn lắm, VS thì liên quan gì, chắc ý bạn là create user bằng code hả? Xem thử đoạn code sau hoặc link này UAC
      public UserPrincipal CreateNewUser(string sUserName, string sPassword)
      {
      // first check that the user doesn’t exist
      if (GetUser(sUserName) == null)
      {
      PrincipalContext oPrincipalContext = GetPrincipalContext();

      UserPrincipal oUserPrincipal = new UserPrincipal(oPrincipalContext);
      oUserPrincipal.Name = sUserName;
      oUserPrincipal.SetPassword(sPassword);
      //User Log on Name
      //oUserPrincipal.UserPrincipalName = sUserName;
      oUserPrincipal.Save();

      return oUserPrincipal;
      }

      // if it already exists, return the old user
      return GetUser(sUserName);
      }
      }

Trả lời