Вы не можете перехватывать исключенные проверенные исключения, потому что их нельзя выбросить. Вы можете поймать Exception
, потому что неконтролируемое исключение во время выполнения - это Exception
и потенциально могут быть выброшены.
Необходимо встроить декларацию контроля учётных записей как встроенный ресурс Win32. См. Добавлять Декларацию контроля учётных записей к Управляемому коду .
Короче говоря, Вы используете инструмент командной строки Windows SDK для встраивания его в исполняемый файл.
можно автоматизировать это как шаг постсборки путем размещения следующей строки как задачи сборки сообщения в свойствах проекта VS:
mt.exe -manifest "$(ProjectDir)$(TargetName).exe.manifest" -updateresource:"$(TargetDir)$(TargetName).exe;#1"
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. Я решил записать это для потомков.
Та-да
Ответ Скотта будет делать то, что вы просили, но Microsoft рекомендует, чтобы консольные приложения отображали сообщение "доступ запрещен", а не запрашивали высота.
Из http://msdn.microsoft.com/en-us/library/bb756922.aspx :
Консольное приложение представляет свой вывод в окне консоли, а не с отдельным пользовательским интерфейсом. Если приложению для запуска требуется токен полного доступа администратора , то это приложение необходимо запустить из окна консоли с повышенными правами.
Вы должны сделать следующее для консольных приложений:
Отметьте, что ваше приложение «asInvoker»: вы можете сделать это, создав манифест вашего приложения, в котором вы установили RequestedExecutionLevel == asInvoker. Эта настройка позволяет вызывающим абонентам из контекстов без повышенных прав создавать ваш процесс, что позволяет им перейти к шагу 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);
}