2

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

4

4 回答 4

6

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

FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR

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

查看ShellAPI.hWindows SDK 中的头文件,评论FOF_NO_UI说“根本不显示任何 UI”,因此我认为可以使用SHFileOperation.

于 2008-10-14T19:36:10.510 回答
3

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

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

于 2008-10-14T17:24:21.040 回答
1

我不得不同意:不合适或不可取。

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

于 2008-10-15T08:35:48.313 回答
0

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

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

这让我大开眼界:https ://stackoverflow.com/a/1030752/559144

于 2012-11-02T13:21:16.170 回答