Запустить часть программы на c # с правами администратора - PullRequest
6 голосов
/ 16 февраля 2010

Есть ли способ запросить повышенные привилегии у os для "только части" программы на c #?

Я пишу несколько тестов интеграции с использованием NUnit. Я проверяю, правильно ли тестируемое приложение подключается к порту 843. Тест открывает сокет прослушивания на порту 843, а затем отправляет всевозможные ответы тестируемому приложению и проверяет, правильно ли оно работает .

Однако для открытия прослушивающего сокета на порту 843 требуются права администратора.

Я бы хотел найти наименее навязчивый способ выполнения этого теста. Я мог бы запустить весь набор NUnit от имени пользователя root / admin, но это заставило бы многие вещи работать от имени пользователя root, которые на самом деле не нужно запускать от имени пользователя root, что я хотел бы предотвратить.

Ответы [ 4 ]

2 голосов
/ 16 февраля 2010

Неа. Высота это все или ничего. Обычно, если требуется повышение прав, приложение загружается в повышенное состояние.

1 голос
/ 16 февраля 2010

При необходимости приведенный ниже код поможет вам выяснить, является ли текущий вошедший в систему пользователь администратором:

using System;
using System.Security.Principal; 

class Test
{
    public static void Main()
    {
        if (new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator))
        {
            Console.WriteLine("I am an admin.");
        }
    }
}
0 голосов
/ 16 февраля 2010

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

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

0 голосов
/ 16 февраля 2010

Да, вы можете взглянуть на функцию LogonUser . Вот образец .

...