2012-03-15 15 views
6

Attualmente sto creando un'applicazione di backup in cui abbiamo bisogno di un modo per leggere i file che sono in uso da altre applicazioni e vogliamo anche minimizzare il blocco dei file degli utenti. L'utilizzo del servizio Volume Shadow Copy di Windows sembra essere il modo perfetto per raggiungere questo obiettivo.Copia Shadow del volume utilizzando Java

Il nostro problema è che stiamo usando Java. C'è un modo semplice per noi di implementarlo comunque (usando qualche libreria o forse anche qualche CLI)?

+1

Questo è solo un parere, ma quello che stai cercando di fare è un lavoro per un linguaggio "nativo", come C++. È un'enorme seccatura per connettersi alle API del sistema operativo da Java ed è un po 'folle. – Jochen

+1

[JNI is'nt slow] (http://stackoverflow.com/a/7809300/351861) - e se è effettivamente per te ... beh ... molto probabilmente hai errori di programmazione importanti nel tuo codice. Inoltre non ha * "fastidio" * scrivere librerie native per JNI ** ma ** è piuttosto .... scomodo - se non hai mai scritto C/C++ molto probabilmente avrai molto da imparare e alcune cose da considerare ma questo è tutto - c'è anche [JNA] (https://en.wikipedia.org/wiki/Java_Native_Access) che lo rende un po 'più semplice e meno di un * "fastidio" * – specializt

risposta

2

Quindi, non so molto su VSS, ma in termini di accesso alle API native di Windows da Java, vorrei verificare JNA. Potresti scoprire che qualcuno ha già trasferito le definizioni API pertinenti a JNA.

+1

Eventuali puntatori per le definizioni JNA? – CAFxX

1

Hmm ... farlo tramite Java può essere incline

Un modo semplice e molto ingannevole errore per farlo sta scrivendo un piccolo DLL nativa che fa quello che si vuole VSS fare utilizzando le API VSS

E poi usando C# pInvoke o C++/CLI ... e poi puoi usare qualsiasi altro linguaggio compatibile con CLI

7

Ho fatto questo prima.

Il modo più semplice che abbiamo scoperto è stato quello di costruire le 4 versioni di vshadow.exe (strumento demo per un rapido avvio con VSS dal sito Microsoft): uno per ogni plaform bersaglio entro XP/dopo e x86/x64. VShadow fondamentalmente permette di creare o distruggere snapshot e recuperare un percorso simile:

\\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyXX che è possibile utilizzare per sostituire la lettera di unità (D: per esempio) che funziona con il JAVA API File. La versione di VShadow da VSS SDK è in lettura e scrittura, questa non è la stessa versione dell'exe che è possibile scaricare direttamente che è di sola lettura.

Quindi, in Java, è facile scrivere due wrapper CLI con un'interfaccia unificata (per gestire i due diversi comportamenti di VShadow tra XP e successivi).

Buona fortuna.

Problemi correlati