我目前正在创建一个备份应用程序,我们需要一种读取其他应用程序正在使用的文件的方法,并且我们还希望最大限度地减少对用户文件的锁定。使用Window的卷影复制服务似乎是我们实现这一目标的完美方式。
然而,我们的问题是我们使用的是Java。我们有没有任何简单的方法来实现这一点(使用一些库,甚至可能使用一些CLI)?
我以前做过这个。
我们发现最简单的方法是构建vshadow.exe的4个版本(用于快速启动Microsoft网站上的VSS的演示工具):XP/更新版和x86/x64中的每个目标平台一个。VShadow基本上允许创建或销毁快照并检索路径,路径看起来像:
\?GLOBALROOTDeviceHarddiskVolumeShadowCopyXX
,可用于替换与JAVA File API一起使用的驱动器号(例如D:
)。VSS SDK中的VShadow版本是读写的,这与您可以直接下载的只读exe版本不同。
然后,在Java中,很容易编写两个具有统一接口的CLI包装器(用于处理XP和Later之间VShadow的两种不同行为)。
祝你好运。
所以,我对VSS了解不多,但就从Java访问Windows本机API而言,我会查看JNA。您可能会发现有人已经将相关的API定义移植到了JNA。
嗯。。。通过Java进行操作可能很棘手,而且很容易出错
一种简单的方法是编写一个小型的本机DLL,它可以使用VSS API 执行您希望VSS执行的操作
然后使用C#pInvoke或C++/CLI。。。然后您可以使用任何其他符合CLI的语言