windows - Volume Shadow Copy ved hjælp af Java

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg opretter for øjeblikket en sikkerhedskopieringsapplikation, hvor vi har brug for en måde at læse filer på, der er brugt af andre applikationer, og vi vil også minimere den låsning, vi pådrager os i brugerens filer. Brug af Window's Volume Shadow Copy Service synes at være perfekt måde for os at opnå dette.


Vores problem er imidlertid, at vi bruger Java. Er der nogen nem måde for os at implementere dette alligevel (enten ved hjælp af noget bibliotek eller muligvis endda nogle CLI)?

Bedste reference


Det gjorde jeg før.


Den nemmeste måde vi fandt ud af var at bygge de 4 versioner af vshadow.exe (demo værktøj til en hurtig start med VSS fra Microsoft-webstedet): en for hver målplade i XP/senere og x86/x64 .
VShadow giver grundlæggende mulighed for at oprette eller ødelægge snapshot og hente en sti, der ligner:


\?GLOBALROOTDeviceHarddiskVolumeShadowCopyXX, som du kan bruge til at erstatte dit drevbogstav (D: for eksempel), der fungerer med JAVA-fil API .
Versionen af ​​VShadow fra VSS SDK læses og skrives, dette er ikke den samme version end den exe, du kan downloade direkte, som er læst.


Så i Java er det nemt at skrive to CLI wrappers med en samlet grænseflade (til håndtering af VShadow's to forskellige opførsel mellem XP og senere).


Held og lykke.

Andre referencer 1


Så jeg ved ikke meget om VSS, men hvad angår adgang til Windows native API'er fra Java, ville jeg tjekke ud JNA. Du kan godt finde, at nogen allerede har portet de relevante API-definitioner til JNA.

Andre referencer 2


Hmm ... at gøre det via Java kan være vanskelig og meget fejlgenereret


En nem måde at gøre det på er at skrive en lille indfødt DLL, som gør hvad du vil have VSS til at gøre ved hjælp af VSS API'er


Og så bruger enten C # pInvoke eller C ++/CLI ... og så kan du bruge et hvilket som helst andet CLI-kompatibelt sprog