Потребность контроля учётных записей в консольном приложении

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

26
задан Patrick Desjardins 26 August 2009 в 14:34
поделиться

3 ответа

Необходимо встроить декларацию контроля учётных записей как встроенный ресурс Win32. См. Добавлять Декларацию контроля учётных записей к Управляемому коду .

Короче говоря, Вы используете инструмент командной строки Windows SDK для встраивания его в исполняемый файл.

можно автоматизировать это как шаг постсборки путем размещения следующей строки как задачи сборки сообщения в свойствах проекта VS:

mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
8
ответ дан Judah Gabriel Himango 28 November 2019 в 06:12
поделиться

plundberg: Кнопка «Отключить» доступна только для поставщика TFS, начиная с VS 2008. Даже тогда, я не уверен, что это официально поддерживается. Рекомендуется использовать функцию перехода в автономный режим для [повторного] открытия решения.

Мартин Притчард: Если вы застряли в середине работы, вы можете принудить VS к тайм-ауту, перетянув сетевой разъем (буквально) или запустив ipconfig/release .

Как только вы будете помечены в автономном режиме, вот пошаговое руководство по работе в этом режиме: http://teamfoundation.blogspot.com/2007/12/offline-and-back-again-in-vs2008.html

Более подробная информация о настройке закулисного поведения: http://blogs.msdn.com/benryan/archive/2007/12/12/when-and-how-does-my-solution-go-offline.aspx http://blogs.msdn.com/benryan/archive/2007/12/12/how-to-make-tfs-offline-strictly-solution-based.aspx

-121--735756-

Я нашел способ проверить, что мои пользователи считают равенством.

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

select 'column1'
from 'some_table'
where CAST('some_float_field' AS CHAR) <=> '2.18'
-121--2341745-

Для всех, кто использует Visual Studio, это очень просто. Я собирался перейти набор Windows SDK и сделать mt.exe шаги после сборки и все это, прежде чем понять, что он встроен в VS. Я решил записать это для потомков.

  1. Проект | Добавить новый Предмет - > Visual C # Предметы - > Файл манифеста приложения
  2. Откройте файл app.manifest, измените значение requestedExecureLevel. @ level на «requureAdministrator»
  3. Сборка

Та-да

54
ответ дан 28 November 2019 в 06:12
поделиться

Ответ Скотта будет делать то, что вы просили, но Microsoft рекомендует, чтобы консольные приложения отображали сообщение "доступ запрещен", а не запрашивали высота.

Из http://msdn.microsoft.com/en-us/library/bb756922.aspx :

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

Вы должны сделать следующее для консольных приложений:

  1. Отметьте, что ваше приложение «asInvoker»: вы можете сделать это, создав манифест вашего приложения, в котором вы установили RequestedExecutionLevel == asInvoker. Эта настройка позволяет вызывающим абонентам из контекстов без повышенных прав создавать ваш процесс, что позволяет им перейти к шагу 2.

  2. Предоставить сообщение об ошибке, если приложение запускается без маркера полного доступа администратора: Если приложение запускается в неавтоматическом режиме. с повышенными правами, ваше приложение должно выдать краткое сообщение и завершить работу. Рекомендуемое сообщение: «Доступ запрещен. Для использования выбранных параметров необходимы права администратора. Для выполнения этих задач используйте командную строку администратора."

Приложение также должно возвращать код ошибки ERROR_ELEVATION_REQUIRED при неудачном запуске для облегчения написания сценариев.

Мой код C # для этого приведен ниже. Он протестирован в Windows XP (администратор -> нормально, стандартный пользователь -> отказано) и Windows Server 2008 (администратор с повышенными правами -> нормально, администратор без повышенных прав -> запрещен, стандартный пользователь -> запрещен).

static int Main(string[] args)
{
    if (!HasAdministratorPrivileges())
    {
        Console.Error.WriteLine("Access Denied. Administrator permissions are " +
            "needed to use the selected options. Use an administrator command " +
            "prompt to complete these tasks.");
        return 740; // ERROR_ELEVATION_REQUIRED
    }

    ...
    return 0;
}

private static bool HasAdministratorPrivileges()
{
    WindowsIdentity id = WindowsIdentity.GetCurrent();
    WindowsPrincipal principal = new WindowsPrincipal(id);
    return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
24
ответ дан 28 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: