ASP技巧TOP10 (4)

---摘自互联网
9、如何更新被锁定的DLL
如果你正在使用Visual Basic COM组件，一定知道更新组件版本时候所出现的错误信息“不能更新DLL文件，访问禁止”，或许已经有好多次被它挡驾了。下面我们介绍的是一个小巧的批命令文件，你可以用它来自动启动或关闭锁定DLL文件的MTS。
问：
我们所用的IIS 4.0上运行着ASP和一个Visual Basic 6.0 DLL文件，DLL文件用来为ASP页面提供数据服务。问题是，当我们想要把Web服务器上的DLL升级到新的版本时，系统总是显示DLL文件正在使用中，既不能上载也不能注册这个新的DLL。我们试过关闭Web网站以及IIS，但DLL文件仍处于使用状态。唯一的办法似乎是关闭服务器。如你所知，网站运行时关闭服务器显然不太合适。你是否有解决这个问题的方法？有一个16位的工具软件WPS可以关闭DLL，然而，它不能用于VB6的DLL文件。
答：
不能更新DLL文件的原因在于Microsoft Transaction Server（MTS）已经打开了DLL的一个实例，必须使用mtxstop才能关闭它。首先，创建批命令文件FlushCache.bat，在文件中输入以下内容：
net stop iisadmin /y
mtxstop
net start w3svc
运行这个批命令文件。它将在大约5秒钟内关闭Web服务器并重新启动它。在关闭和启动两个操作之间它将清除MTS缓冲，然后你就可以更新DLL文件。
第一次运行批命令文件的时候，要注意一下其他被关闭的服务（例如FTP服务等）。写下这些被关闭的服务，然后打开批命令文件，加入代码使得这些服务也被重新启动：
net start < 服务的名字 >
2000年06月03日，Bill Bassett提出了另外一种方法：
有一种解决该问题的更为简单的方法，这就是配置应用使其运行在自己独立的内存空间中。运行IIS MMC，右击包含目标应用的分支，选择“属性”。在属性对话框中间的应用设置区，输入应用的名字并选中“在独立的内存空间运行”检查框。
应用运行的时候，只要再次打开其属性页面就可以看到此时“卸载”按钮已经变为可用了。点击这个按钮应用卸载，你可以更新DLL文件。该操作并不取消DLL的注册，所以这些工作要用regsvr32手工完成。这种方法要比关闭IIS等服务再重新启动它们要好。
10、记录文件下载日志
这是一个简单但很实用的技巧，用于监测有多少用户从网站下载了文件。
问：
我们需要监测用户在网站上的文件下载操作。当用户点击链接下载文件时，我们希望能够运行某个ASP文件将日志数据写入SQL Server数据库，然后执行下载操作。问题是，ASP页面如何才能在记录日志数据之后再将文件下载到客户端？
答：
窍门在于用超级链接启动第二个“后台”脚本，用它来记录下载日志并启动下载过程。只要第二个页面不产生任何HTML输出，用户浏览器将仍旧显示第一个页面。
下面是第一个文件中的链接示例：
Download code.zip (不要点击这个链接，它只用于演示，没有任何实际功能。）
以上链接由下面的代码创建：
< A HREF="dnladd.asp?filename=code.zip" >Download code.zip< /A >
用户点击链接时我们把待下载的文件名传递给了第二个文件dnladd.asp。Dnladd.asp包含了把下载文件名字和其他信息写入数据库的脚本。完成数据库操作后，dnladd.asp用如下代码启动下载过程：
Response.ContentType = "application/x-zip-compressed"
Response.Redirect request("filename")
注意：不要在dnladd.asp中输出任何HTML代码。