2015-10-23 5 views
0

У нас есть клиентское приложение C# Windows Forms. Это приложение иногда необходимо проверять на наличие обновлений с доверенного внутреннего веб-сайта, загружать их, устанавливать и перезапускать.Нарушение поведения UAC Различия между Windows 8.1 и Windows 10

Для того, чтобы приложение, совместимое с функцией контроля учетных записей (UAC), мы внедренный манифест в EXE-файл, который запрашивает самые высокие доступные привилегии:

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
    <security> 
    <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 
    </requestedPrivileges> 
    </security> 
</trustInfo> 

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

Пользователи работали с этим приложением в Windows 7, Windows 8 и Windows 8.1 некоторое время, когда UAC полностью включен. В этих операционных системах, когда наше приложение запущено, Windows не предлагает пользователю поднять права администратора.

В настоящее время мы тестируем поведение в Windows 10. В системе Windows 10 с включенным полным UAC Windows запрашивает стандартных пользователей для повышения до администратора. Ничто другое не изменилось. .EXE - это то же самое, а встроенный манифест - это тот же запрошенный уровень выполнения highestAvailable.

Мы протестировали это с клиентскими файлами в C: \ Program Files и в C: \ Users \ Public. Оба местоположения имеют одинаковое поведение.

Почему поведение по высоте UAC отличается от Windows 10? Является ли поведение предыдущих версий ошибкой в ​​UAC? Должно ли это побуждать к подъему все это время?

Обратите внимание, что мы должны поддерживать UAC. Я знаю, как отключить его.

Также обратите внимание, что я протестировал изменение манифеста на requestedExecutionLevel из asInvoker. Это не запрашивая возвышении на ОС Windows 10.

- ОБНОВЛЕНИЕ -

Мы отследили высоту, предлагающее к различию локальных пользователей и пользователей домена. This MSDN article говорит:

Применение поведение запуска для обычного пользователя с дополнительными правами (например, резервное копирование оператора) ... [будет] запрашивать учетные данные перед запуском приложения

Мы видим, что локальные пользователи не стандартные запрос на повышение, но пользователи локального домена запрашиваются для повышения. Единственные привилегии, которые пользователь домена имеет для ограниченного пользователя, являются членами роли пользователей домена.

ответ

0

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

Если ваша программа требует прав администратора для работы, вам необходимо использовать requireAdministrator в манифесте. Когда стандартный пользователь запускает такой процесс, отображается диалоговое окно UAC over-the-shoulder, где пользователь может вводить учетные данные учетной записи администратора.

+0

Я понимаю, что означает 'highAvailable'.Я не понимаю, почему 'highAvailable' запрашивает повышение в Windows 10, но не запрашивает повышение в Windows 7. Это похоже на изменение поведения для меня. У учетной записи пользователя нет привилегий администратора. Права администратора, вероятно, не требуются, поскольку стандартный пользователь должен иметь полный доступ к файлам программного обеспечения. –

+0

, если вам не нужны права администратора, смените highAvailable на asInvoker, поскольку он по умолчанию используется для нового программного обеспечения. – magicandre1981