我有一个WinForms .NET应用程序,根据启用了UAC的Vista任务管理器,运行虚拟化“已禁用”,即使我不记得在应用程序中添加带有“asInvoker”的清单。 VS.NET(这个项目经历了VS.NET的所有四个版本)必须添加我在解决方案资源管理器中看到的 \ Properties \ app.manifest 文件,但此文件不包含 trustinfo 元素我原本希望禁用虚拟化。所以我启动了Reflector以查看可能嵌入到我的实际可执行文件中的内容,但是我找不到app.manifest文件。我是否应该能够在可执行文件中找到它的清单或标志?根据VS 2008,构建操作是 BaseApplicationManifest ,但这是否意味着它没有嵌入在exectable中?有人可以解释为什么我的应用程序在禁用虚拟化的情况下运行,如果我没有要求它,并且一旦解释,有人可以指向我通过Reflector在我的应用程序中找到导致此问题的工件吗?
作为app.manifest在我的解决方案中的后续跟踪知道多长时间,它充满了各种各样的IPermissions,我不确定我还需要什么。什么为此文件添加内容,是否包含我不再需要的权限?它应该被修剪或管理吗?我应该向它明确添加trustinfo吗?我想app.manifest只是一个谜,我需要了解更多。
更新:从this article,我了解到我可以使用SysInternals / Microsoft Sigcheck实用程序查看以下信息,但我不知道我的应用是如何使用MyApplication.app签名的。在构建过程中发生了什么?
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中看到它?
答案 0 :(得分:8)
Reflector不会让您看到非托管资源。您不需要特殊工具,只需使用Visual Studio的File + Open + File并选择.exe来浏览资源。清单可通过RT_MANIFEST节点访问。观众不是很友好,你会得到一个十六进制转储。您可以使用上下文菜单将其导出到文本文件。
C#和VB.NET编译器自动生成Vista兼容的清单。您可以使用/win32manifest command line option覆盖此值。当您使用Project + Add New Item + Application Manifest File时,IDE将自动执行此操作。
答案 1 :(得分:3)
也许它是一个win32资源,因此Reflector无法看到它?您可以使用win32资源编辑器(如this one)查看win32资源。