在过去的几个月里,一直在努力开发SharpShell项目。这是一个允许使用.NET Framework快速构建Windows Shell扩展的项目。用户面临的一个难题是,要部署一个用.NET编写的Shell扩展,必须使用regasm工具,这个工具通常只安装在开发机器上。
有了SharpShell 2.0,引入了一个服务器注册管理器工具,使得部署SharpShell服务器变得轻而易举。
本文是'.NET Shell Extensions'系列文章的一部分,包括:
什么是SharpShell?
SharpShell是一个非常轻量级的类库,它允许使用.NET Framework构建Windows Shell扩展。正如从上面的链接中看到的,支持很多不同类型的服务器。可以在GitHub页面上找到一个良好的介绍,以及每种类型服务器的示例:
用C或C++编写的Shell扩展部署通常是直接的,因为Windows中包含的regsvr32工具可以使用。然而,要部署一个托管的Shell扩展,必须使用regasm工具,这个工具默认不包含在Windows中。在SharpShell中添加了'Server Registration Manager'工具(srm.exe),使得安装和卸载服务器变得非常容易。
从本文下载SharpShell工具二进制文件,或从获取最新版本。使用这个工具,可以像这样安装服务器:
srm install server.dll -codebase
简单吧!可以像这样卸载同一个服务器:
srm uninstall server.dll
这是本文的关键要点。srm工具可以安装和卸载服务器——所有其他机制(如Windows安装程序)将简单地在幕后使用这个工具。
在这个例子中,将使用Visual Studio 2010为'Count Lines'扩展创建一个安装程序,该扩展是在第一篇文章中编写的。
提示:也可以使用WiX——只需创建一个自定义动作来运行上面显示的命令!
在Visual Studio 2010中创建一个新的'Setup and Deployment'项目。现在将SharpShell服务器和srm.exe工具添加到应用程序文件夹中,如下所示:
现在导航到安装程序的'Custom Actions'部分。创建一个新的'Install'自定义动作,从应用程序文件夹中执行srm.exe工具:
可以点击这个动作来设置属性。需要传递参数'install',服务器的路径,以及'-codebase'标志(告诉它直接安装服务器,而不是使用对GAC的引用)。
确保'InstallerClass'属性设置为False,否则安装程序将尝试从EXE加载一个Installer Class对象,而它并不包含。
现在为Uninstall创建一个类似的动作——这次,需要在命令行上使用'uninstall'命令,服务器路径与之前相同,没有-codebase标志。这是在这个例子中使用的命令行:
uninstall "[TARGETDIR]\CountLinesExtension.dll"
就是这样!现在可以运行安装程序来安装SharpShell服务器了!