我目前正在创建一个备份应用程序,我们需要一种方法来读取其他应用程序正在使用的文件,我们还希望最大限度地减少我们对用户文件的锁定。使用Window的卷影复制服务似乎是我们实现这一目标的完美方式。
然而,我们的问题是我们正在使用Java。是否有任何简单的方法来实现这一点(使用某些库或甚至可能使用某些CLI)?
答案 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兼容语言