我需要一些使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

好的,这似乎是正确的方法,但是复制线程冻结在代码的最后一行,并且再也无法获取。

谢谢,
Ĵ

编辑:更新以显示在GetSnapshotProperties()处停止的新方法

最佳答案

在DoSnapshotset yu之后,必须调用以下函数

hr = pDoSnapshotSetResults-> Wait();
如果(!SUCCEEDED(hr)){unLoadLibrary();返回1; }

    HRESULT hrDoSnapshotSetResults;

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

一旦此功能成功完成,您就可以获取快照属性。

09-27 17:29