3

我有一个 WinForms .NET 应用程序,根据启用了 UAC 的 Vista 任务管理器,即使我不记得向应用程序添加带有“asInvoker”的清单,它也会在虚拟化“已禁用”的情况下运行。VS.NET(这个项目已经通过了所有四个版本的 VS.NET)必须添加了我在解决方案资源管理器中看到的\Properties\app.manifest文件,但是这个文件不包含我希望禁用虚拟化的trustinfo元素. 所以我启动了 Reflector 以查看可能嵌入到我的实际可执行文件中的内容,但我找不到 app.manifest 文件。我应该能够在可执行文件中找到它的清单或标志吗?根据 VS 2008,构建动作是BaseApplicationManifest,但这是否意味着它没有嵌入到可执行文件中?如果我没有要求,有人可以解释为什么我的应用程序在禁用虚拟化的情况下运行,并且一旦解释,有人可以指出我在哪里找到通过反射器在我的应用程序中导致此问题的工件?

作为 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:
<?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 中看到它呢?

4

2 回答 2

9

反射器不允许您查看非托管资源。您不需要特殊工具,只需使用 Visual Studio 的 File + Open + File 并选择您的 .exe 即可浏览资源。清单可通过 RT_MANIFEST 节点访问。观众不是很友好,你会得到一个十六进制转储。您可以使用上下文菜单将其导出到文本文件。

C# 和 VB.NET 编译器会自动生成与 Vista 兼容的清单。您可以使用/win32manifest 命令行选项覆盖它。当您使用 Project + Add New Item + Application Manifest File 时,IDE 会自动执行此操作。

于 2009-02-09T19:30:58.637 回答
3

也许它是一个win32资源,因此反射器看不到?您可以使用像这样的 win32 资源编辑器查看 win32 资源。

于 2009-02-08T17:02:36.440 回答