PDA

مشاهده نسخه کامل : اشکال کار با shadow copy با سی شارپ



SajjadKhati
16-12-18, 12:55
سلام
alphavss wrapper را گرفتم (که برای کار با shadow copy در دات نت هست) .

با دنبال کردن راهنمای سایت های زیر :

Ronen Ariely Personal Website (Only the registered members can see the link)

AlphaVSS 1.4.0 – AlphaVSS – Bringing Windows Volume Shadow Copy Service to .NET (Only the registered members can see the link)

IVssBackupComponents Interface (Only the registered members can see the link)

Implementation Details for Creating Shadow Copies - Windows applications (Only the registered members can see the link)


و البته اینو هنوز ندیدم :

Volume Shadow Copy Service (Only the registered members can see the link(v=ws.10))


کد زیر را نوشتم :



IVssImplementation vssImplementation = VssUtils.LoadImplementation(); // اولین کار ، شناسایی سیستم عامل و 32 بیتی یا 64 بیتی بودن اون برای شادو کپی هست که این تابع این کار را انجام میده
using (IVssBackupComponents vssBackup = vssImplementation.CreateVssBackupComponents()) // دومین کار مهم ، ساختن شی ای از فرزندان اینترفیس IVssBackupComponents هست تا با شادو کپی بتونیم کار کنیم که این تابع این کار را انجام میده .)
{
vssBackup.InitializeForBackup(null);

vssBackup.GatherWriterMetadata();
vssBackup.SetContext(VssSnapshotContext.Backup);
vssBackup.SetBackupState(false, false, VssBackupType.Full, false); // پیکربندی کلی برای بکاپ
Guid MyGuid_1 = vssBackup.StartSnapshotSet();
Guid MyGuid_2 = vssBackup.AddToSnapshotSet("F:\\"); // برای اضافه کردن درایو برای شادو کپی (عملیات شادو کپی را انجام نمیده)
vssBackup.PrepareForBackup(); // رویداد PrepareForBackup را برای نویسنده ی بکاپ ایجاد میکنه
vssBackup.DoSnapshotSet(); // انجام عملیات شادو کپی ها در این set و مجموعه ، بصورت همزمان

}


دات نت فریم وورک 4.0 را انتخاب کردم.
ویژال استودیو هم بصورت run as admin اجرا کردم (وگرنه چون برای بکاپ شادو کپی ، دسترسی admin نداشته باشه ، ارور میده) . مثل زمانی که پادویش میخواد بکاپ بگیره ، موقع نوشتن فایل بکاپ ، یه کوچیک هارد درگیر میشه (و طبعا صدای هارد میاد) ، این کد هم اجرا میشه ، صدای هارد یه کوچیک میاد ولی دیگه وقتی میرم توی properties>previous version از اون درایو را میبینم ، بکاپ جدیدی اضافه نمیشه . ولی کدش هم اروری نمیده . مشکل از کجاست؟ چجوری باید کاری کنم که فایل بکاپ (شادو کپی) گرفته شده ، توی سربرگ previous version نمایش بده؟


بعد اینکه پادویش یه قابلیتی داره که میشه حداقل فضای رزرو شده برای هر درایو را روی مقداری (مثلا 5 درصد از حجم کل اون درایو برای بکاپ) اختصاص داد . این رو چجوری میشه ست کرد؟
بعد هم کد بالا را فقط در صورتی که قصد دارم از درایو F ام بکاپ بگیرم ، تا چقدر میشه خلاصه کرد؟ یعنی همه ی توابعی که در کد بالا فراخونی شد ، لازم اند یا میشه بعضی ها را نادیده گرفت؟ اگه میشه ، کدوم ها را میشه نادیده گرفت؟

سر آخر خک این خط کد را هم به آخر کد بالا اضافه میکنم :



string path = vssBackup.ExposeSnapshot(MyGuid_2, null, VssVolumeSnapshotAttributes.ExposedLocally, "L:");
MessageBox.Show(path);


ارور زیر را میده :



System.ArgumentException: 'Value does not fall within the expected range.'


ممنون