Запретить повышение прав (UAC) для приложения, которому оно не нужно

После недавней миграции с Vista 32bit на Windows 7 64bit одной из моих программ теперь требуются права администратора.

Я использую довольно экзотический текстовый редактор (Crimson Editor). Хотя он не предназначен для Vist/Win7, он хорошо работал с Vista. Но под Windows 7 исполняемый файл программы добавляет этот щит UAC к значку (хотя флаг "Запуск от имени администратора" на вкладке совместимости не установлен) и запрашивает повышение прав при каждом запуске.

Как Win7 определяет, что это приложение, похожее на блокнот, нуждается в правах администратора? Как я могу переопределить эту ложную эвристику?

4 ответа

Решение

Нет, причина, по которой Crimson Editor делает это, НЕ в том, что он не подписан. (И это не ново для Win7). Это связано с тем, что манифест приложения, встроенный во время компиляции, определяет requestedPrivilegeLevel="highestLevel",

Согласно этому сообщению на форуме, разработчики Crimson Editor изменили это в ревизии 237-241. Они сделали это, потому что функция "Добавить Crimson Editor в контекстные меню оболочки" требует прав администратора.

В долгосрочной перспективе разработчики Crimson Editor исправят манифест своего приложения. Они должны добавить себя в контекстные меню оболочки во время установки или, по крайней мере, сказать пользователям, что им нужно вручную запускать приложение с повышенными правами (что легко сделать) вместо того, чтобы требовать его.

Для всех приложений с requestedPrivilegeLevel="highestLevel" в их манифесте (используйте Manifest View для просмотра манифестов приложения), вы можете использовать Microsoft Compatibility Toolkit, чтобы закрепить приложение с помощью исправления RunAsInvoker, которое заставляет приложение работать с вашими стандартными пользовательскими токенами.

Для получения дополнительной информации о том, как использовать Application Compatibility Toolkit, см. Этот пост о применении его в Crimson Editor или общие инструкции.

Я обнаружил, что у меня есть два приложения, которые имели эту проблему. Один имел "update" в имени файла, а другой имел "update" в "FileDecsription". Я просто удалил слово "обновление" из этих двух приложений и больше не предупреждал UAC. Я нашел информацию в разделе "Как работает UAC" - "Обнаружение установщика" по адресу:

http://msdn.microsoft.com/en-us/library/aa905330.aspx

Который заявляет следующее:

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

  • 32-битные исполняемые файлы
  • Приложения без запрашиваемого уровня выполнения
  • Интерактивные процессы, работающие от имени обычного пользователя с включенным контролем учетных записей

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

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

  • Примечание. Ключевые слова и последовательности байтов были получены из общих характеристик, наблюдаемых в различных установочных технологиях.

Если у вас есть Visual Studio, вы можете сделать следующее:

  1. Откройте Visual Studio от имени администратора.
  2. Нажмите Ctrl-O, чтобы открыть файл
  3. Перейдите в папку, где находится Crimson Editor, и откройте cedt.exe.
  4. Файл открывается с помощью редактора ресурсов, и вы увидите дерево с веткой с именем RT_MANIFEST, разверните его и дважды щелкните по одной дочерней записи с именем "1 [англ. United States]"
  5. Примерно в трех четвертях пути вниз в правом столбце вы увидите требуемый уровень_высвоенного уровня = "наибольший доступный", измените "наибольший доступный" на "asInvoker" (примечание: редактор по умолчанию открывается в режиме перезаписи).
  6. Сохраните файл, и все готово.

НТН

Kevan

Здесь есть некоторая информация об эвристике: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Манифест может помочь контролировать некоторые из этих вещей.

Другие вопросы по тегам