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>
Другие вопросы по тегам