UAC считает, что мое приложение является установщиком. Часть 2 - PullRequest
2 голосов
/ 20 января 2011

Я пытался разобраться с функцией Windows UAC '', которая ищет слово «setup» или «install» в приложении и автоматически считает, что это установщик.

Я попытался добавить встроенный манифест, как предложено в этом вопросе о стекопереработке , и это решает мою проблему в Vista и 7, но ломает мое приложение на Server 2003.

Я также попробовал некоторые исправления, которые я нашел на нескольких других сайтах. Одним из предложений, которое я нашел на сайте Microsoft , было использование .config вместо .exe.config. Он отлично работал, но это не вариант, поскольку он идет вразрез с соглашением всех других наших приложений.

Другой вариант заключался в добавлении узла assemblyIdentity к самому сложному. Я попробовал это и не смог заставить это работать.

Ниже мой манифест, как он выглядит сейчас. Есть идеи?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">  
    <application>
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates application support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application>
    <dependency>
      <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
      </dependentAssembly>
    </dependency>
  </compatibility>
</assembly>

Note: This is a managed C# application. And the manifest has to be embedded into the executable.

Спасибо
Пит

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Вы должны добавить элемент <requestedExecutionLevel> в манифест приложения, как описано в этой статье (см. Раздел «Создание и встраивание манифеста с помощью Microsoft Visual Studio® 2005 для приложений Windows XP и Windows Vista». ”; этот метод будет работать как в Vista / 7, так и на сервере XP / 2003) и установить для атрибута level значение asInvoker.

Таким образом, вы исключите опцию 2 из алгоритма обнаружения установщика, указанного в этот ответ .

1 голос
/ 20 января 2011

См. Документацию MSDN . Вероятно, вы неправильно создали манифест, если он не работает на Server 2003. К сожалению, я когда-либо имел дело только с манифестами для собственного кода, поэтому я не уверен, где начать для C #

Технология обнаружения установщика

Программы установки приложений предназначен для развертывания программного обеспечения, и большинство писать в системные каталоги и ключи реестра. Эти защищенные системы места обычно доступны только для записи пользователем-администратором, что означает что стандартные пользователи не имеют достаточный доступ для установки программ. Windows Vista эвристически обнаруживает установка программ и запросов учетные данные администратора или утверждение от администратора пользователя по порядку работать с правами доступа. Windows Vista также эвристически обнаруживает Программы обновления и удаления программ. Обратите внимание, что целью разработки UAC является предотвратить установку выполняется без ведома пользователя и согласие, так как они пишут защищенные области файловой системы и реестр.

Обнаружение установщика относится только к:

  1. битовые исполняемые файлы
  2. Приложения без запрашиваемого уровня выполнения
  3. Интерактивные процессы, работающие от имени обычного пользователя с включенным LUA

Перед созданием 32-битного процесса, следующие атрибуты проверены определить, является ли это Установщик:

  • Имя файла включает ключевые слова, такие как «установить», «настроить», «обновить» и т. Д.
  • Ключевые слова в следующих полях ресурса управления версиями: поставщик, название компании, название продукта, описание файла, исходное имя файла, внутреннее имя и имя экспорта.
  • Ключевые слова в параллельном манифесте, встроенном в исполняемый файл.
  • Ключевые слова в определенных записях StringTable, связанных в исполняемом файле.
  • Ключевые атрибуты в данных RC, связанных в исполняемом файле.
  • Целевые последовательности байтов в исполняемом файле.
...