Добавление файла манифеста в мое приложение все еще не дает ему повышенных привилегий

Как описано в ответе на этот вопрос, я добавил файл манифеста в свое приложение.NET Core, которое я запускаю позже, вызвав dotnet.exe run application.dll, Я не пользовалась mt.exe - насколько я понимаю, он не работает для моей целевой платформы и предназначен только для "обычных" приложений.NET.

Мой файл манифеста выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
             If you want to change the Windows User Account Control level replace the 
             requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            Specifying requestedExecutionLevel element will disable file and registry virtualization. 
            Remove this element if your application requires this virtualization for backwards
            compatibility.
        -->
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>

  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- A list of the Windows versions that this application has been tested on and is
           is designed to work with. Uncomment the appropriate elements and Windows will 
           automatically selected the most compatible environment. -->

      <!-- Windows Vista -->
      <!--<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />-->

      <!-- Windows 7 -->
      <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />-->

      <!-- Windows 8 -->
      <!--<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />-->

      <!-- Windows 8.1 -->
      <!--<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />-->

      <!-- Windows 10 -->
      <!--<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />-->

    </application>
  </compatibility>

  <!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
       DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need 
       to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should 
       also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
  <!--
  <application xmlns="urn:schemas-microsoft-com:asm.v3">
    <windowsSettings>
      <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
    </windowsSettings>
  </application>
  -->

  <!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
  <!--
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
          type="win32"
          name="Microsoft.Windows.Common-Controls"
          version="6.0.0.0"
          processorArchitecture="*"
          publicKeyToken="6595b64144ccf1df"
          language="*"
        />
    </dependentAssembly>
  </dependency>
  -->

</assembly>

Как видите, я запрашиваю повышенные привилегии - в моем случае, чтобы экспортировать некоторые ключи реестра. При запуске.dll с dotnet.exe run application.dllсамо приложение работает, но я все еще получаю ошибку, что доступ запрещен. В дополнение к этому, обычно должен быть запрос UAC, не так ли?

Почему это не работает? Я сделал что-то не так? Я что-то забыл? Может кто знает, из-за ли это.NET Core? У меня уже были некоторые другие проблемы, касающиеся некоторых библиотек и пакетов из-за.NET Core...

1 ответ

Используйте что-то вроде Resource Hacker, чтобы убедиться, что ваш действительно внедрен как ресурс:

Если ваш компилятор / компоновщик не добавляет RT_MANIFEST ресурс для вашего .exe(как предлагает jjxtra ), затем получите другую среду разработки.

Или вместо этого поместите манифест в той же папке, что и ваш исполняемый файл:

  • MyApplication.exe
  • MyApplication.exe.manifest
Другие вопросы по тегам