UAC: файл манифеста игнорируется

Один из моих исполняемых файлов записывает некоторую конфигурацию в файл XML в C: \ Program Files \ MyApp \ config.xml. Он должен запускаться от имени администратора в Vista / Server 2008, иначе ОС не позволит ему писать в это место.

Я включил файл манифеста с именем config.exe.manifest, чтобы автоматически запрашивать права администратора при запуске.

Вот мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Я пробовал это на Windows Server 2008, но кажется, что файл манифеста игнорируется, и исполняемый файл запускается без достаточных прав.


person Jan Gressmann    schedule 18.09.2009    source источник


Ответы (3)


http://blogs.msdn.com/junfeng/archive/2009/05/11/internal-manifest-vs-external-manifest.aspx

цитируется по ссылке выше: В Windows XP Sxs ищет внешний манифест перед внутренним манифестом. Если обнаружен внешний манифест, внутренний манифест игнорируется.

В Windows Server 2003 и более поздних версиях порядок обратный. Внутренний манифест предпочтительнее внешнего.

Если вы используете внешний манифест и ваш сценарий работает в Windows XP, но не в Windows Server 2003 и более поздних версиях, дважды проверьте, что у исполняемого файла нет внутреннего манифеста.

person antony    schedule 14.10.2009

Это сведет вас с ума - разобрался в сути и опубликовал статью и несколько утилит, которые помогут игнорировать ваш манифест: Узнайте, почему ваш внешний манифест игнорируется.

person Darwin    schedule 07.01.2011

Хорошо, это работает, когда я встраиваю файл манифеста с помощью MT.EXE. До сих пор не понимаю, почему это не работает, когда я предоставляю манифест в виде отдельного файла, но я думаю, что встраивание - достаточно хорошее решение.

person Jan Gressmann    schedule 18.09.2009
comment
Антоний прав: убедитесь, что у вас нет какого-либо манифеста, встроенного в исполняемый файл - тогда загрузчик Windows будет использовать внешний. - person Ian Boyd; 10.11.2009