我需要一些帮助让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()
停留的新方法
答案 0 :(得分:1)
DoSnapshotset之后,你必须调用以下函数
hr = pDoSnapshotSetResults-&gt; Wait(); if(!SUCCEEDED(hr)){unLoadLibrary();返回1; }
HRESULT hrDoSnapshotSetResults;
hr = pDoSnapshotSetResults->QueryStatus(&hrDoSnapshotSetResults, NULL);
if (!SUCCEEDED(hr)){ unLoadLibrary(); return 1; }
一旦此功能成功,您就可以获得snapshotproperties。
答案 1 :(得分:0)
通过调用GetSnapshotProperties()来检索VSS_SNAPSHOT_PROP实例。您需要通过调用StartSnapshotSet()创建一个新集,然后在获取属性之前通过AddToSnapshotSet()将该卷添加到快照集。