在Windows服务中使用SHFileOperation

这是可能的,但在Windows服务中使用SHFileOperation是否合适? shell32.dll中的所有SHxxx API函数似乎都是用用户级程序编写的。 我可以确定SHFileOperation不会显示GUI?

Solutions Collecting From Web of "在Windows服务中使用SHFileOperation"

我会说,这不是不适当或不可取的。 大部分的shell32 API都是基本理解的,它们将被用在交互过程中。 我不认为有什么方法可以保证SHFileOperation永远不会显示UI组件。 事实上,如果你看看IFileOperation (这是替代SHFileOperation的新的Vista界面),它明确指出:

公开复制,移动,重命名,创建和删除Shell项目的方法,以及提供进度和错误对话框的方法。 该接口取代了SHFileOperation功能。

根据SHFILEOPTSTRUCT文档,您可以使用以下标志来防止出现任何UI:

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR 

或者(如果您的目标是Windows Vista) FOF_NO_UI ,它与上面相同。

查看Windows SDK中的ShellAPI.h头文件,针对FOF_NO_UI的注释称“根本不显示任何UI”,因此,我认为使用SHFileOperation

我必须同意:不适当或不可取

使用SHFileOperation的原因是使用UI执行操作,和/或可逆的操作。 即使用SHFileOperation删除文件将把文件放在回收站,而不是删除它们,允许当前交互式用户取消删除,或撤消执行的操作。 由于这些服务在非交互式桌面上运行,因此没有人能够清除回收站。

我也有这个问题,并且在服务器和网络共享(大多数这些共享是基于CIFS / NetApp文件的)之间实现安全可靠的网络文件副本,并且SHFileOperation不时地失败。

现在开始使用ROBOCOPY (从Vista / server 2008以上的所有Microsoft操作系统默认可用),并且看起来非常有趣和可靠。

这已经打开了我的眼睛: https : //stackoverflow.com/a/1030752/559144