【问题标题】:Using SHFileOperation within a Windows service在 Windows 服务中使用 SHFileOperation
【发布时间】:2008-10-14 17:13:20
【问题描述】:

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

【问题讨论】:

    标签: windows winapi service shell32


    【解决方案1】:

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

    FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR
    

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 在这一点上,我同意。我正在考虑使用它,因为它似乎可以复制文件及其安全描述符。标准 CopyFile 没有,因此需要额外的代码才能获得相同的行为。
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2010-11-12
          • 2011-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-23
          • 2014-06-24
          • 2020-06-10
          • 2015-04-10
          相关资源
          最近更新 更多