В тесте.NET/C#, если процесс имеет административные привилегии

Вы можете попробовать этот код. Ваш элемент недоступен, поэтому он идет в бесконечный цикл. Вам нужно выпрыгнуть из цикла через некоторое время.

describe('test reloading', function () {
    it('testSelector reload', function () {
      cy.visit('https://docs.cypress.io/api/utilities/$.html#Usage')
      let found = false
      let count=0
      while (!found) {

        const nonExistent = Cypress.$('.fake-selector')

        if (!nonExistent.length) {
          cy.reload()
          found = false
          count=count+1
          cy.wait(1000)
          if(count==30)
          {
            found = true
            cy.log('Element not found after 30 seconds..Exit from loop!!!')
          }
        } else {
          found = true
        }
      }
    })
  })
49
задан Harry Johnston 12 February 2015 в 13:22
поделиться

4 ответа

Это позволит проверить, входит ли пользователь в локальную группу администраторов (при условии, что вы не проверяете права администратора домена)

using System.Security.Principal;

public bool IsUserAdministrator()
{
    //bool value to hold our return value
    bool isAdmin;
    WindowsIdentity user = null;
    try
    {
        //get the currently logged in user
        user = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(user);
        isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    catch (UnauthorizedAccessException ex)
    {
        isAdmin = false;
    }
    catch (Exception ex)
    {
        isAdmin = false;
    }
    finally
    {
        if (user != null)
            user.Dispose();
    }
    return isAdmin;
}
78
ответ дан 7 November 2019 в 11:25
поделиться

Следующее тестируется для работы в.NET Core 3 в Windows 10 и Ubuntu Linux:

[DllImport("libc")]
public static extern uint getuid(); // Only used on Linux but causes no issues on Windows

static bool RunningAsAdmin()
{
    if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        using var identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        return principal.IsInRole(WindowsBuiltInRole.Administrator);
    }
    else return getuid() == 0;
}

Это возвращается true, когда контроль учётных записей в действительности (Windows) или когда приложение работает как суперпользователь на Linux (например, sudo myapp).

, Если у кого-либо есть возможность протестировать на MacOS, совместно используйте свои результаты.

1
ответ дан 7 November 2019 в 11:25
поделиться

Можно использовать WMI с чем-то вроде этого, чтобы узнать, является ли учетная запись администратором, и почти все, что вы хотите знать об этой учетной записи

using System;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_UserAccount"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_UserAccount instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("AccountType: {0}", queryObj["AccountType"]);
                    Console.WriteLine("FullName: {0}", queryObj["FullName"]);
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
                }
            }
            catch (ManagementException e)
            {
                MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
            }
        }
    }
}

Чтобы упростить начало работы загрузите WMI Creator

, вы также можете использовать его для доступа к активному каталогу (LDAP) или чему-либо еще на вашем компьютере / в сети

1
ответ дан 7 November 2019 в 11:25
поделиться

If you want to make sure your solution works in Vista UAC, and have .Net Framework 3.5 or better, you might want to use the System.DirectoryServices.AccountManagement namespace. Your code would look something like:

bool isAllowed = false;
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine, null))
{
    UserPrincipal up = UserPrincipal.Current;
    GroupPrincipal gp = GroupPrincipal.FindByIdentity(pc, "Administrators");
    if (up.IsMemberOf(gp))
        isAllowed = true;
}
17
ответ дан 7 November 2019 в 11:25
поделиться