6

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

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

4

3 回答 3

8

我以前这样做过。

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

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

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

祝你好运。

于 2012-10-10T14:21:58.633 回答
2

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

于 2012-03-15T21:25:11.833 回答
1

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

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

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

于 2012-03-15T22:19:51.773 回答