После недавней миграции с Vista 32bit на Windows 7 64bit одной из моих программ теперь требуются права администратора.
Я использую довольно экзотический текстовый редактор (Crimson Editor). Хотя он не предназначен для Vist / Win7, он хорошо работал с Vista. Но под Windows 7 исполняемый файл программы добавляет этот щит UAC к значку (хотя флаг «Запуск от имени администратора» на вкладке совместимости не установлен) и запрашивает повышение прав при каждом запуске.
Как Win7 определяет, что это приложение, похожее на блокнот, нуждается в правах администратора? Как я могу переопределить эту ложную эвристику?
Нет, причина, по которой Багровый Редактор делает это, НЕ в том, что он не подписан. (И это не ново для Win7). Это связано с тем, что указывается манифест приложения, встроенный во время компиляции requestedPrivilegeLevel="highestLevel".
Согласно этому сообщению на форуме , разработчики Crimson Editor изменили это в ревизии 237-241. Они сделали это, потому что функция «Добавить Crimson Editor в контекстные меню оболочки» требует прав администратора.
В долгосрочной перспективе разработчики Crimson Editor исправят манифест своего приложения. Они должны добавить себя в контекстные меню оболочки во время установки или, по крайней мере, сказать пользователям, что им нужно вручную запускать приложение с повышенными правами (что легко сделать) вместо того, чтобы требовать его.
Для всех приложений, имеющих requestedPrivilegeLevel="highestLevel"в своем манифесте (используйте представление манифеста для просмотра манифестов приложения), вы можете использовать Microsoft Compatibility Toolkit, чтобы закрепить приложение с помощью исправления RunAsInvoker, которое заставляет приложение работать с вашими токенами обычного пользователя.
Для получения дополнительной информации о том, как использовать Application Compatibility Toolkit, см. Этот пост о применении его в Crimson Editor или общие инструкции .
В качестве альтернативы вы можете заменить существующий манифест с помощью инструмента командной строки mt.exe, который вы можете получить бесплатно с помощью Visual Studio Express (долгоиграющего, но оно того стоит, если вы часто сталкиваетесь с этой проблемой). Обратите внимание, что замена встроенного манифеста изменит файл .exe, поэтому a) убедитесь, что у вас есть его копия на случай, если что-то сломаете, и b) если он был подписан, вы сломаете подпись (но в этом случае кажется, что у вас есть уже определили, что оно все равно не подписано).
AdamV
.d.stro, вы спасатель, он прекрасно работает.
флопия
1
+1 за «исправить свое приложение» и использовать инструментарий AppCompat, чтобы исправить их ошибки для них.
Ян Бойд
13
Я обнаружил, что у меня есть два приложения, которые имели эту проблему. Один имел «update» в имени файла, а другой имел «update» в «FileDecsription». Я просто удалил слово «обновление» из этих двух приложений и больше не предупреждал UAC. Я нашел информацию в разделе «Как работает UAC» - «Обнаружение установщика» по адресу:
Интерактивные процессы, работающие от имени обычного пользователя с включенным контролем учетных записей
Перед созданием 32-битного процесса проверяются следующие атрибуты, чтобы определить, является ли он установщиком:
Имя файла включает в себя такие ключевые слова, как «установить», «настройка» и «обновление».
Ключевые слова в следующих полях ресурсов управления версиями: поставщик, название компании, название продукта, описание файла, исходное имя файла, внутреннее имя и имя экспорта.
Ключевые слова в параллельном манифесте приложения встроены в исполняемый файл.
Ключевые слова в определенных записях StringTable, связанных в исполняемом файле.
Ключевые атрибуты в данных файла ресурсов связаны в исполняемом файле.
Целевые последовательности байтов в исполняемом файле.
Примечание. Ключевые слова и последовательности байтов были получены из общих характеристик, наблюдаемых в различных установочных технологиях.
Если у вас есть Visual Studio, вы можете сделать следующее:
Откройте Visual Studio от имени администратора.
Нажмите Ctrl-O, чтобы открыть файл
Перейдите в папку, где находится Crimson Editor, и откройте cedt.exe.
Файл открывается с помощью редактора ресурсов, и вы увидите дерево с веткой с именем RT_MANIFEST, разверните его и дважды щелкните одну дочернюю запись с именем «1 [англ. United States]»
Примерно в трех четвертях пути вниз в правом столбце вы увидите требуемый уровень_высвоенного уровня = «наибольший доступный», измените «наибольший доступный» на «asInvoker» (примечание: редактор по умолчанию открывается в режиме перезаписи).
MSDN говорит о «встраивании» манифеста. Разве это не делается при компиляции программы? Нужно ли самому скомпилировать Crimson Editor, чтобы получить такой манифест?
SealedSun
5
Вы можете добавить файл filename.exe.manifest в ту же папку, и Windows прочтет его соответствующим образом.
Я обнаружил, что у меня есть два приложения, которые имели эту проблему. Один имел «update» в имени файла, а другой имел «update» в «FileDecsription». Я просто удалил слово «обновление» из этих двух приложений и больше не предупреждал UAC. Я нашел информацию в разделе «Как работает UAC» - «Обнаружение установщика» по адресу:
http://msdn.microsoft.com/en-us/library/aa905330.aspx
Который заявляет следующее:
источник
Если у вас есть Visual Studio, вы можете сделать следующее:
НТН
Kevan
источник
Здесь есть некоторая информация об эвристике: http://msdn.microsoft.com/en-us/library/aa905330.aspx
Манифест может помочь контролировать некоторые из этих вещей.
источник