Они делают это, чтобы не отставать от.Net..Net, позволяет C#, VB, J# (раньше), F#, Python, Ruby (прибывающий скоро), и C++. Я, вероятно, скучаю по некоторым. Вероятно, большим там является Python для людей сценариев.
Такое поведение вызвано тем, что приложения, собранные с Delphi 7 по умолчанию, не имеют манифеста или не имеют атрибута requestedExecutionLevel
. Из-за этого Windows считает , что вам нужен доступ администратора, когда имя вашего приложения содержит такие слова, как Setup
или Update
. этот процесс называется Installer Detection Technology
и был введен вместе с UAC с Windows Vista.
С сайта MSDN:
Обнаружение установщика применяется только к:
32-разрядным исполняемым файлам
Приложения без requestExecutionLevel
Интерактивные процессы, выполняемые как обычный пользователь с включенным 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>