2012-03-15 7 views
6

Actualmente estoy creando una aplicación de copia de seguridad donde necesitamos una manera de leer los archivos que están siendo utilizados por otras aplicaciones y también queremos minimizar el bloqueo en el que incurrimos en los archivos de los usuarios. Usar el Servicio de instantáneas de volumen de Windows parece ser la forma perfecta para que lo logremos.Volume Shadow Copy usando Java

Nuestro problema, sin embargo, es que estamos utilizando Java. ¿Hay alguna manera fácil para que implementemos esto de todos modos (ya sea usando alguna biblioteca o posiblemente alguna CLI)?

+1

Esto es solo una opinión, pero lo que estás tratando de hacer es un trabajo para un lenguaje "nativo", como C++. Es una gran molestia conectarse a las API de OS desde Java y es extremadamente lento. – Jochen

+1

[JNI no es lento] (http://stackoverflow.com/a/7809300/351861) - y si realmente es para ti ... bueno ... es muy probable que tengas grandes errores de programación en tu código. Tampoco es una "molestia" * escribir bibliotecas nativas para JNI **, pero ** es bastante ... inconveniente: si nunca escribiste C/C++ lo más probable es que tengas mucho que aprender y algunas cosas que considerar pero eso es todo - también hay [JNA] (https://en.wikipedia.org/wiki/Java_Native_Access) que hace que sea un poco más fácil y menos * * "molestia" * – specializt

Respuesta

2

Por lo tanto, no sé mucho sobre VSS, pero en términos de acceso a API nativas de Windows desde Java, verificaría JNA. Es posible que encuentre que alguien ya ha portado las definiciones de API relevantes a JNA.

+1

¿Alguna sugerencia para las definiciones de JNA? – CAFxX

1

Hmm ... lo hace a través de Java puede ser

Una forma fácil y muy propensa complicado de error de hacerlo es escribir una pequeña DLL nativa que hace lo que quiere VSS hacer uso de las API de VSS

Y luego usando C# pInvoke o C++/CLI ... y luego puede usar cualquier otro lenguaje compatible con CLI

7

Lo hice antes.

La forma más fácil que descubrimos fue construir las versiones 4 de vshadow.exe (herramienta de demostración para un inicio rápido con VSS del sitio web de Microsoft): uno para cada objetivo dentro plaform XP/x86/x64 más tarde. VShadow básicamente permite crear o destruir instantánea y recuperar un camino que parece:

\\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyXX que se puede utilizar para sustituir la letra de unidad (por ejemplo D:) que funciona con el JAVA API de archivos. La versión de VShadow de VSS SDK es de lectura y escritura, esta no es la misma versión que el exe que puede descargar directamente y que es de solo lectura.

Luego, en Java, es fácil escribir dos contenedores CLI con una interfaz unificada (para manejar los dos comportamientos diferentes de VShadow entre XP y Más tarde).

Buena suerte.