top
Loading...
ASP技巧TOP10(轉)(四)
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代碼。

北斗有巢氏 有巢氏北斗