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