2016-02-17 7 views
8

У нас есть настольное приложение для 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 при попытке удалить, у них нет выбора, кроме как отменить его, и наш деинсталлятор не запускается.

+0

Я только что провел утро, занимаясь этой «особенностью». Единственный подход, который сработал для нас, заключался в том, чтобы перезагрузить компьютер как текущий пользователь. Ниже приведено описание подхода, в котором 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 –

+0

I предположим, что это не касается первичной проблемы, но для нас проблема заключается в том, что удаление не выполняется при запуске, потому что ему необходимо получить доступ к HKCU и LocalAppData.Это не затрагивает проблему предотвращения возвышения, но даже установка Chrome для Chrome (и, как вы заметили, Opera) испытывает такую ​​же проблему с уровнем выше в Windows 10 при удалении из приложений и функций, поэтому мы считаем, что этого недостаточно для того, чтобы сбой и выполнение в качестве текущего пользователя независимо от того, запущен ли он повышенным или нет. –

ответ

3

Это ошибка в «Приложениях &», насколько я знаю. У людей WiX есть closed this issue как ошибка Windows, и я предполагаю, что они уведомили правильных людей @ Microsoft. Поведение по-прежнему остается неизменным в Insider build 15042, хотя, вероятно, не будет исправлено вовремя для обновления для авторов.

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

Если они могут поднять, то вы можете использовать re-spawn workaround, размещенные в комментариях, или вручную загрузить профиль пользователя и позвонить RegOverridePredefKey, но они оба уродливые хаки (IMHO).

+0

Вы только что спасли мне смешное количество отладки, спасибо. – johnwbyrd