Используя Reflector, почему я не вижу app.manifest, встроенный в мое приложение .NET? - PullRequest
2 голосов
/ 08 февраля 2009

У меня есть приложение WinForms .NET, которое, согласно диспетчеру задач Vista с включенным UAC, работает с виртуализацией «Отключено», хотя я не припоминаю добавления манифеста с «asInvoker» в приложение. VS.NET (этот проект прошел все четыре версии VS.NET) должен был добавить файл \ Properties \ app.manifest , который я вижу в обозревателе решений, но этот файл не содержит Элемент trustinfo Я бы ожидал отключить виртуализацию. Поэтому я запустил Reflector, чтобы посмотреть, что может быть встроено в мой фактический исполняемый файл, но я не могу найти файл app.manifest. Должен ли я найти манифест или его признаки в исполняемом файле? В соответствии с VS 2008, действие сборки - BaseApplicationManifest , но означает ли это, что оно не встроено в exableable? Может ли кто-нибудь объяснить, почему мое приложение работает с отключенной виртуализацией, если я об этом не просил, и, однажды объяснив, может ли кто-нибудь указать мне, где я могу найти артефакт, вызывающий это в моем приложении через Reflector?

В качестве продолжения моего приложения app.manifest, который знает, как долго, оно заполнено всеми видами IP-разрешений, которые, я не уверен, мне больше нужны. Что добавляет содержимое в этот файл и может ли оно содержать разрешения, которые мне больше не нужны? Это должно быть сокращено или управляемо? Я должен явно добавить trustinfo к этому? Я думаю, app.manifest - это просто загадка, о которой мне нужно узнать больше.

Обновление: Из этой статьи я узнал, что могу использовать утилиту SysInternals / Microsoft Sigcheck для просмотра следующей информации, но я не знаю, как мое приложение было подписано с MyApplication .приложение. Где это происходит в процессе сборки?

c:\Users\Public\Programs\SysinternalsSuite>sigcheck.exe -m ceo.exe

sigcheck v1.54 - sigcheck
Copyright (C) 2004-2008 Mark Russinovich
Sysinternals - www.sysinternals.com

"c:\Users\Public\Programs\SysinternalsSuite\ceo.exe":
        Verified:       Unsigned
        File date:      1:47 PM 2/6/2009
        Publisher:      CEO Image Systems
        Description:    Main Menu
        Product:        Image Executive CEO
        Version:        2.0.0.0
        File version:   2.0.0.0
        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" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

Обновление 2: Похоже, я доберусь до конца. В VS 2008 добавлена ​​опция Manifest на странице проекта исполняемого файла, для которой в моем проекте выбрано «Встраивать манифест с настройками по умолчанию». Так что это ответит, как оно туда попало, но как я могу увидеть это в Reflector?

Ответы [ 2 ]

8 голосов
/ 09 февраля 2009

Reflector не позволяет вам видеть неуправляемые ресурсы. Вам не нужен специальный инструмент, просто используйте Visual Studio File + Open + File и выберите ваш .exe для просмотра ресурсов. Манифест доступен через узел RT_MANIFEST. Зритель не очень дружелюбен, вы получите шестнадцатеричный дамп. Вы можете использовать контекстное меню, чтобы экспортировать его в текстовый файл.

Компиляторы C # и VB.NET автоматически генерируют манифест, совместимый с Vista. Вы можете переопределить это с параметром командной строки / win32manifest . Именно это будет делать среда IDE автоматически при использовании Project + Add New Item + File Manifest File.

3 голосов
/ 08 февраля 2009

Может быть, это ресурс win32, и поэтому Reflector его не видит? Вы можете увидеть ресурсы win32 с помощью редактора ресурсов win32, например this .

...