2011-04-13 54 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。