AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Volume Shadow Copy Service

Ein Thema von kopernikus · begonnen am 15. Nov 2014 · letzter Beitrag vom 24. Aug 2022
Antwort Antwort
Seite 4 von 6   « Erste     234 56      
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#31

AW: Volume Shadow Copy Service

  Alt 24. Apr 2017, 14:07
ich brauche das nicht in eine Klasse packen, weil es da ja schon drin ist.

vss_util.pas

Ein großer Teil der VssToolkit.pas ist doch auswerten der Kommandozeilenparameter.
Letztlich benötigt du lediglich

Initialize()
GatherWriterMetadata
GatherWriterStatus
ListWriterStatus
ListWriteMetadata
QuerySnapshotSet
QuerySnapshotProperties
DeleteAllSnapshots
DeleteSnapshotSet
DeleteSnapshot
CreateSnapshotSet


Das sind die Methoden aus der vss_util, die du auch im Source von VssToolkit viederfindest.
Dort sind doch alle Funktionen schön in einer Case-Anweisung demonstriert.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (24. Apr 2017 um 18:57 Uhr)
  Mit Zitat antworten Zitat
kopernikus

Registriert seit: 8. Feb 2008
19 Beiträge
 
Delphi 10 Seattle Professional
 
#32

AW: Volume Shadow Copy Service

  Alt 1. Jun 2017, 13:17
Nachfolgend ein Update mit einigen Fehlerkorrekturen und Ergänzungen.
Angehängte Dateien
Dateityp: zip Vss-s.zip (106,3 KB, 11x aufgerufen)
Dateityp: zip VsToolkit.zip (995,2 KB, 18x aufgerufen)
  Mit Zitat antworten Zitat
kopernikus

Registriert seit: 8. Feb 2008
19 Beiträge
 
Delphi 10 Seattle Professional
 
#33

AW: Volume Shadow Copy Service

  Alt 8. Jul 2017, 13:58
Hier ein Beispiel, wie man die VSS-Routinen in ein eigenes Programm einbinden kann:
Code:
...
    procedure ShowVssStatus (const AStatus : string);
    begin
      ...
      end;
...
    VssThread:=CreateVssThread(Drive,true);
    with VssThread do begin
      LogFilename:=TempDir+'VssLog.txt';
      WriteLog:=true;
      OnStatusMessage:=ShowVssStatus;
      Resume;
      WriteLineToLog('Creating a Volume Shadow Copy: '+DateTimeToStr(Now));
      repeat
        Sleep(1);
        Application.ProcessMessages;
        until Done;
      if Success then begin
        SaveBackupComponentsDocument(TempDir+'VssBackupDoc.xml');
        SourceDrv:=ShadowDeviceName;
        end
      else begin
        WriteLineToLog(sLineBreak+'Snapshot creation failed');
        FreeAndNil(VssThread);
        SourceDrv:=Drive;
        end;
      end;
...
// Backup or similar action
...
  if assigned(VssThread) then begin
    try
      VssThread.DeleteShadowCopy;
    finally
      FreeAndNil(VssThread);
      end;
    end;
...
Im Anhang gibt es außerdem eine aktualisierte Version des Programms.
Angehängte Dateien
Dateityp: zip Vss-s.zip (106,8 KB, 36x aufgerufen)
Dateityp: zip VsToolkit.zip (995,2 KB, 32x aufgerufen)

Geändert von kopernikus ( 8. Jul 2017 um 14:03 Uhr)
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#34

AW: Volume Shadow Copy Service

  Alt 24. Jan 2018, 17:36
Wie verwendet man diese Unit wenn man eine Datei kopieren möchte die gesperrt und in Benutzung ist? Oder ist vss für sowas gar nicht gedacht.

