У нас есть настольное приложение для x86 Win32. Когда установщик запускается пользователем Standard (non-Admin), мы не поднимаем и/или не показываем приглашение UAC и не устанавливаем его под C:\Users\username\AppData\Roaming\...
вместо общего каталога Program Files
.Как предотвратить повышение уровня удаления для стандартного пользователя Windows 10?
В Windows 10, когда наш деинсталлятор запущен с Control Panel -> Programs -> Programs and Features
, не отображается приглашение UAC, и программа удаления работает без повышения. Это желаемое поведение. Когда тот же самый деинсталлятор запускается с Start -> Settings -> System -> Apps & features
, отображается приглашение UAC.
(Такое же поведение можно увидеть в Opera инсталлятора браузера/деинсталлятор. Я проверил v35.0.2066.37.)
Почему же деинсталлятор ведут себя по-разному при запуске из Apps & features
против Programs and Features
?
Как избежать подсказки UAC при запуске деинсталлятора из приложений &?
манифеста нашего деинсталлятор включает в себя следующее:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" />
</requestedPrivileges>
</security>
</trustInfo>
Я попытался изменить requestedExecutionLevel
, а также попытался удалить trustInfo
полностью, но не было никаких изменений в поведении либо образом.
Протестировано на Windows 10 версия 1511 сборка 10586.104.
Редактировать: Просто, чтобы уточнить, случай, который я пытаюсь обработать, заключается в том, что пользователь имеет стандартную учетную запись и не знает пароль учетной записи администратора. Если они видят приглашение UAC при попытке удалить, у них нет выбора, кроме как отменить его, и наш деинсталлятор не запускается.
Я только что провел утро, занимаясь этой «особенностью». Единственный подход, который сработал для нас, заключался в том, чтобы перезагрузить компьютер как текущий пользователь. Ниже приведено описание подхода, в котором Explorer используется для повторного запуска исполняемого файла: http://brandonlive.com/2008/04/27/getting-the-shell-to-run-an-application-for-you -часть-2-хау/ мы используем NSIS, поэтому мы смогли использовать ShellExecAsUser плагин, который основан на первой ссылке: http://nsis.sourceforge.net/ShellExecAsUser_plug-in –
I предположим, что это не касается первичной проблемы, но для нас проблема заключается в том, что удаление не выполняется при запуске, потому что ему необходимо получить доступ к HKCU и LocalAppData.Это не затрагивает проблему предотвращения возвышения, но даже установка Chrome для Chrome (и, как вы заметили, Opera) испытывает такую же проблему с уровнем выше в Windows 10 при удалении из приложений и функций, поэтому мы считаем, что этого недостаточно для того, чтобы сбой и выполнение в качестве текущего пользователя независимо от того, запущен ли он повышенным или нет. –