今天分享一下FileMon和RegMon如何在App-V client端使用,假如有哪裡說得不對,請大家指正,謝謝.
FileMon和RegMon是來做workstation的排錯有用的工具,有時候我們會用它們來進行排錯,但是你可能會發現, FileMon和RegMon在App-V client端用不了,它不能對App-V client的client端的Q盤進行捕獲,會出現以下的錯誤. (下面以Filemon為例子,你可以為 RegMon 中使用相同的步驟)
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaucDM1ATN2EjMxUTN2kzMlhTMyEjM2ADNwkDMvwFNwkDMfhGdu9Wbvw1ckF2bsBXdfd3Xw9CXuNmLz9mbpdnLzJmYvw1LcpDc0RHaiojIsJye.jpg)
那麼,怎樣才能讓FileMon捕捉到Q盤的資料進行應用程式的排錯呢,我們可以這樣做
1. 在Server端,我們以DefaultApp為例, 我們打開DefaultApp.osd, 在<dependency> 标記之後添加以下行,儲存退出
<SCRIPT TIMEOUT="0" TIMING="PRE" EVENT="LAUNCH" WAIT="TRUE" PROTECT="TRUE">
<SCRIPTBODY>%systemroot%\system32\cmd.exe</SCRIPTBODY>
</SCRIPT>
解釋:
TIMING="PRE"和EVENT="LAUNCH"暗示這個script在你要啟動的應用程式啟動前執行
WAIT="TRUE"必須等待這個script執行完成才會嘗試啟動會讓應用程式啟動,這樣就可以更好地捕捉到啟動的全過程,友善排錯
TIMEOUT="0" 指這個script不會timeout,一直運作,給你足夠的時間進行排錯
PROTECT="TRUE" 提供了進入虛拟環境的權限。假如PROTECT="FALSE",就不能進入Q盤或者虛拟系統資料庫,那系統資料庫的任何改變都有可能影響到實際的作業系統
2. 在Client端,當DefaultApp啟動時,首先會先啟動指令行,這時我們定位到filemon.exe的位置(如本例中的C:\ filemon.exe)将其啟動
3. 你可能會收到以下報錯, 系統找不到檔案. 原因是 FileMon 和 RegMon可執行檔案中使用嵌入的服務, 而本地服務控制管理器(Services.exe) 無法通路虛拟環境,是以FileMon 和 RegMon 工具在不會啟動。
4. 我們去C:\system32\drivers确認一下FileMon的sys檔案的具體檔案名是filem701.sys還是filem.sys,因版本不同這裡可能有所差別
5. 使用記事本編輯一個檔案,添加以下的文本接着建立儲存為 *. reg (*為你命名檔案名的名字)檔案導入到App-V client端的系統資料庫中,這次FileMon就可以找到檔案了 (假如剛才你檢查到本機裝的filemon使用的是filem.sys,請将以下的701三個字母删去)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Filemon701]
"Type"=dword:00000001
"ErrorControl"=dword:00000001
"Start"=dword:00000003
"ImagePath"="\\??\\c:\\windows\\system32\\drivers\\filem701.sys"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Regmon701]
"ImagePath"=[url=file://\\??\\c:\\windows\\system32\\drivers\\regsys701.sys]\\??\\c:\\windows\\system32\\drivers\\regsys701.sys[/url]
6. 我們重新關閉Default App啟動一次, 重複第二步操作, 這是不會報錯說系統找不到檔案了,這次我們可以成功捕獲到Q盤的資訊