Добавление манифеста для запроса прав администратора

У меня есть приложение, которое записывает настройки программы в реестр windows, что абсолютно необходимо.сохранение в файл не является опцией.

чтобы упростить это, я хотел бы дать экран "admin privileges" nag вместо того, чтобы пытаться объяснить, как щелкнуть правой кнопкой мыши на файле программы/short cut.

Я нашел достаточно хорошую статью, но я получаю дубликат ошибки ресурса после добавления моего собственного файла ресурса для манифеста.

Это предположительно из-за конфликта с внутренним манифестом и для решения проблемы я вижу много комментариев, предлагающих "включить темы выполнения", чтобы быть отключенным в параметрах проекта. Я просмотрел все меню, но не могу найти его, и теперь мне сказали, что он может быть недоступен в Delphi 7 и был представлен в более поздних версиях.

Как я могу добавить свой собственный манифест?

3 ответов


в более новых версиях Delphi это больше не требуется.
Под Параметры Проекта, потом приложение, есть раздел для манифеста:

Manifest options
скриншот из версии 10.2.1 Tokyo

это автоматически заботится о манифесте XP, упомянутом в качестве предупреждения в botom С kobik это.

Я не знаю, из какой версии Delphi это было доступный.
(Бесплатно редактировать этот ответ, если вы знаете).


я уже прокомментировал ,что"запись настроек программы в реестр не является надлежащей причиной для предоставления привилегий администратора приложения". Однако в любом случае рекомендуется включить манифест ОАК. общее requestedExecutionLevel должно быть level="asInvoker". посмотреть документы

"Q: Adding manifest for admin rights request for delphi 7"

создайте следующие 4 файла (2 набора):


(только UAC)

ОАК.манифест

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="MyApp" type="win32"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

ОАК.rc

1 24 "uac.manifest"

(UAC + XP темы)

uac_xp.манифест

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="MyApp" version="1.0.0.0" processorArchitecture="x86"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
  <!-- Windows Vista application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
        </requestedPrivileges>
       </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--Windows 7-->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--Windows Vista-->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
    </application>
  </compatibility>   
</assembly>

uac_xp.rc

1 24 "uac_xp.manifest"

добавить нужные (uac.rc или uac_xp.rc) в ваш проект через пункт меню "проект > добавить в проект". Это создаст .

в качестве альтернативы вы можете скомпилировать через brcc32 uac.rc вне Delphi IDE. а затем добавить {$R 'uac_xp.res'} вручную для вашего проекта.


убедитесь, что вы не используете другой манифест XP.


Как удалить" Внутренний " манифест из проекта Delphi 7 ?

это Внутренний манифест был в Delphi 7 раз представлен TXPManifest компонент, единственной целью которого было добавить XPMan.pas unit к предложению uses единицы формы, где она была удалена. Это XPMan.pas unit затем включил файл ресурсов с самим манифестом в выходные данные проекта.

Итак, чтобы удалить этот внутренние манифест, вам нужно удалить все TXPManifest компоненты из всех форм вашего проекта (если вы их использовали), а также все XPMan использует ссылки на предложения из всех единиц вашего проекта.

короче, сделайте следующие два шага для всех подразделений проекта (первый шаг является необязательным, если вы не использовали TXPManifest компоненты, но и вторая):

enter image description here