none
监视通过C#打开的应用 RRS feed

  • 问题

  • 请教一下,在.net里面,是否有这样一个方法,用来监控指定文件的打开关闭的。

    比如我打开一个.doc,在word里面是会用线程追加到一个进程中的。

    这样我怎么才能知道我什么时候关闭了这个.doc?

    2011年12月9日 3:00

答案

  •  你可以参阅这篇文章,检查文件是否打开的宏代码:

    http://support.microsoft.com/kb/291295/zh-cn

     


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Paul Zhou 2011年12月19日 7:51
    2011年12月13日 7:37
  • 检查某个DOC文档是否被WORD打开的话,倒是有一个笨方法。

    WORD默认是以非共享的方式打开文件的,也就是说,如果用户不是用"以副本方式打开"的方式打开DOC文件,如果你再用试图用非共享方式打开那个DOC文档,就会收到IOException异常。

    代码非常简单:

    try
    {
        FileStream fileStream = System.IO.File.Open(@"c:\abc.doc", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
        fileStream.Close();
    
        //文件c:\abc.doc或许未被打开
    }
    catch(System.IO.IOException)
    {
        //文件c:\abc.doc已被打开
    }
    


    至于监测文件什么时候被关闭,那就过一段时间检查一次,发现上段代码不catch异常了,就是文件被关闭了。需要注意的是,即使检测到文件没被打开,也不一定准确,因为打开文件的程序可能是以允许共享的方式打开文件的。

    我知道,这方法很昏,能让你满意的可能性极小。但在.NET里面,好像也就这样了。即使平台调用,windows的文件内核对象好像也没提供关于打开关闭的等待通知,如果再深入到挂钩子搞注入甚至写驱动的程度,就偏的离谱些了。

    或许您应该从最原始的目标出发重新考虑一下实现方式,到底是什么需求让您去监测一个文件的关闭,除了监测文件关闭,没有其它方式完成了个需求了么。


    Wantal
    • 已编辑 Wantal 2011年12月17日 1:05 补充了最后一段
    • 已标记为答案 Paul Zhou 2011年12月19日 7:51
    2011年12月16日 14:46

全部回复

  •  你可以参阅这篇文章,检查文件是否打开的宏代码:

    http://support.microsoft.com/kb/291295/zh-cn

     


    Paul Zhou [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Paul Zhou 2011年12月19日 7:51
    2011年12月13日 7:37
  • 检查某个DOC文档是否被WORD打开的话,倒是有一个笨方法。

    WORD默认是以非共享的方式打开文件的,也就是说,如果用户不是用"以副本方式打开"的方式打开DOC文件,如果你再用试图用非共享方式打开那个DOC文档,就会收到IOException异常。

    代码非常简单:

    try
    {
        FileStream fileStream = System.IO.File.Open(@"c:\abc.doc", FileMode.Open, FileAccess.ReadWrite, FileShare.None);
        fileStream.Close();
    
        //文件c:\abc.doc或许未被打开
    }
    catch(System.IO.IOException)
    {
        //文件c:\abc.doc已被打开
    }
    


    至于监测文件什么时候被关闭,那就过一段时间检查一次,发现上段代码不catch异常了,就是文件被关闭了。需要注意的是,即使检测到文件没被打开,也不一定准确,因为打开文件的程序可能是以允许共享的方式打开文件的。

    我知道,这方法很昏,能让你满意的可能性极小。但在.NET里面,好像也就这样了。即使平台调用,windows的文件内核对象好像也没提供关于打开关闭的等待通知,如果再深入到挂钩子搞注入甚至写驱动的程度,就偏的离谱些了。

    或许您应该从最原始的目标出发重新考虑一下实现方式,到底是什么需求让您去监测一个文件的关闭,除了监测文件关闭,没有其它方式完成了个需求了么。


    Wantal
    • 已编辑 Wantal 2011年12月17日 1:05 补充了最后一段
    • 已标记为答案 Paul Zhou 2011年12月19日 7:51
    2011年12月16日 14:46