Запобігати підвищенню (UAC) для програми, яка не потребує її [дублікат]


34

На це питання вже є відповідь тут:

Нещодавно перейшов з Vista 32bit на Windows 7 64bit, одна з моїх програм вимагає адміністраторських прав.

Я використовую досить екзотичний текстовий редактор (Crimson Editor). Хоча не призначений для Vist / Win7, він добре працював із Vista. Але в Windows 7 програма, яка виконує програму, отримує цей щит UAC, доданий до своєї піктограми (навіть якщо прапор "Запустити як адміністратор" на вкладці сумісності не встановлено) та вимагає підняття кожного разу, коли я запускаю його.

Як Win7 визначає, що для цього блокнотного додатка потрібні права адміністратора? Як я можу перекрити цю помилкову евристику?

Відповіді:


22

Ні, причина Crimson Editor робить це НЕ тому, що вона не підписана. (І це не нове для Win7). Це тому, що вказується маніфест програми, який вбудовується під час компіляції requestedPrivilegeLevel="highestLevel".

Відповідно до цього допису на форумі , розробники Crimson Editor змінили це в редакції 237-241. Вони зробили це тому, що функція "Додати багряний редактор до контекстних меню оболонок" вимагає прав адміністратора.

Довгострокове виправлення було б для розробників Crimson Editor виправити свій маніфест програми. Вони повинні додати себе до контекстних меню оболонки під час встановлення або принаймні сказати користувачам, що вони повинні вручну запускати додаток, підвищений (що легко зробити), а не вимагати цього.

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

Для отримання додаткової інформації про те, як використовувати інструментарій сумісності програм, перегляньте цю публікацію про її застосування до Crimson Editor або загальні інструкції .


1
Крім того, ви можете замінити існуючий маніфест за допомогою інструмента командного рядка mt.exe, який ви можете безкоштовно отримати за допомогою Visual Studio Express (довгостроково, але варто того, якщо сильно зачепите цю проблему). Зауважте, що заміна вбудованого маніфесту змінить файл .exe таким чином: a) переконайтеся, що у вас є його копія, якщо ви порушите речі, і b) якщо він був підписаний, ви порушите підпис (але, мабуть, у цьому випадку у вас є вже визначив, що все одно не підписаний).
АдамВ

the.d.stro, ти рятівник, це чудово працює.
phloopy

1
+1 для "виправлення їх програми" та використання інструментарію AppCompat, щоб виправити свої помилки.
Ян Бойд

13

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

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

У якому зазначено наступне:

Визначення інсталятора стосується лише:

  • 32-бітний виконуваний файл
  • Програми без запитуваногоExecutionLevel
  • Інтерактивні процеси, що працюють як стандартний користувач із включеним UAC

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

  • Ім'я файлу включає ключові слова, такі як "встановити", "встановити" та "оновити".
  • Ключові слова у наступних полях ресурсу версії: Постачальник, Назва компанії, Назва продукту, Опис файлу, Оригінальне ім'я файлу, Внутрішня назва та Імпорт експорту.
  • Ключові слова у маніфесті додаткового програмного забезпечення, вбудованому у виконуваний файл.
  • Ключові слова у конкретних записах StringTable, пов'язані у виконаному файлі.
  • Основні атрибути даних файлу ресурсу, пов'язані у виконуваному файлі.
  • Націлені послідовності байтів у виконуваному файлі.

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


7

Якщо у вас є Visual Studio, ви можете зробити наступне:

  1. Відкрийте Visual Studio як адміністратор.
  2. Натисніть Ctrl-O, щоб відкрити файл
  3. Перейдіть до папки, де знаходиться Crimson Editor, і відкрийте cedt.exe
  4. Файл відкривається за допомогою редактора ресурсів, і ви побачите дерево з гілкою з назвою RT_MANIFEST, розгорніть це та двічі клацніть один дочірній запис під назвою "1 [Англійська США]"
  5. Приблизно через три чверті шляху вниз у правому стовпці ви побачите затребуванийExecutionLevel level = "найвищий доступний", змініть "найвищий доступ" на "якInvoker" (зауважте, що редактор відкривається у режимі над типом за замовчуванням.
  6. Збережіть файл і закінчите.

HTH

Кеван


4

Тут ви знайдете інформацію про евристику: http://msdn.microsoft.com/en-us/library/aa905330.aspx

Маніфест може допомогти контролювати деякі з цих речей.


MSDN говорить про "вбудовування" маніфесту. Хіба це не робиться при складанні програми? Чи потрібно мені самостійно складати Crimson Editor, щоб отримати такий маніфест?
ОпечатанийСон

5
Ви можете додати файл filename.exe.manifest у ту ж папку, і Windows прочитає його відповідним чином.
Фактор Містик
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.