Какие части .NET требуют административных привилегий для выполнения? - PullRequest
9 голосов
/ 09 апреля 2010

Какие части фреймворка требуют, чтобы пользователь был больше, чем обычный пользователь? Причина, по которой я спрашиваю, заключается в том, что я пытаюсь составить список возможных проблем с нашими существующими приложениями при переходе на Windows 7.

Теперь я сам могу подумать о нескольких вещах:

  • Запись в журнал событий
  • Запись в ключи реестра за пределами области действия Current_User
  • Получение переменной окружения
  • и т.д ...

Я действительно хотел бы получить более полный список, и до сих пор я не встречал достойного ресурса, в котором перечислены все эти материалы.

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

Ответы [ 9 ]

8 голосов
/ 13 апреля 2010

Думая об этом, как о том, «что библиотека называет», вы попадете на неверный путь. Подумайте обо всем, что пишет в файл. Если этот файл находится в разделе Program Files (среди других мест), вам нужны привилегии администратора. Если это под AppData, вы не делаете. Тот же библиотечный вызов, разные результаты. То же самое для записи в реестр - HKLM вам нужен админ, HKCU - нет. Запись в журнал событий обычно нормальная, но создание источника событий - нет. И так далее. Дело не в том, какой метод вы вызываете, а в параметрах (например, пути), которые вы передаете ему.

8 голосов
/ 12 апреля 2010

Ну, ваши примеры не имеют ничего общего с Windows 7 или .NET. На самом деле они уже были частью требований логотипа «Разработано для Windows NT 4.0». Если вы написали свое приложение так, чтобы пользователи без прав администратора могли запускать его на NT, Win2k или XP, оно будет нормально работать на Vista / Win7.

Существует еще одна распространенная ошибка при запуске программного обеспечения в системах x64 (однако это также не характерно для Win7, но верно, например, для Win2003 Server x64 или Win XP x64): если вы работаете с нативным 32- битовый код, такой как вызовы собственной DLL или COM-взаимодействия с внутрипроцессным компонентом), обязательно выберите «x86» в качестве целевой платформы в настройках проекта Visual Studio вместо «Any CPU». В противном случае ваше приложение будет работать как 64-битный процесс, и вы не сможете смешать 32- и 64-битный код в одном и том же процессе, что приведет к ошибкам.

И, конечно, как всегда было лучше, используйте Environment.GetSpecialFolders вместо жестко закодированных путей.

3 голосов
/ 16 апреля 2010

Я не верю, что получение переменных среды требует повышения привилегий. По крайней мере, я никогда не сталкивался с этим, есть ли случаи, когда это правда?

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

Ничто в .Net Framework не требует прав администратора. Все, что связано с безопасностью на уровне пользователя, контролируется ОС, а вопрос о том, требуются ли права администратора, зависит от конфигурации ОС. Таким образом, каркас не может определить, требуется ли ему повышение прав.

Вы должны думать не с точки зрения «Что в платформе .Net требует повышения прав?», А с точки зрения «Какие функции ОС использует мое приложение, требующие повышения прав администратора в конфигурации по умолчанию». И, как сказал @Marcus, требования к логотипу «Разработано для Windows NT 4.0» являются очень хорошей отправной точкой для определения того, каких функций ОС следует избегать в вашем приложении, если оно предназначено для работы в качестве обычного пользователя.

2 голосов
/ 15 апреля 2010

Именованные каналы могут вызывать проблемы. Обычно это не проблема, но использование именованных каналов в настоящее время увеличивается, поскольку WCF изначально поддерживает их для транспорта IPC.

2 голосов
/ 12 апреля 2010

Одним из мест, где можно получить частичный список, является поиск в «Редакторе локальной групповой политики», где вы можете проверить, какие права и привилегии входа в систему назначаются только администраторам по умолчанию.

1 голос
/ 17 апреля 2010

Если я правильно понимаю ваш вопрос, Visual Studio может рассчитать это для вас ...

Просто зайдите в свойства вашего проекта, щелкните вкладку «Безопасность» и установите флажок «Включить параметры безопасности ClickOnce». Установите переключатель «Это приложение с частичным доверием» и нажмите кнопку «Рассчитать разрешения».

VS будет ставить галочку рядом с каждым разрешением, таким как IO, Реестр и т. Д. Ваше приложение требует ...

1 голос
/ 17 апреля 2010

Вы можете использовать проверки Luapriv из Application Verifier , чтобы помочь вам найти проблемы. Также вам поможет Стандартный пользовательский анализатор .

0 голосов
/ 17 апреля 2010

Я серьезно сомневаюсь, что есть способ получить полный список вызовов .NET, которые требуют повышения привилегий.

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

Лучший способ выяснить, какие части вашего кода имеют проблемы, это протестировать на Win7 и посмотреть, что ломает, не элегантно, но выполняет свою работу. Если вы хотите создать оценку времени для этой задачи, вам, возможно, придется потратить один или два дня на взлом вашего приложения: запустить на Win7, посмотреть, что ломается, записать его, прокомментировать / избежать / отключить этот раздел и повторить пока вы не решите, что у вас достаточно списка вещей для решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...