2013-12-11 4 views
0

Привет, я создал установщик, который устанавливает приложение на уровне пользователя. Когда я извлекаю файл setup.exe из файла cab и запускаю его локально, он не запрашивает у меня UAC и не устанавливается нормально и не устанавливается в пользовательском контексте.UAC запрос при установке из Internet explorer

Приложение и кабина имеют цифровую подпись.

Но когда я устанавливаю то же самое с помощью установщика с одним кликом, он предлагает мне UAC и устанавливает его в контексте администратора.

Может ли кто-нибудь выбросить какой-то свет, почему же setup.exe ведет себя по-другому?

Что я могу сделать, чтобы этого избежать?

Я хочу, чтобы мое приложение было установлено на уровне пользователя без доступа администратора?

ответ

0

Я предполагаю, что setup.exe запускает UAC setup compatibility heuristic. Из MSDN:

User Account Control: Detect application installations and prompt for elevation

Когда пакет установки приложения обнаруживается, что требуется повышение привилегий, пользователь предлагается ввести административное имя пользователя и пароль. Если пользователь вводит действительные учетные данные, операция продолжается с применимой привилегией.

для Windows пытается обнаружить некоторые приложения, которые монтажники (например, те, которые содержат установку, установить, обновление в именах файлов) и будет пытаться поднять их автоматически. 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>