我正在尝试寻找一种方法来检查是否有任何使用 C# 语言进行的复制作业,因为我需要重新启动 explorer.exe 进程以刷新我的应用程序更改的一些设置。所以我想避免破坏正在进行的任何复制过程。
这里有人有一个很好的提示来解决这个问题吗?
提前致谢
我要在这里冒险,但是afaik这不在Windows复制命令的(臭名昭著的有限)可能性范围内。
然而, RoboCopy(可能还有其他类似的工具)支持在完成时返回值。
只要未收到返回值,这将允许您轻松阻止(自动)终止 explorer.exe 进程(尽管手动终止,当然这仍然可能)。
由于您说副本不是由您发起的,因此值得使用FileSystemWatcher,尽管您也需要注意它的局限性
您可以尝试获取 explorer.exe 的页面错误增量计数器。请参阅此链接。如果这个数字很高(我知道不是精确的科学),就会发生一些事情(也许是副本?)。
这不会给你一个明确的答案,而是一个提示。尽管页面错误很少甚至为零,但复制可能仍在进行中 - 例如,当复制向用户显示提示、等待网络等时。您可以监视该过程几秒钟,如果页面错误很低,请询问用户是否可以重新启动该过程。
未经测试的想法,但可能值得探索。