在Windows服务中使用SHFileOperation

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

1

4 答案

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

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

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

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

6
额外

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

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

2
额外
在这一点上,我同意。我正在考虑使用它,因为它似乎复制文件及其安全描述符。标准的CopyFile不会,所以它需要额外的代码来获得相同的行为。
额外 作者 Charles,

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

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

1
额外

我也遇到了这个问题,并致力于在服务器和网络共享(大多数这些共享是基于CIFS/NetApp文件管理器)和 SHFileOperation 不时失败的情况下实现安全可靠的网络文件副本。

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

this has opened my eyes: https://stackoverflow.com/a/1030752/559144

0
额外