我有一个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只是一个谜,我需要了解更多.
更新:从本文中,我了解到我可以使用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:
更新2:看起来我最终会到达那里.VS 2008 在可执行文件的项目页面上添加了一个Manifest选项,我的项目已选中"使用默认设置嵌入清单".所以这回答了它是如何实现的,但我如何在Reflector中看到它?
Reflector不会让您看到非托管资源.您不需要特殊工具,只需使用Visual Studio的File + Open + File并选择.exe来浏览资源.清单可通过RT_MANIFEST节点访问.观众不是很友好,你会得到一个十六进制转储.您可以使用上下文菜单将其导出到文本文件.
C#和VB.NET编译器自动生成Vista兼容的清单.您可以使用/ win32manifest命令行选项覆盖它.当您使用Project + Add New Item + Application Manifest File时,IDE将自动执行此操作.