在Windows服务中使用SHFileOperation

时间:2008-10-14 17:13:20

标签: windows winapi service shell32

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

4 个答案:

答案 0 :(得分:6)

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

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

或(如果您的目标是Windows Vista)FOF_NO_UI,与上述内容相同。

查看Windows SDK中的ShellAPI.h标头文件,针对FOF_NO_UI的评论说“根本不显示任何用户界面”,因此我假设可以使用{{1 }}

答案 1 :(得分:2)

我想说,不是不合适或不可取的。大多数shell32 API的编写基本理解是它们将用于交互式进程。我认为有任何方法可以保证SHFileOperation永远不会显示UI组件。事实上,如果你看一下IFileOperation(这是取代SHFileOperation的新Vista界面),它明确指出:

  

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我也遇到了这个问题,并致力于在服务器和网络共享之间实现安全可靠的网络文件复制(大多数这些共享基于CIFS / NetApp文件管理器),SHFileOperation不时失败。< / p>

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

这让我眼前一亮:https://stackoverflow.com/a/1030752/559144