这些 Shell 扩展是为了帮助区分 .NET 程序集和 Win32 库,以及在不使用命令提示符和 SDK 工具的情况下提供有关程序集的额外信息而编写的。这些 Shell 扩展的功能类似于使 .NET 和 VB(.NET 之前)成为可执行代码的加载器:PE/COFF 头。因此,该库非常快速,不会影响文件系统浏览体验。最近的更新通过跳过在慢速路径上的程序集检测(例如,UNC 路径或通过 VPN 映射到远程文件系统的驱动器映射)进一步提高了性能。
此库中包含:
此工具不仅帮助区分 .NET 程序集和 Win32 应用程序及库,还提供了一个简单的自动化对象,这些 Shell 扩展使用该对象。要从此类型库生成代码,请添加对名为 "AsmShell 1.0 Type Library" 的类型库的引用或 #import。使用以下成员:
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 等)中,方法签名将如下所示:
C#
bool IsAssembly(
string path);
FileType GetFileType(
string path);
string GetPublicKeyToken(
string path);
byte[] GetPublicKey(
string path);
如果正在安装的文件当前已加载,则可能需要重新启动。如果使用的是 Windows XP 并且上述条件为假,则不需要重新启动。如果使用的是 Windows 98、ME 或 2000,如果覆盖图标不存在,则应该注销并重新登录或重新启动系统;列处理程序应在安装完成后立即准备就绪。