【问题标题】:Volume Shadow Copy using Java使用 Java 进行卷影复制
【发布时间】:2012-12-03 18:53:12
【问题描述】:

我目前正在创建一个备份应用程序,我们需要一种方法来读取其他应用程序正在使用的文件,并且我们还希望最大限度地减少我们对用户文件的锁定。使用 Window 的卷影复制服务似乎是我们实现这一目标的完美方式。

然而,我们的问题是我们使用的是 Java。无论如何我们有什么简单的方法来实现它(使用一些库甚至可能是一些 CLI)?

【问题讨论】:

  • 这只是一种意见,但您要做的是为“本地”语言(例如 C++)工作。从 Java 连接到 OS API 非常麻烦,而且速度非常慢。
  • JNI is'nt slow - 如果它真的适合你......好吧......你的代码中很可能有重大的编程错误。为 JNI 编写本机库也没有“麻烦”但是相当......不方便 - 如果你从未编写过 C/C++,你很可能会得到很多学习和一些需要考虑的事情,但仅此而已 - 还有JNA,这使它更容易一点,也更少“麻烦”

标签: java windows locking volume-shadow-service


【解决方案1】:

我以前做过。

我们发现最简单的方法是构建 vshadow.exe 的 4 个版本(Microsoft 网站上用于快速启动 VSS 的演示工具):一个用于 XP/later 中的每个目标平台,以及x86/x64。 VShadow 基本上允许创建或销毁快照并检索如下所示的路径:

\\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyXX 可用于替换与 JAVA File API 一起使用的驱动器号(例如 D:)。 VSS SDK的VShadow版本是可读写的,这和你可以直接下载的exe是只读的版本不同。

然后,在 Java 中,很容易编写两个具有统一接口的 CLI 包装器(用于处理 VShadow 在 XP 和更高版本之间的两种不同行为)。

祝你好运。

【讨论】:

    【解决方案2】:

    所以,我对 VSS 了解不多,但在从 Java 访问 Windows 原生 API 方面,我会查看 JNA。您可能会发现有人已经将相关的 API 定义移植到 JNA。

    【讨论】:

      【解决方案3】:

      嗯......通过 Java 来做这件事可能很棘手,而且很容易出错

      一个简单的方法是编写一个小的本地 DLL,它可以使用 VSS API 执行您希望 VSS 执行的操作

      然后使用 C# pInvoke 或 C++/CLI ...然后您可以使用任何其他符合 CLI 的语言

      【讨论】:

        猜你喜欢
        • 2017-08-04
        • 2014-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        • 1970-01-01
        • 2011-10-04
        • 2011-03-18
        相关资源
        最近更新 更多