Подтвердить что ты не робот

Как избежать UAC, когда мое имя файла EXE содержит слово "обновление"?

Я заметил следующее явление:

Исполняемый файл, созданный с помощью Delphi 7 и часть имени, включая "Обновление" (например, "UpdateMyApp.exe" ), приводит к тому, что UAC переходит к отображению предупреждения типа "вы хотите, чтобы программа вносила изменения на ваш компьютер".

Это происходит с простым мировым приложением hello. Отображение файла в проводнике показывает символ экрана, наложенный на значок приложения.

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

Как уже упоминалось, это происходит только с программами, создаваемыми с помощью Delphi 7, и запускается в Windows 7 (я предполагаю, что это относится к Vista), но не напр. WinXP.

Быстрая проверка с Delphi 2007 показывает, что эта проблема ушла.

Смешные... страшные...

Помимо переименования файла, что я могу сделать, чтобы предотвратить это?

4b9b3361

Ответ 1

Такое поведение вызвано тем, что приложения, созданные с помощью Delphi 7 по умолчанию, не имеют манифеста или имеют один атрибут requestedExecutionLevel, Из-за этого Windows думает, что вам нужен доступ администратора, когда ваше имя приложения содержит слова типа Setup или Update. этот процесс называется Installer Detection Technology и был представлен вместе с UAC с Windows Vista.

С сайта MSDN:

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

  • 32-разрядные исполняемые файлы

  • Приложения без requestExecutionLevel

  • Интерактивные процессы, выполняемые в качестве стандартного пользователя с включенным LUA

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

  • Имя файла включает такие ключевые слова, как "установка", "настройка", "обновление" и т.д.
  • Ключевые слова в следующих полях Ресурсы Версии: Поставщик, Название компании, название продукта, файл Описание, оригинальное имя файла, Внутреннее имя и имя экспорта.
  • Ключевые слова в бок о бок манифест, встроенный в исполняемый файл.
  • Ключевые слова в определенных строковых записях, связанных в исполняемом файле.
  • Ключевые атрибуты в данных RC, связанных с исполняемым файлом.
  • Целевые последовательности байтов в исполняемом файле.

Кроме того, Delphi 2007 по умолчанию включает манифест в ваших приложениях с ключом requestedExecutionLevel.

Это пример, который проявляется в Delphi 2007. Вы можете видеть, что этот манифест имеет атрибут requestedExecutionLevel в контенте.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
    type="win32"
    name="CodeGear RAD Studio"
    version="11.0.2902.10471" 
    processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
        </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>