Макрос _T () изменяется для символьных данных UNICODE

Они делают это, чтобы не отставать от.Net..Net, позволяет C#, VB, J# (раньше), F#, Python, Ruby (прибывающий скоро), и C++. Я, вероятно, скучаю по некоторым. Вероятно, большим там является Python для людей сценариев.

26
задан Rob Kennedy 9 November 2010 в 15:24
поделиться

1 ответ

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

С сайта MSDN:

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

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

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

  3. Интерактивные процессы, выполняемые как обычный пользователь с включенным LUA

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

  • Имя файла включает в себя такие ключевые слова, как «установка», «настройка», «обновление» и т. д.
  • Ключевые слова в следующих полях ресурса управления версиями: поставщик, название компании, название продукта, описание файла, исходное имя файла, внутреннее имя и имя экспорта.
  • Ключевые слова в параллельном манифесте, встроенном в исполняемый файл.
  • Ключевые слова в определенных записях StringTable, связанных в исполняемом файле.
  • Ключевые атрибуты в данных 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>
47
ответ дан 28 November 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: