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