代码之家  ›  专栏  ›  技术社区  ›  Sachin Shanbhag

如何使用c代码禁用IIS上的文件监视

  •  3
  • Sachin Shanbhag  · 技术社区  · 14 年前

    我发现下面给出的代码片段用于禁用IIS服务器上的文件监视(文件更改通知),但代码没有按预期工作。下面的监视器对象正在获取空值。不确定是否需要其他代码或任何其他设置。有没有人能提出为什么会得到空值,或者有没有更好的方法在C#中实现这一点-

    //FIX disable AppDomain restart when deleting subdirectory
    
    //This code will turn off monitoring from the root website directory.
    
    //Monitoring of Bin, App_Themes and other folders will still be operational, so updated DLLs will still auto deploy.
    
    System.Reflection.PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
    
    object o = p.GetValue(null, null);
    
    System.Reflection.FieldInfo f = o.GetType().GetField("_dirMonSubdirs", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.IgnoreCase);
    
    object monitor = f.GetValue(o); //Returns NULL
    
    System.Reflection.MethodInfo m = monitor.GetType().GetMethod("StopMonitoring", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); m.Invoke(monitor, new object[] { }); 
    
    1 回复  |  直到 14 年前
        1
  •  5
  •   SLaks    14 年前

    我在.Net 3.5 SP1上使用以下代码:

    var theRuntime = typeof(HttpRuntime).GetField("_theRuntime", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
    var fcmField = typeof(HttpRuntime).GetField("_fcm", BindingFlags.NonPublic | BindingFlags.Instance);
    
    var fcm = fcmField.GetValue(theRuntime);
    fcmField.FieldType.GetMethod("Stop", BindingFlags.Instance | BindingFlags.NonPublic).Invoke(fcm, null);