使用Java进行卷影复制

时间:2012-03-15 21:23:27

标签: java windows locking volume-shadow-service

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

然而,我们的问题是我们正在使用Java。是否有任何简单的方法来实现这一点(使用某些库或甚至可能使用某些CLI)?

3 个答案:

答案 0 :(得分:7)

我之前做过这个。

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

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

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

祝你好运。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

嗯......通过Java做这件事可能很棘手且非常容易出错

一种简单的方法是编写一个小的本机DLL,它可以使用VSS API执行你想要的VSS

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