PDA

View Full Version : اشکال کار با shadow copy با سی شارپ



SajjadKhati
یک شنبه 25 آذر 1397, 12:52 عصر
سلام
alphavss wrapper را گرفتم (که برای کار با shadow copy در دات نت هست) .

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

Ronen Ariely Personal Website (http://ariely.info/Blog/tabid/83/EntryId/137/AlphaVSS-Basic-Code-Examples.aspx)

AlphaVSS 1.4.0 – AlphaVSS – Bringing Windows Volume Shadow Copy Service to .NET (http://alphavss.alphaleonis.com/doc/1.4.0/)

IVssBackupComponents Interface (http://alphavss.alphaleonis.com/doc/1.4.0/api/html/F31A5BC7.htm)

Implementation Details for Creating Shadow Copies - Windows applications (https://docs.microsoft.com/en-us/windows/desktop/VSS/implementation-details-for-creating-shadow-copies)


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

Volume Shadow Copy Service (https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/ee923636(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.'


ممنون

SajjadKhati
دوشنبه 03 دی 1397, 11:40 صبح
سلامی مجدد
کسی نمیدونه؟