65.9K
CodeProject 正在变化。 阅读更多。
Home

用于 .NET 程序集的 Shell 扩展

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.98/5 (26投票s)

2002 年 9 月 19 日

Ms-PL

3分钟阅读

viewsIcon

196380

downloadIcon

2623

Shell 扩展用于区分 .NET 程序集和 Win32 应用程序及库。

关于用于 .NET 程序集的 Shell 扩展

编写这些 Shell 扩展是为了帮助区分 .NET 程序集和 Win32 库,并提供关于程序集的额外信息,而无需使用 SDK 和 CLR 工具切换到命令行。这些 Shell 扩展的功能类似于使得 .NET 和 VB(.NET 之前版本)能够作为可执行代码的加载器:PE/COFF 头。因此,该库速度非常快,不会影响您的文件系统浏览体验。最近的更新通过在慢速路径(如 UNC 路径或通过 VPN 映射到远程文件系统的驱动器)上跳过程序集检测,进一步提高了性能。

本库提供:

  1. 用于 .NET 程序集 (.dll) 的叠加图标

    Overlay icon 

  2. 列处理程序,用于显示 .NET 程序集的公钥标记和特定类型。

    Column handlers 

  3. 自动化对象,用于在您自己的应用程序和库中获取上述信息。

自动化对象

此工具不仅可以帮助您区分 .NET 程序集和 Win32 应用程序及库,还提供了一个简单的自动化对象,供这些 Shell 扩展使用。

要从类型库生成代码,请添加对名为“AsmShell 1.0 Type Library”的类型库的引用或使用 #import。请按照以下方式使用 IAssemblyInfo 自动化接口的成员:

  • IAssemblyInfo::IsAssembly([in]BSTR path, [out, retval]VARIANT_BOOL* retVal)
    如果指定的文件是程序集,则返回 true,如果不是,则返回 false,并在出现问题时引发错误。
  • IAssemblyInfo::GetFileType([in]BSTR path, [out, retval]FileType* retVal)
    根据 PE/COFF 头中指定文件的信息,返回一个 FileType 枚举成员。
  • IAssemblyInfo::GetPublicKeyToken([in]BSTR path, [out, retval]BSTR* retVal)
    返回指定程序集的公钥标记。
  • IAssemblyInfo::GetPublicKey([in]BSTR path, [out, retval]SAFEARRAY(BYTE)* retVal)
    以字节数组的形式返回指定程序集的公钥。JScript 或 VBScript 不支持此功能,它们仅支持 VARIANT 数组。

对于每个方法,Visual Basic 等后期绑定语言将使用返回值(标记为 [out, retval])作为方法的返回类型,这样也无需使用上面带有指定属性的参数。

因此,在 VB6 和 .NET(C#、VB.NET 等)中,方法签名将如下所示:

bool IsAssembly(string path);
FileType GetFileType(string path);
string GetPublicKeyToken(string path);
byte[] GetPublicKey(string path);

要求

如果安装的文件当前正在加载,您可能需要重新启动。如果您使用的是 Windows XP 且前述条件不成立,则无需重新启动。如果您使用的是 Windows 98、ME 或 2000,并且叠加图标未显示,则应注销并重新登录或重新启动系统;列处理程序应在安装完成后立即准备就绪。

变更

  • 2005 年 11 月 17 日
    • 注意:早期版本的文章的后期更新
    • 增加了对显示 x86(和 MSIL)程序集以及 IA64 和 x64 的支持
  • 2005年5月30日
  • 2004 年 8 月 29 日
    • 增加了本地化支持
    • 字符串缓存以提高性能
    • 支持 .NET 模块 (.netmodule)
  • 2003 年 10 月 15 日
    • 增加了不应解析慢速路径(例如 VPN)文件的条件
  • 2002 年 9 月 19 日
    • 在 Code Project 上首次向网络发布

免责声明

本软件按“原样”提供,不提供任何明示或暗示的担保,包括但不限于适销性和特定用途适用性的暗示担保。在任何情况下,作者或其贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于购买替代商品或服务;使用、数据或利润损失;或业务中断)负责,无论是由何种原因引起,也无论是在合同、严格责任或侵权(包括疏忽或其他)的任何理论下产生的,即使已被告知可能发生此类损害。

© . All rights reserved.