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 回答