2012-09-03 48 views
0

在應用程序的已知文件夾中修改,添加或刪除某些類型的文件將導致應用程序重新啓動。但是,當應用程序中的日誌文件更新時,爲什麼應用程序不重新啓動。 然後應用程序重新啓動以刪除,添加,更新文件夾

PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static); 
object o = p.GetValue(null, null); 
FieldInfo f = o.GetType().GetField("_dirMonSubdirs", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.IgnoreCase); 
object monitor = f.GetValue(o); 
MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", BindingFlags.Instance | BindingFlags.NonPublic); 
m.Invoke(monitor, new object[] { }); 

有了這些變化,我可以創建/修改/,而不會導致重新啓動應用程序刪除文件夾。但是這個代碼適用於所有應用程序的已知文件夾。我想知道是否爲一個文件夾而不導致應用程序重新啓動。

+0

如果日誌文件不是應用程序安裝的一部分,則不會導致應用程序重新啓動。例如,如果應用程序通過ILog實現日誌記錄,由於日誌文件是由應用程序創建的,而不是在安裝期間創建的,並且對於應用程序的運行不是必需的,所以不會導致重新啓動。 –

+0

感謝您的解釋。我想知道一個文件夾的StopMonitoring System.Reflection.MethodInfo,而不會導致應用程序重新啓動。 – amm

+0

你使用ASP.Net 2.0嗎?並且是你的會議InProc? –

回答

0

您的問題是因爲一旦修改或刪除應用程序目錄中的任何文件,就會導致appDomain重新啓動以加載更改。你可以找到4個選項:

  1. 禁用目錄監視,你已經嘗試過。
  2. 在應用程序下創建一個虛擬目錄,並將其指向應用程序文件夾外的文件夾。將需要更改的內容移至此文件夾並可進行更改。
  3. 使用超出處理會話。
  4. 修改註冊表以禁用監視給出(不推薦):

註冊表信息

loadTOCNode(3, '分辨率'); HKLM \ Software \ Microsoft \ ASP.NET \ FCNMode

下表列出了FCNMode DWORD值 的可能值以及與每個值關聯的行爲。

值行爲不存在這是默認行爲。對於每個 子目錄,應用程序將創建一個對象,該對象將監視 子目錄。 0或大於2這是默認行爲。 對於每個子目錄,應用程序將創建一個對象,將 監視子目錄。

1該應用程序將禁用文件更改通知(FCN)。 [:)]。

2該應用程序將創建一個對象來監視主目錄 。應用程序將使用此對象來監視每個 子目錄。

地,上述方法需要從here

此外,你可以通過下面的鏈接瞭解更多信息:

嗯,這可能能夠幫助您解決問題,我找不到任何有關停止appDomain更改監視特定文件夾的事情。要麼它會監視變化與否。 希望這有助於。乾杯。

相關問題