2010-04-09 2 views
9

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

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

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

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

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

+4

как в сторону, конечно, эти ограничения не являются специфическими для .Net –

+2

Ни один из указанных вами примеров не обязательно требует прав администратора. Приложения могут добавлять свой собственный журнал в систему журнала событий и задавать более низкий уровень привилегий. получение переменной среды - это работа каждого пользователя. запись в ключи реестра вне HKCU зависит от ACL реестра; приложения могут создавать ключи HKLM, которые могут быть доступны для записи любым пользователем. –

+1

Кажется очень сложно получить полный список вызовов API, которые могут вызвать проблемы. Мне придется сосредоточиться на других способах определения того, произойдет ли приложение. Теперь, похоже, Дэниел Роуз предложил лучшее решение проблемы, но на самом деле это не ответ на мой вопрос. Поскольку Маркус отметил, что список в основном такой же, как и требования к логотипу NT, я дам ему награду. Спасибо всем за ваш вклад. –

ответ

8

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

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

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

+2

как это ответить на вопрос? – Alex

+0

@Alex - «Ну, ваши примеры не имеют ничего общего с Windows 7 или .NET». Нет компонентов инфраструктуры .Net, требующих административных привилегий. Существуют классы Framework, которые обертывают функциональность ОС, которая может потребовать привилегий администратора. Тем не менее, нет простого способа сказать, сможет ли какой-либо конкретный метод .NET использовать такую ​​функцию. –

2

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

+0

Это интересный подход. Поскольку Corp.IT имеет тенденцию злоупотреблять политикой на моем сайте клиента, это может также привести к хорошим результатам. –

8

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

2

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

+0

Спасибо. Я добавлю это в свой список. –

3

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

+0

Возможно, вы правы. Мой подход состоял в том, чтобы сначала составить список возможных болевых точек, а затем определить для каждого из них, попадает ли я в беду. –

2

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

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

+0

Точка взята. Дело в том, что, если я смогу сузить его до набора библиотек, станет возможным сканировать (все) кодовые базы при возникновении любого из них, что бы быстро указывало на возможные проблемы. –

+0

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

+0

Ошибка администратора не вызвана вызовами метода вообще. То, что может быть вызвано, - «сбой, если вы не подняты». Это разные. –

1

Вы можете использовать проверки Luapriv от Application Verifier, чтобы помочь вам найти проблемы. Также вам помогут Standard User Analyzer.

+0

Это отличные ресурсы. Они, безусловно, помогут мне в выполнении моей работы. Благодаря! –

+0

Фактически эти инструменты являются частью набора средств обеспечения совместимости приложений: http://www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&displaylang=en –

1

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

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

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

+0

Wow. Это похоже на хороший подход. –

0

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

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

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

+0

Если бы это было единственное приложение, которое я проверяю, я согласен с тем, что ваш подход будет хорошим. Однако, к сожалению, мы говорим о более чем 250 приложениях. И я хочу, чтобы не запускать их все по одному. –

+0

Тогда вы полностью хотите анализатор LUA (или стандартного пользователя), он будет наблюдать за запуском приложения и рассказать вам, что он делает. Получите набор инструментов из ссылок в другом ответе точно. –

Смежные вопросы