Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Админ ли ты?

Если вы регистрировались в системе Windows 7 как Администратор, то все равно администратором по сути не являетесь. По умолчанию система дает вам права стандартного пользователя, а в случае необходиомости система предложит вам повысить свои права до уровня Администратор. Так работает механизм UAC (контроль учетных записей пользователей).

Чтобы убедиться в этом, напишем простой пример, который при запуске проверяет ваши текущие права, и если вы не обладаете правами Администратора, то приложение будет закрыто.


using System.Security.Principal;

private void Form1_Load(object sender, EventArgs e)
{
    WindowsIdentity identity = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(identity);
    if (!principal.IsInRole(WindowsBuiltInRole.Administrator))
    {
        MessageBox.Show("Вы должны запустить программу под правами администратора. Программа будет закрыта");
		Application.Exit();
    }
}

Запустив программу, вы увидите сообщение, что нужно обладать правами администратора и приложение будет закрыто, как и было задумано. Если щелкнуть правой кнопкой мыши на исполняемом файле и выбрать команду Запуск от имени администратора, то система повысит вам права до нужно уровня и вы сможете запустить программу после соответствующего предупреждения.

Можно пойти по другому пути, который использует сама Windows. Вы можете добавить к программе файл манифеста, который будет содержать информацию о необходимости обладать правами администратора для запуска. В этом случае на значке исполняемого файла вашего приложения появится изображение щита. Делается следующим образом:

В Visual Studio щелкните правой кнопкой мыши на имени проекта и выберите пункт Add | New Item. В диалоговом окне выберите Application Manifest File. В проект будет добавлен новый файл-манифест под именем app.manifest. Откройте файл и найдите строчку:

<requestedExecutionLevel level="asInvoker" uiAccess="false" />

Чуть выше вы найдете закоментированные строчки для других настроек. Вам необходимо закоментировать указанную выше строчку и снять комментарий со строчки.

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />

Скомпилируйте проект и найдите исполняемый файл проекта. Убедитесь, что теперь у значка приложения появилось изображение щита, которое свидетельствует о необходимости повышения прав.

Не запускайте проект непосредственно из Visual Studio! В этом случае вы повышаете права не у программы, а у среды разработки.
Реклама