Geändert von LTE5 (24. Jan 2018 um 17:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#35

AW: Volume Shadow Copy Service

  Alt 24. Jan 2018, 18:15
Wenn VSS diese Datei aufbekommt, während sie gesperrt/geöffnet ist, dann hättest du eventuell eine halbe/korrupte Datei.

Im Allgemeinen macht man mit VSS die Dateien das Volume vorher auf, wobei eine "Kopie" ("Session" in DB-Sprache) erzeugt wird, mit der man weiterarbeitet.
Werden Dateien währenddessen nun geöffnet/geändert, dann erstellt der VSS-FilterTreiber von diesen Dateien eine Kopie, mit dener die Andere weitergearbeiten, während in der VSS-Session du in Ruhe mit dem alten Datei-Stand weiterarbeiten kannst.

Es gibt auch Transacted-Dateifunktionen (ala MSDN-Library durchsuchenCreateFileTransacted) wo man sowas statt auf Volume-Ebene für einzelne Dateien machen kann.


Eventuell hilft auch die alte Backup-API.
https://msdn.microsoft.com/en-us/lib.../aa362512.aspx
(spaßig ist nur, dass man dort die Dateien im Roh-Format bekommt, wenn sie verschlüsselt/komprimiert/sparsed sind)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#36

AW: Volume Shadow Copy Service

  Alt 24. Jan 2018, 18:21
Verstehe ich das richtig dass wenn man den Code oben von kopernikus nimmt, in einen TTHread packt, den Thread erzeugt und dann eine gesperrte Datei kopieren möchte, diese gesperrte Datei aus der Shadow Copy kopiert wird welches angelegt wurde? Verwendet man dann trotzdem die ganz normalen WinAPI Aufrufe wie CopyFile?
  Mit Zitat antworten Zitat
KHJ

Registriert seit: 15. Dez 2005
35 Beiträge
 
Delphi 11 Alexandria
 
#37

AW: Volume Shadow Copy Service

  Alt 24. Jan 2018, 20:01
Vielleicht hilft auch das weiter: http://www.rathlev-home.de/sources/delphi.html#unitsdx
Karlheinz Jansen
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#38

AW: Volume Shadow Copy Service

  Alt 24. Jan 2018, 21:03
Wie es aussieht verstehe ich das nicht. Ich rufe
Code:
VsToolkit.exe C:\
auf und dann?
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#39

AW: Volume Shadow Copy Service

  Alt 29. Jan 2018, 18:17
Hier ein Beispiel, wie man die VSS-Routinen in ein eigenes Programm einbinden kann:
Code:
...
    procedure ShowVssStatus (const AStatus : string);
    begin
      ...
      end;
...
    VssThread:=CreateVssThread(Drive,true);
    with VssThread do begin
      LogFilename:=TempDir+'VssLog.txt';
      WriteLog:=true;
      OnStatusMessage:=ShowVssStatus;
      Resume;
      WriteLineToLog('Creating a Volume Shadow Copy: '+DateTimeToStr(Now));
      repeat
        Sleep(1);
        Application.ProcessMessages;
        until Done;
      if Success then begin
        SaveBackupComponentsDocument(TempDir+'VssBackupDoc.xml');
        SourceDrv:=ShadowDeviceName;
        end
      else begin
        WriteLineToLog(sLineBreak+'Snapshot creation failed');
        FreeAndNil(VssThread);
        SourceDrv:=Drive;
        end;
      end;
...
// Backup or similar action
...
  if assigned(VssThread) then begin
    try
      VssThread.DeleteShadowCopy;
    finally
      FreeAndNil(VssThread);
      end;
    end;
...
Im Anhang gibt es außerdem eine aktualisierte Version des Programms.

Zitat:
Creating shadow set {{02A915B5-D34E-4420-A566-FB8D1DFF32CE}} ...
Add volumes to snapshot set ...
- Adding volume [??] to the shadow set...
ERROR : COM call "TVolumeShadowCopy.AddToSnapshotSet:VssBackupCompo nents.AddToSnapshotSet" failed.
- Returned HRESULT = $80070057
- Error text: Falscher Parameter
ERROR : TVolumeShadowCopy.AddToSnapshotSet:VssBackupCompon ents.AddToSnapshotSet (Falscher Parameter)

Snapshot creation failed
Warum funktioniert das nicht?
C reicht als Drive nicht. Muss C:\ sein. Funktioniert jetzt.

Eine Frage zur Funktion noch. Ich habe nur Delphi Starter. Wenn ich eine 32 Bit-Anwendung mit dem VSS erstelle, kann ich das auch auf einem 64 Bit Windows benutzen oder muss ich dafür erst Delphi Pro haben?

Geändert von LTE5 (29. Jan 2018 um 19:25 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#40

AW: Volume Shadow Copy Service

  Alt 9. Mai 2018, 19:10
Ist das Thema noch aktiv?

habe nämlich zur Zeit auch das Problem, dass beim CreateVssThread die Fehlermeldung "ERROR: COM call "CoInitializeSecurity" failed. (<Unknown error code>)." kommt. Genauer gesagt kommt der Fehler in der VssUtil Zeile 2431 hr:=InitSecurity .
Kompilieren ist keine Problem.

Mein Code-Ausschnitt:
Delphi-Quellcode:
    .
    .
    .
    VssThread:=CreateVssThread(Copy(FSourceFile, 1, 2), True);
    VssThread.LogFileName:='c:\Transfer\vsslog.txt';
    VssThread.WriteLog:=True;
    VssThread.OnStatusMessage:=VssStatusMessage;
    DoLogMessage('Create Snapshot...');
    repeat
      FEvent.ResetEvent;
      FEvent.WaitFor(100);
    until VssThread.Done;
    if VssThread.Success then
    begin
      DoLogMessage('Create Snapshot successfully');
    end else begin
      DoLogMessage('Create Snapshot failed');
    end;
  finally
    if Assigned(VssThread) then
    try
      VssThread.DeleteShadowCopy;
    finally
      FreeAndNil(VssThread);
    end;
  end;
Ziel ist es, innerhalb eines Thread eine Datei, welche aktuell geöffnet ist, zu kopieren,

Ja, ich habe mein Programm mit "Als Administrator ausführen" gestartet.
Und über die Eingabeaufforderung mit VssAdmin geht's.

(Windows 10 Pro Version 1709)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder ( 9. Mai 2018 um 19:31 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 6   « Erste     234 56      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz