2011-04-13 47 views
1

我需要一些帮助才能让VSS在C++中工作。我的基本目标是扫描文件夹中的更改文件(按修改日期),然后使用VSS将它们备份到其他设备。关于如何做到这一点,文档不清楚(至少对我而言),我找不到任何体面的例子来说明如何做到这一点。C++中的Windows 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

你还在寻找答案? – 2011-06-26 14:07:11

回答

0

VSS_SNAPSHOT_PROP实例经由呼叫检索到GetSnapshotProperties新方法()。您需要通过调用StartSnapshotSet()创建一个新集,然后在获取属性之前通过AddToSnapshotSet()将该卷添加到快照集。

+0

感谢您的建议。有趣的是,我尝试过,但是应用程序无法通过GetSnapshotProperties()调用,它只是坐在那里,线程不会通过该调用。我一定犯了错误,所以我会进一步调查。 – JWood 2011-04-13 16:52:23

+0

我已经更新了问题,以显示我正在尝试使用StartSnapshotSet()停止在最后一行的流 – JWood 2011-04-14 09:06:43

1

DoSnapshotset后宇必须调用下面的函数

HR = pDoSnapshotSetResults->等待(); if(!SUCCEEDED(hr)){unLoadLibrary();返回1; }

HRESULT hrDoSnapshotSetResults; 

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

一旦这个函数成功,那么你可以得到snapshotproperties。