UAC подскажите при установке из интернет проводника
Здравствуйте, создали установщик, который устанавливает приложение на уровне пользователя. Когда я извлекаю setup.exe из cab-файла и запускаю локально, он не запрашивает у меня UAC, устанавливает нормально и устанавливает в контексте пользователя.
Приложение и кабина имеют цифровую подпись.
Но когда я устанавливаю то же самое с помощью установщика одним щелчком, он запрашивает UAC и устанавливает его в контексте администратора.
Может ли кто-нибудь пролить свет на то, почему тот же setup.exe ведет себя по-разному?
Что я могу сделать, чтобы избежать этого?
Я хочу, чтобы мое приложение было установлено на уровне пользователя без прав администратора?
1 ответ
Я думаю, что setup.exe
вызывает эвристику совместимости настроек UAC. Из MSDN:
Контроль учетных записей: обнаружение установок приложений и запрос на повышение прав
При обнаружении установочного пакета приложения, требующего повышения прав, пользователю предлагается ввести административное имя пользователя и пароль. Если пользователь вводит действительные учетные данные, операция продолжается с применимой привилегией.
Windows пытается обнаружить определенные приложения, которые являются установщиками (например, те, которые содержат setup, install, update в их именах файлов) и будет пытаться автоматически поднять их. Microsoft делает это как хак совместимости:
- большинство пользователей не осознают, что они должны щелкнуть правой кнопкой мыши приложение установки и выбрать " Запуск от имени администратора".
- еще меньше разработчиков правильно помечают свой установщик как requireAdministrator
- еще меньше разработчиков используют MSI, который знает, как / когда / если повышать до администратора
Вы можете сообщить Windows, что ваше приложение не должно запускаться от имени администратора. Вы делаете это, добавляя asInvoker
опция манифеста сборки вашего исполняемого файла:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="X86"
name="client"
type="win32"
/>
<description>CodeJunkie Widget Installer</description>
<!-- Disable Setup elevation compatibility heuristics since we're named setup.exe -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>