Настройте манифест приложения C++ Builder XE3

Я добавил права администратора в свое приложение, используя файл.manifest, потому что мне нужен доступ к реестру. Это в моем.exe сейчас. До того, как я это сделал, в моем приложении была включена хорошая тема времени выполнения. Эта тема меня беспокоит. Похоже, старые версии Windows. Полностью устаревший. Я знаю, что это из-за того файла.manifest, который я использовал, но я не знаю, что добавить / изменить / удалить в файле.manifest, чтобы включить тему Windows и сохранить права администратора. Что я должен делать?

Это внутри моего файла.manifest:

<?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="*"
     name="My app"
     type="win32"/> 
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
            <application> 
                <!--This Id value indicates the application supports Windows Vista functionality -->
                <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
                <!--This Id value indicates the application supports Windows 7 functionality-->
                <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
                <!--This Id value indicates the application supports Windows 8 functionality-->
                <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
                <!--This Id value indicates the application supports Windows 8.1 functionality-->
                <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
            </application> 
    </compatibility>
    <!-- Identify the application security requirements. -->
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel
                level="requireAdministrator"
                uiAccess="false"/>
            </requestedPrivileges>
       </security>
  </trustInfo>
</assembly>

1 ответ

Решение

Приложение может иметь только 1 манифест, поэтому, когда вы используете собственный манифест, вы несете ответственность за указание ВСЕХ соответствующих разделов, которые должны быть показаны в вашем приложении. Таким образом, вам нужно добавить раздел, который включает ComCtrl32 v6:

<?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="*"
    name="My app"
    type="win32"/> 
  <!-- enable Comctrl v6 for visual styles -->
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="*"
        publicKeyToken="6595b64144ccf1df"
        language="*"/>
    </dependentAssembly>
  </dependency>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
      <!--This Id value indicates the application supports Windows Vista functionality -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
      <!--This Id value indicates the application supports Windows 7 functionality-->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--This Id value indicates the application supports Windows 8 functionality-->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <!--This Id value indicates the application supports Windows 8.1 functionality-->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
    </application> 
  </compatibility>
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>
Другие вопросы по тегам