1

VSS を C++ で動作させるには、助けが必要です。私の基本的な目的は、フォルダーをスキャンして変更されたファイル (変更日ごと) を探し、VSS を使用してそれらを別のデバイスにバックアップすることです。これを行う方法についてのドキュメントは(少なくとも私には)不明確であり、それを行う方法の適切な例を見つけることができません。

私のプロセスは次のように機能するはずです:

フォルダーがスキャンされ、変更されたファイルのリストが作成されます。VSS スナップショットが作成され、ファイルがコピーされます。VSS スナップショットが破棄または解放されます (または何でも)。

これが私がこれまでに持っているものです(簡潔にするためにエラー処理を削除しました):

VSS_SNAPSHOT_PROP snapshotProperties;
::CoInitialize(NULL);
::CreateVssBackupComponents(&m_pBackupComponents);
m_pBackupComponents->InitializeForBackup();
m_pBackupComponents->StartSnapshotSet(&m_SnapshotSetId);
m_pBackupComponents->AddToSnapshotSet(wszVolumePathName, GUID_NULL, &snapshotId);
m_pBackupComponents->SetBackupState(TRUE, FALSE, VSS_BT_FULL, FALSE);
m_pBackupComponents->PrepareForBackup(&pPrepareForBackupResults);
pPrepareForBackupResults->Wait();
m_pBackupComponents->DoSnapshotSet(&pDoSnapshotSetResults);
m_pBackupComponents->GetSnapshotProperties(snapshotId, &snapshotProperties); <-- Never gets beyond here

わかりました、それは正しい方法のようですが、コピー スレッドはコードの最後の行でフリーズし、それ以上進みません。

ありがとう、J

編集:で停止する新しいメソッドを表示するように更新されましたGetSnapshotProperties()

4

2 に答える 2

1

DoSnapshotset の後、次の関数を呼び出す必要があります

hr = pDoSnapshotSetResults->Wait(); if (!SUCCEEDED(hr)){ unLoadLibrary(); 1 を返します。}

    HRESULT hrDoSnapshotSetResults;

    hr = pDoSnapshotSetResults->QueryStatus(&hrDoSnapshotSetResults, NULL);
    if (!SUCCEEDED(hr)){    unLoadLibrary(); return 1;  }

この関数が成功すると、スナップショットのプロパティを取得できます。

于 2011-12-31T09:18:44.063 に答える
0

VSS_SNAPSHOT_PROP インスタンスは、GetSnapshotProperties() への呼び出しを介して取得されます。プロパティを取得する前に、StartSnapshotSet() を呼び出して新しいセットを作成し、AddToSnapshotSet() を介してボリュームをスナップショット セットに追加する必要があります。

于 2011-04-13T15:39:04.210 に答える