上一篇我們寫了Nhibernate Profiler 2.0 的破解,做的是破壞性的工作,這篇我們來點建設性的東西--為Nhibernate Profiler 增加一個附加到進程的功能……
注:本來 是講要寫一個自動破解工具 的 ……
沒用過Nhibernate Profiler的人可能不明白我究竟在說些什么
所以,我們先來簡單說一說Nhibernate Profiler是怎么使用的。
要想使用Nhibernate Profiler的功能,首先要在你的工程里添加一個對HibernatingRhinos.Profiler.Appender.dll的引用,這個文件就在Nhibernate Profiler 根目錄下,添加引用后,還要找個合適的地方(啟動的時候,Nhibernate初始化前后等)加這么一句
HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize();
這是相當讓人蛋疼的事情,我一般稱這種為強奸式調試工具,也就是說不管你願不願意,他都要強行插入,這點實在讓人無法忍受,那么怎么樣才能既不被強奸又能使用它的功能呢,方法當然是有的,這正是我們下面要來描述的。
一樣的,為了更好的描述實現思路,我們先來看看實現后的樣子
不過在這之前,我們還要做一些准備,至少得准備一個使用了Nhibernate技術的程序作為測試的目標,這個在附錄的根目錄下有一個叫測試的文件夾,那里面有一個解決方案,這是我參考Nhibernate官網的Get Start 寫的一個Winform例子 (目前我們這個只支持附加到32位的Winform程序,要想附加到WEB的話,可能要重新實現很多東西,暫時懶得研究了,有時間的話可能會去再搞搞,要想實現附加到64位的Winform,需要設置一些參數,重新編譯,這個 在講解的時候會 提到)。 看源碼可以知道,我們這個並沒有引入HibernatingRhinos.Profiler.Appender.dll,也沒有在代碼加那句話 ,要的就是這樣的純潔性,純的讓你雞動。 當然如果你不想看代碼的話,在這個目錄下還有一個build文件夾,里面有一個Winform.exe 是編譯后的文件,可以直接運行,當然運行前, 要先建數據庫表,建表語句在build文件下有一個Tables.sql ,我使用的是SQL SERVER數據庫,建好后,再配置一下hibernate.cfg.xml里的數據庫連接選項。 這些做完后,運行或者直接打開 Winform.exe 。
先不要點 按鈕
回到附錄的根目錄下的NHProf文件夾,找到NHProfLancher.exe文件(注:不是NHProf.exe),雙擊打開。 本來是准備實現成點擊 Help菜單的第一個選項(原來是Commercial Support ,現在我已經改成 Attach To Process了)就可以打開附加選項的,但令人蛋疼的silverlight權限問題(用spy++看一下就知道了,silverlight的桌面應用其實也就是在一個WEBBROWSER控件里執行xap ,所以他不是一個完整意義的桌面程序),這就使得他的權限其實和WEB的權限是一樣的,所以Process.Start打開網址可以,但當想打開一個本地文件時卻完全沒啥反應了,另外對silverlight也不是很熟,所以也就懶得去深入研究了,在這里只是簡單的改了個容易識別的網址 , 留着以后有時間再研究 吧 )
雙擊 NHProfLancher.exe后,我們發現程序已經打開了。
這時候回到剛才的測試程序Winform.exe 。然后點擊 按鈕
插入成功,看看數據庫也成功了,再看看Nhibernate Profiler的主界面。
沒啥反應 ,這是當然的,這是不被強奸的下場 。
OKAY ,這時候 CTRL + ALT + 1 (1,2,3那個1,這么蛋疼的熱鍵,我想不會和別的沖突了吧)。
調出了附加進程。
(名字Form1 你先看着吧)
可以看到列出了所有的32位的DotNet程序的進程。其中也包括了我們的那個測試程序 Winform.vshost(調試模式下的進程名) 選中她
點擊,會彈出如下的提示框
點擊確定 。
這時候看一看NHibernate Profier 的主界面
看到上面的那個Winform了嗎,說明已經附加上去了,當然還是要確實一下,回到測試程序。再點擊 添加數據 。 這時候再看一下 Nhibernate Profiler 主界面
已經監控到剛才 那個操作了。 OKAY…… :) 依然的又雞動一次
這篇先寫到這里,下篇來分析下實現原理。