گفتگو هایی در باب سی شارپ

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
نه دیگه، نیست.


نه. شما دارید از یک زبان مفسری مثال می آورید. شما که نمی توانید به یک کامپایلر بگید اگر موقع اجرا مقدار متغیر a از 4 بیشتر بود فلان کد رو برای کامپایل اضافه کن، یا موقع اجرا اگر به فلان سطر رسیدی فلان کلاس رو از فلان فایل کامپایل کن تا استفاده بشه. همه مواردی که باید کامپایل شوند مربوط به قبل از روال اجرا آماده هستند، یعنی جایی که هنوز هیچ کدی کامپایل نشده، هیچ کدی. وقتی هنوز کدی کامپایل نشده دستور نوشتن در کد معنی نداره.
حتی اگر دستوری به تصور شما وجود داشت دیگه وقتی کامپایل شد کار از کار گذشته و زمانی برای اضافه شدن موردی برای کامپایل نیست. این چیزی که میگید برای زبان مفسری قابل اجرا است نه کامپایلری.

ممنون
آها بله اصلا حواسم نبود .
الان یعنی ++c مفسری هه که این قابلیت را داره؟
الان دستور #include داره کد فایل را اضافه میکنه دیگه .
بعد اینکه سی شارپ ، دو منظوره نیست؟ یعنی هم کامپایلری و هم مفسری نیست؟
 

the_king

مدیرکل انجمن
ممنون
آها بله اصلا حواسم نبود .
الان یعنی ++c مفسری هه که این قابلیت را داره؟

نه در ++C همچین قابلیتی نیست، برای ++C مفسر هایی هم وجود داره گو اینکه بصورت رایج از کامپایلر هایش استفاده می کنند، اما بصورت استاندارد در زبان ++C همچین قابلیتی وجود نداره و include هم نمیتونه فایل کد رو بکار بگیره، header کد برنامه نیست، حتی یک سطر هم کد اجرایی نداره. شما طبق معمول که عادت دارید موارد رو بهم ربط بدید از لوا مثال آوردید که عرض کردم لوا مفسری است، برای همین از لحاظ فنی مشکلی برای داشتن همچین دستوری نداره، چون از لوا مثال آوردید مفسری بودنش رو یادآوری کردم، کاری با ++C نداشتم.
الان دستور #include داره کد فایل را اضافه میکنه دیگه .

خیر، چطور به این نتیجه رسیدید نمی دونم. وقتی header کد برنامه نیست و صرفا شامل تعاریف است، include همچین کاری نمیتونسته انجام بده.
بعد اینکه سی شارپ ، دو منظوره نیست؟ یعنی هم کامپایلری و هم مفسری نیست؟
دو منظوره چیه، اغلب زبان هایی که میشناسید چند منظوره هستند، یعنی برای کاربرد های مختلفی قابل استفاده هستند، کامپایلری و مفسری بودن سبک اجرای زبان ئه، منظور نیست که تک منظوره و دو منظوره بشه.
زبان #C هم همینطور، چند منظوره است، ربطی به فقط کامپایلری بودنش نداره.
قبلا هم این سوال رو کرده بودید، بعید میدونم مفسر مجهزی برایش باشه، یعنی اگر کسی برای #C مفسر طراحی کرده باشه هم من شخصا در موردش اطلاعی ندارم.
اگر جایی به موردی برخوردید به احتمال زیاد حاصل کامپایل یک اسمبلی موقتی ئه، نه یک مفسر واقعی.
ساخت dll برای رسم توابع در #C
CSI: A Simple C# Interpreter - CodeProject
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی ، به عنوان یه مطلب حاشیه ای (شاید به پروژه تبدیل کنم بعدا ان شاء ا...) ، پادویش قابلیت shadow copy (از کل یه درایو ، بکاپ شادو کپی میگیره که در لیست سربرگ previous version در اون درایو میاد) که داره ، اگه همچین کاری بخوام کنم ، این مطالبی که لینک میدم ، مربوط به این مسئله میشه؟ (چون میگم بعدا اشتباهی نخونم که باز ببینم کلا از پایه اشتباست) :
Shadow Copying of Applications - CodeProject

c# shadowcopy example

Shadow Copying Assemblies

ShadowCopy example in C# needed | .NET | C# Programming | C++ Programming

AppDomain Shadow Copy explained - B# .NET Blog
 

the_king

مدیرکل انجمن
سلام
استاد علی ، به عنوان یه مطلب حاشیه ای (شاید به پروژه تبدیل کنم بعدا ان شاء ا...) ، پادویش قابلیت shadow copy (از کل یه درایو ، بکاپ شادو کپی میگیره که در لیست سربرگ previous version در اون درایو میاد) که داره ، اگه همچین کاری بخوام کنم ، این مطالبی که لینک میدم ، مربوط به این مسئله میشه؟ (چون میگم بعدا اشتباهی نخونم که باز ببینم کلا از پایه اشتباست) :
Shadow Copying of Applications - CodeProject

c# shadowcopy example

Shadow Copying Assemblies

ShadowCopy example in C# needed | .NET | C# Programming | C++ Programming

AppDomain Shadow Copy explained - B# .NET Blog
فقط اون لینکی که از freelancer.com آوردید مربوطه که اونم چندان کاربردی نیست چون کلا موضوع فعالیت سایتش طوری نیست که بخواهید از داخلش راهنمای برنامه نویسی پیدا کنید.
بقیه لینک ها مربوط به آپدیت کردن برنامه و اسمبلی هستند که صرفا تشابه اسمی دارند و ربطی به اون سرویس Shadow Copy ویندوز نداره.
Shadow Copy ویندوز این قابلیت رو به سیستم فایل میده که بدون وقفه در فعالیت و تغییرات سیستم فایل بتونه از فایل ها و درایو ها نسخه پشتیبان بگیره. چون در حالت عادی فقط میتوانستیم از فایلی پشتیبان بگیریم که در حال ویرایش و تغییرات لحظه ای نبود. Shadow Copy چیزی از فرمت محتویات فایل و نسخه برنامه و اسمبلی و ... سر درنمیاره، صرفا تغییرات داده ای رو میتونه بصورت تاریخچه تغییرات حفظ کنه. اما اون لینک هایی که شما پیدا کردید اسمش شبیه ئه ولی ربطی به اون قضیه پشتیبانگیری نداره، مطالبی که پیدا کردید برای این کاربرد داره که برنامه ای که در حال اجرا است یا اسمبلی مشخصی ازش در حال استفاده است بتونه خودشو با نسخه جدیدتر آپدیت کنه، بدون تداخل و بدون وقفه در اجرا. مخصوصا در جایی مثل سرور های ASP.NET که برنامه همیشه در حال اجرا است این ویژگی کاربرد داره که نیازی به توقف برنامه یا Restart کردن سیستم نباشه، و ربطی هم به اون Shadow Copy ویندوز نداره.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون
پس چجوری میشه منابع مفیدتر و بیشتری را در این باره جستجو کرد؟ توی گوگل چی باید بنویسیم؟ یا بی زحمت ، لینک میدین؟
 

the_king

مدیرکل انجمن
ممنون
پس چجوری میشه منابع مفیدتر و بیشتری را در این باره جستجو کرد؟ توی گوگل چی باید بنویسیم؟ یا بی زحمت ، لینک میدین؟
برای چندمین بار میگم، برای چیزی که مربوط به مایکروسافت ئه در خود سایت مایکروسافت جستجو کنید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
برای چندمین بار میگم، برای چیزی که مربوط به مایکروسافت ئه در خود سایت مایکروسافت جستجو کنید.

ممنون
اینا را پیدا میکنم که اغلب شون فکر نکنم مطلب مورد نظرم باشه . :

Shadow Copying Assemblies

AppDomain.SetShadowCopyFiles Method (System)

how to implement volume shadow copy in c#

Volume Shadow Copy API Reference - Windows applications

Volume Shadow Copies from .NET - CodeProject

c# shadowcopy example

AppDomain and Shadow Copy

Win32_ShadowCopy class (Windows)

---------------------------

فکر کنم اون لینک آخر مربوط باشه. درسته؟
dll اش یعنی Vsswmi.dll ، جزء api ها و unmanaged هست؟ من توی درایو c ام جستجو کردم ، این dll در چند مسیر متفاوت بود . مثلا هم مسیر "C:\Windows\SysWOW64\wbem" و هم مسیر "C:\Windows\System32\wbem" و هم مسیر "C:\Windows\WinSxS\wow64_microsoft-windows-shadowcopywmiprovider_31bf3856ad364e35_10.0.17763.1_none_ab57a5b4ce899f72" و هم مسیر "C:\Windows\WinSxS\amd64_microsoft-windows-shadowcopywmiprovider_31bf3856ad364e35_10.0.17763.1_none_a102fb629a28dd77" .

هر کدوم شون را میشه استفاده کرد یا یکی از اینها را باید استفاده کرد؟
 
آخرین ویرایش:

the_king

مدیرکل انجمن
ممنون
اینا را پیدا میکنم که اغلب شون فکر نکنم مطلب مورد نظرم باشه . :

Shadow Copying Assemblies

AppDomain.SetShadowCopyFiles Method (System)

how to implement volume shadow copy in c#

Volume Shadow Copy API Reference - Windows applications

Volume Shadow Copies from .NET - CodeProject

c# shadowcopy example

AppDomain and Shadow Copy

Win32_ShadowCopy class (Windows)

---------------------------

فکر کنم اون لینک آخر مربوط باشه. درسته؟

لینک آخر و در اصل Volume Shadow Copy API Reference - Windows applications ئه.

dll اش یعنی Vsswmi.dll ، جزء api ها و unmanaged هست؟ من توی درایو c ام جستجو کردم ، این dll در چند مسیر متفاوت بود . مثلا هم مسیر "C:\Windows\SysWOW64\wbem" و هم مسیر "C:\Windows\System32\wbem" و هم مسیر "C:\Windows\WinSxS\wow64_microsoft-windows-shadowcopywmiprovider_31bf3856ad364e35_10.0.17763.1_none_ab57a5b4ce899f72" و هم مسیر "C:\Windows\WinSxS\amd64_microsoft-windows-shadowcopywmiprovider_31bf3856ad364e35_10.0.17763.1_none_a102fb629a28dd77" .

هر کدوم شون را میشه استفاده کرد یا یکی از اینها را باید استفاده کرد؟
از هیچکدوم نباید استفاده کنید. شما برای سیستمی که هنوز شناختی ازش ندارید دنبال dll میگردید برای چی؟ شما بفرض که dll ای هم پیدا کنید بدون مستندات بر چه اساسی استفاده اش می کنید؟ اصلا بر چه اساسی تشخیص میدید که باید از dll خاصی استفاده کنید؟ و از کجا میفهمید که کاری که با dll میکنید درسته؟ از کجا معلوم روی سیستم دیگری مشکل ایجاد نکنه؟ همینطوری سراغ dll هایی که اصول کارشون رو نمی دانید نروید.
برای ساده تر کردن کار با #C هم بهتره بجای اینکه خودتون دنبال پیاده سازی Wrapper باشید دنبال Wrapper آماده بگردید :
alphaleonis/AlphaVSS
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
لینک آخر و در اصل Volume Shadow Copy API Reference - Windows applications ئه.


از هیچکدوم نباید استفاده کنید. شما برای سیستمی که هنوز شناختی ازش ندارید دنبال dll میگردید برای چی؟ شما بفرض که dll ای هم پیدا کنید بدون مستندات بر چه اساسی استفاده اش می کنید؟ اصلا بر چه اساسی تشخیص میدید که باید از dll خاصی استفاده کنید؟ و از کجا میفهمید که کاری که با dll میکنید درسته؟ از کجا معلوم روی سیستم دیگری مشکل ایجاد نکنه؟ همینطوری سراغ dll هایی که اصول کارشون رو نمی دانید نروید.
برای ساده تر کردن کار با #C هم بهتره بجای اینکه خودتون دنبال پیاده سازی Wrapper باشید دنبال Wrapper آماده بگردید :
alphaleonis/AlphaVSS

سلامی مجدد
ممنون استاد علی
البته من این alphavss رو با nuget گرفتم . و با دنبال کردن راهنمای سایت های زیر :

Ronen Ariely Personal Website

AlphaVSS 1.4.0 – AlphaVSS – Bringing Windows Volume Shadow Copy Service to .NET

IVssBackupComponents Interface

Implementation Details for Creating Shadow Copies - Windows applications

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

Volume Shadow Copy Service

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

کد:
            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 ام بکاپ بگیرم ، تا چقدر میشه خلاصه کرد؟ یعنی همه ی توابعی که در کد بالا فراخونی شد ، لازم اند یا میشه بعضی ها را نادیده گرفت؟ اگه میشه ، کدوم ها را میشه نادیده گرفت؟


هر چند کامل درباره ی این قضیه نمیدونم ولی تا اونجایی که بررسی کردم برای استفاده از alphavss و گرفتن بکاپ ، به این روند رسیدم . توضیح میدم ، ببینین درسته؟ (البته خودم دقیق کدها را متوجه نشدم) :
قلب اصلی برای کار با شادو کپی ، اینترفیس IVssBackupComponents هست . بنابراین برای ساخت شی از این اینترفیس (میدونم بصورت مستقیم نمیشه از اینترفیس شی ساخت) ، از تابع IVssImplementation.CreateVssBackupComponents() استفاده میکنیم . خروجی شی این تابع (یعنی شی IVssBackupComponents) ، قابلیت استفاده از چند عملیات متفاوت مثل بکاپ و هم ریستور با هم را نداره و بهتره که بعد از اتمام استفاده ، dispose بشه . حالا ، شی IVssImplementation توسط خروجی استاتیک تابع VssUtils.LoadImplementation() بدست میاد .
نام متغییر و شی IVssBackupComponents را همونطور که در کد بالا میبینید ، vssBackup گذاشتم .
کد:
vssBackup.InitializeForBackup(null);
طبق توضیحات ، مقداردهی اولیه میکنه اجزای بکاپ را برای آماده سازی شدن (چند جا ، توضیحات توابع شبیه هم بود ، من دقیق تفاوت بین شون را متوجه نشدم مثل همین)
کد:
vssBackup.GatherWriterMetadata();
                vssBackup.SetContext(VssSnapshotContext.Backup);
این دو تا کد هم چندان متوجه نشدم .
کد:
vssBackup.SetBackupState(false, false, VssBackupType.Full, false);
پیکربندی کلی بکاپ را انجام میده . مثل اینکه بکاپ افزایشی باشه یا کاهشی و .... .
کد:
Guid MyGuid_1 = vssBackup.StartSnapshotSet();
توی توضیحاتش نوشته یه شادو کپی جدید و خالی درست میکنه که متوجه نشدم . چون ایجاد شادو کپی وظیفه ی تابع DoSnapshotSet انگار هست . بجز این ، عملیات پیکربندی هنوز کامل نشد که این کد اومد .
کد:
Guid MyGuid_2 = vssBackup.AddToSnapshotSet("F:\\");
درایو یا فایلی که میخوایم بکاپ شادو کپی بگیریم را میدیم.
کد:
vssBackup.PrepareForBackup();
طبق توضیحاتش ، رویداد PrepareForBackup را برای نویسنده (فکر کنم منظور از نویسنده ، شی ای که باعث نوشتن فایل بکاپ توسط سیستم عامل میشه را میگه . بازم نمیدونم) ایجاد میکنه که هنوز باهاش کار نکردم.
کد:
vssBackup.DoSnapshotSet()
که عملیات نهایی بکاپ شادو کپی را انجام میده.

این توضیحاتی که گفتم ، درسته؟
خیلی ممنونم
 
آخرین ویرایش:

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلامی مجدد
این خط کد را هم به آخر کد بالا اضافه میکنم :

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

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


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

the_king

مدیرکل انجمن
موقع نوشتن فایل بکاپ ، یه کوچیک هارد درگیر میشه (و طبعا صدای هارد میاد) ، این کد هم اجرا میشه ، صدای هارد یه کوچیک میاد ولی دیگه وقتی میرم توی properties>previous version از اون درایو را میبینم ، بکاپ جدیدی اضافه نمیشه . ولی کدش هم اروری نمیده . مشکل از کجاست؟ چجوری باید کاری کنم که فایل بکاپ (شادو کپی) گرفته شده ، توی سربرگ previous version نمایش بده؟
اینکه مشکل از چیه رو نه من میتونم تشخیص بدم و نه هر کسی که بهش این توضیحات رو بدید. شما نهایتا یک سرویس رو دارید اجرا می کنید، اولا باید ببینید سرویس اش در حال اجرا هست یا نه. اصلا شاید Disable باشه. ثانیا اگه سرویس اجرا بشه، برای اجرای نادرست خطا وجود داره اما دلیلی نداره که خطاهای مربوط به یک سرویس توسط برنامه NET. شما دریافت بشه. اگه خطایی هست در سرویس Shadow Copy بوجود میاد، نه برنامه شما.

بعد اینکه پادویش یه قابلیتی داره که میشه حداقل فضای رزرو شده برای هر درایو را روی مقداری (مثلا 5 درصد از حجم کل اون درایو برای بکاپ) اختصاص داد . این رو چجوری میشه ست کرد؟
جزو تنظیمات VSS ئه دیگه، در خوب ویندوز قابل دسترسی و تغییر ئه :
Configuring Volume Shadow Copies on Windows Server 2012
و برای تنظیم از داخل برنامه هم باید مستندات سرویس رو مطالعه کنید و تنظیم اش رو داخل راهنماش پیدا کنید.

بعد هم کد بالا را فقط در صورتی که قصد دارم از درایو F ام بکاپ بگیرم ، تا چقدر میشه خلاصه کرد؟ یعنی همه ی توابعی که در کد بالا فراخونی شد ، لازم اند یا میشه بعضی ها را نادیده گرفت؟ اگه میشه ، کدوم ها را میشه نادیده گرفت؟
به ندرت پیش میاد چیزی اضافی و بیخودی نوشته شده باشه، و دلیلی نداره دنبال همچین مواردی باشید که بخواهید حذفش کنید.
هر چند کامل درباره ی این قضیه نمیدونم ولی تا اونجایی که بررسی کردم برای استفاده از alphavss و گرفتن بکاپ ، به این روند رسیدم . توضیح میدم ، ببینین درسته؟ (البته خودم دقیق کدها را متوجه نشدم) :
قلب اصلی برای کار با شادو کپی ، اینترفیس IVssBackupComponents هست . بنابراین برای ساخت شی از این اینترفیس (میدونم بصورت مستقیم نمیشه از اینترفیس شی ساخت) ، از تابع IVssImplementation.CreateVssBackupComponents() استفاده میکنیم . خروجی شی این تابع (یعنی شی IVssBackupComponents) ، قابلیت استفاده از چند عملیات متفاوت مثل بکاپ و هم ریستور با هم را نداره و بهتره که بعد از اتمام استفاده ، dispose بشه . حالا ، شی IVssImplementation توسط خروجی استاتیک تابع VssUtils.LoadImplementation() بدست میاد .
نام متغییر و شی IVssBackupComponents را همونطور که در کد بالا میبینید ، vssBackup گذاشتم .
کد:
vssBackup.InitializeForBackup(null);
طبق توضیحات ، مقداردهی اولیه میکنه اجزای بکاپ را برای آماده سازی شدن (چند جا ، توضیحات توابع شبیه هم بود ، من دقیق تفاوت بین شون را متوجه نشدم مثل همین)
کد:
vssBackup.GatherWriterMetadata();
                vssBackup.SetContext(VssSnapshotContext.Backup);
این دو تا کد هم چندان متوجه نشدم .
کد:
vssBackup.SetBackupState(false, false, VssBackupType.Full, false);
پیکربندی کلی بکاپ را انجام میده . مثل اینکه بکاپ افزایشی باشه یا کاهشی و .... .
کد:
Guid MyGuid_1 = vssBackup.StartSnapshotSet();
توی توضیحاتش نوشته یه شادو کپی جدید و خالی درست میکنه که متوجه نشدم . چون ایجاد شادو کپی وظیفه ی تابع DoSnapshotSet انگار هست . بجز این ، عملیات پیکربندی هنوز کامل نشد که این کد اومد .
کد:
Guid MyGuid_2 = vssBackup.AddToSnapshotSet("F:\\");
درایو یا فایلی که میخوایم بکاپ شادو کپی بگیریم را میدیم.
کد:
vssBackup.PrepareForBackup();
طبق توضیحاتش ، رویداد PrepareForBackup را برای نویسنده (فکر کنم منظور از نویسنده ، شی ای که باعث نوشتن فایل بکاپ توسط سیستم عامل میشه را میگه . بازم نمیدونم) ایجاد میکنه که هنوز باهاش کار نکردم.
کد:
vssBackup.DoSnapshotSet()
که عملیات نهایی بکاپ شادو کپی را انجام میده.

این توضیحاتی که گفتم ، درسته؟
خیلی ممنونم
نمیدونم. در مورد کد هایی که سوال می کنید که نه تا به حال زمان صرف بررسی شون کردم و نه کاربردی برام داشتند که حالا اینکار رو انجام بدم.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اینکه مشکل از چیه رو نه من میتونم تشخیص بدم و نه هر کسی که بهش این توضیحات رو بدید. شما نهایتا یک سرویس رو دارید اجرا می کنید، اولا باید ببینید سرویس اش در حال اجرا هست یا نه. اصلا شاید Disable باشه. ثانیا اگه سرویس اجرا بشه، برای اجرای نادرست خطا وجود داره اما دلیلی نداره که خطاهای مربوط به یک سرویس توسط برنامه NET. شما دریافت بشه. اگه خطایی هست در سرویس Shadow Copy بوجود میاد، نه برنامه شما.


ممنون استاد علی
پس چجوری توضیح بدم؟ منظورتون اینه که توضیحات من اشکال داره؟
الان این کد برای شما کار کرد؟ بی زحمت ، تست میکنین توی سیستم تون؟
سرویس volume shadow copy services برای من فعال هه .
wrapper alphavss ، یحتمل باید خطاها را هم ساپورت کنه دیگه . یعنی از api اش که ساپورت میکنه ، این هم باید ساپورت کنه . چون کدهاشو از api میگیره دیگه.


جزو تنظیمات VSS ئه دیگه، در خود ویندوز قابل دسترسی و تغییر ئه :
Configuring Volume Shadow Copies on Windows Server 2012
و برای تنظیم از داخل برنامه هم باید مستندات سرویس رو مطالعه کنید و تنظیم اش رو داخل راهنماش پیدا کنید.

منظورم از لحاظ کدنویسی هست.
اما با این حال ، این گزینه (کلیک راست توی یه درایو و config shadow copy) ، توی windows 10 redstone 5 x64 من نیست.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام
استاد علی ، اینجا میگه :

Solved: Volume Shadow Copy Service Error Windows 10/7/8

برای vss ، سرویسی بنام SPP services هم باید فعال باشه . توی لیست سرویس هام ، اصلا چنین سرویسی نبود .
بعد اینکه اینجا :

Enable Volume Shadow Copy for Windows 10/8/7

توی دومین تصویرش ، واسه ی من گزینه ی اول اش (restore system setting) را نداره .
توی event viewer میشه ارورهای شادو کپی را دید؟ اگه آره ، کدوم قسمت هستن؟ کلا ارورهاشو کجا میشه دید؟
 

the_king

مدیرکل انجمن
ممنون استاد علی
پس چجوری توضیح بدم؟ منظورتون اینه که توضیحات من اشکال داره؟

اشکال که نه، کمکی نمی کنه، اطلاعاتی که میدید و می توانید بدید برای تشخیص دلیل خطا مناسب نیست.

الان این کد برای شما کار کرد؟ بی زحمت ، تست میکنین توی سیستم تون؟

متاسفانه امکان تست کد ندارم.

سرویس volume shadow copy services برای من فعال هه .
wrapper alphavss ، یحتمل باید خطاها را هم ساپورت کنه دیگه . یعنی از api اش که ساپورت میکنه ، این هم باید ساپورت کنه . چون کدهاشو از api میگیره دیگه.

احتمالش زیاده که همچین قابلیتی داشته باشه، اما به این معنی نیست که بدون نوشتن کد خاصی این قضیه رخ بده. ممکنه لازم باشه کدی توسط شما نوشته بشه که موقع بروز خطا برنامه تون رو آگاه کنه. چون به هر حال روال اجرای سرویس مستقل از برنامه شما است، برنامه شما موقع خطای سرویس متوقف نمیشه. اون جدا اجرا میشه و برنامه شما جدا.

منظورم از لحاظ کدنویسی هست.
اما با این حال ، این گزینه (کلیک راست توی یه درایو و config shadow copy) ، توی windows 10 redstone 5 x64 من نیست.
مهم اینه که نشون میده تو قابلیت سرویس هست، الزاما چیزی که اینترفیس ویندوز نشون کاربر میده شامل تمامی قابلیت های سرویس نیست.

سلام
استاد علی ، اینجا میگه :

Solved: Volume Shadow Copy Service Error Windows 10/7/8

برای vss ، سرویسی بنام SPP services هم باید فعال باشه . توی لیست سرویس هام ، اصلا چنین سرویسی نبود .

سرویس SPP همون سرویس Software Protection ویندوز 10 ئه. در ضمن شما در همون Services می توانید با Dependencies سرویس های مرتبط با هر سرویس رو ببینید، نیازی نداره که جایی در موردش بخونید.
توی event viewer میشه ارورهای شادو کپی را دید؟ اگه آره ، کدوم قسمت هستن؟ کلا ارورهاشو کجا میشه دید؟
احتمالا مشابه چیزی که اینجا نشون میده :
How to Fix VSS Errors Step-by-Step
اما در نظر بگیرید که Event Viewer برای بررسی سوابق خطا مناسبه، نه اینکه بخواهید در کدنویسی تون روی خواندن خودکارش تکیه کنید. هیچ تضمینی هم نیست که بعدا مایکروسافت روال نمایش خطا در Event Viewer رو تغییر نده یا کاربری در تنظیمات Event Viewer دست نبره. ازش برای کاری جزو بررسی سوابق خطا اونم فقط روی سیستم خودتون استفاده نکنید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
اشکال که نه، کمکی نمی کنه، اطلاعاتی که میدید و می توانید بدید برای تشخیص دلیل خطا مناسب نیست.

متاسفانه امکان تست کد ندارم.


احتمالش زیاده که همچین قابلیتی داشته باشه، اما به این معنی نیست که بدون نوشتن کد خاصی این قضیه رخ بده. ممکنه لازم باشه کدی توسط شما نوشته بشه که موقع بروز خطا برنامه تون رو آگاه کنه. چون به هر حال روال اجرای سرویس مستقل از برنامه شما است، برنامه شما موقع خطای سرویس متوقف نمیشه. اون جدا اجرا میشه و برنامه شما جدا.


مهم اینه که نشون میده تو قابلیت سرویس هست، الزاما چیزی که اینترفیس ویندوز نشون کاربر میده شامل تمامی قابلیت های سرویس نیست.


سرویس SPP همون سرویس Software Protection ویندوز 10 ئه. در ضمن شما در همون Services می توانید با Dependencies سرویس های مرتبط با هر سرویس رو ببینید، نیازی نداره که جایی در موردش بخونید.

احتمالا مشابه چیزی که اینجا نشون میده :
How to Fix VSS Errors Step-by-Step
اما در نظر بگیرید که Event Viewer برای بررسی سوابق خطا مناسبه، نه اینکه بخواهید در کدنویسی تون روی خواندن خودکارش تکیه کنید. هیچ تضمینی هم نیست که بعدا مایکروسافت روال نمایش خطا در Event Viewer رو تغییر نده یا کاربری در تنظیمات Event Viewer دست نبره. ازش برای کاری جزو بررسی سوابق خطا اونم فقط روی سیستم خودتون استفاده نکنید.

ممنون
این سرویس Software Protection برام stop .
وقتی هم start میکنم ، اتوماتیک بعد از حدودا 10 ثانیه ، غیر فعال میشه .
از کجا میشه فهمید چه برنامه ای باعث این کار میشه؟
 

the_king

مدیرکل انجمن
ممنون
این سرویس Software Protection برام stop .
وقتی هم start میکنم ، اتوماتیک بعد از حدودا 10 ثانیه ، غیر فعال میشه .
از کجا میشه فهمید چه برنامه ای باعث این کار میشه؟
الزامی نداره که یک سرویس همیشه در حال اجرا باشه. همه سرویس ها همچین حالتی ندارند که دائم در حال اجرا باشند.
بعضی سرویس ها در زمان درخواست سرویس اجرا میشن و بعضی سرویس ها در فواصل زمانی دوره ای. کارشون هم که تموم شد مجددا متوقف میشن. اینکه سرویسی متوقف شده الزاما دلیلی بر اینکه مشکل داره نیست.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون
من که آخر متوجه نشدم مشکل از کجاست .
میگم استاد علی ، کد زیر را :


کد:
            ProcessStartInfo processRunAdmin = new ProcessStartInfo(Application.ExecutablePath);
            processRunAdmin.Verb = "runas";

            try
            {
                Process.Start(processRunAdmin);
               
            }
            catch (Exception)
            {
                MessageBox.Show("این پروژه نیاز به دسترسی ادمین دارد");
                return;
            }

چجوری توی تابع Main قرار بدیم که فقط یکبار تکرار بشه و هم درست اجرا بشه؟
توی رویدادهایی که زمان لود پروژه اجرا نمیشن (مثل رویداد کلیک) ، مشکلی نیست .
 

the_king

مدیرکل انجمن
ممنون
من که آخر متوجه نشدم مشکل از کجاست .
میگم استاد علی ، کد زیر را :


کد:
            ProcessStartInfo processRunAdmin = new ProcessStartInfo(Application.ExecutablePath);
            processRunAdmin.Verb = "runas";

            try
            {
                Process.Start(processRunAdmin);
              
            }
            catch (Exception)
            {
                MessageBox.Show("این پروژه نیاز به دسترسی ادمین دارد");
                return;
            }

چجوری توی تابع Main قرار بدیم که فقط یکبار تکرار بشه و هم درست اجرا بشه؟
توی رویدادهایی که زمان لود پروژه اجرا نمیشن (مثل رویداد کلیک) ، مشکلی نیست .
اولا اینکه بیایید پروسه برنامه خودتون رو مجددا اجرا کنید کار اشتباهیه. شما فرض رو بر این میگذارید که runas قطعا منجر به دسترسی Administrator بشه که اگر چنین نشه اتفاق خیلی بدی می افته. شما هیچ تسلطی روی تنظیمات و مشکلات غیر قابل پیش بینی سیستم کاربر ندارید. اگر تنظیمات UAC اصلا اجازه اجرا شدن در حالت Admin رو نده صد بار هم اجرای مجدد بشه اون دسترسی بدست نمیاد و چون میبینید دسترسی ندارید همون روال رو تکرار می کنید و مدام اجرای پروسه تکرار میشه. اینکار رو نکنید. کاربر خودش باید تصمیم به اجرای مجدد پروسه شما با دسترسی Admin بگیره، نه اینکه خودتون چنین کاری رو انجام بدید. اگر قرار بود برنامه ها خودشون برای دسترسی شون تصمیم بگیرند اصلا دلیلی نداشت UAC تعریف بشه. اگر قرار باشه که هر پروسه ای بتونه با دسترسی Administrator اجرا بشه، UAC دیگه جلوی اجرای کدوم روال ناخواسته ای رو میگیره؟

در ضمن شما هر زمانی می توانید درخواست اجرا شدن یک پروسه رو بکنید، هیچ ایرادی تا این بخش وجود نداره و چون مستقل از پروسه برنامه شما اجرا میشه نه اجراش و نه توقفش روال اجرای پروسه شما رو مختل نمی کنه.
اما اینکه بیایید وسط روال Load شدن برنامه، فرم یا هر عملیات نیمه کار دیگری در پروسه خودتون MessageBox باز کنید معنیش اینه که نمیخواهید نخ کار نیمه تمومش درست به اتمام برسه تا زمانی که کاربر با بستن Dialog باز شده این اجازه رو بده. یعنی تمامی روال هایی که اون نخ با هماهنگی اجزاء انجام میده رو متوقف می کنید، همینش نامطلوب ئه، کاری که مشکل سازه نمایش MessageBox در جایی است که مناسب نبوده، نه Start کردن پروسه جدید. شما می توانید بجای اینکه همونجا درجا MessageBox نشون بدید، فقط یک متغیر سراسری static مثل ProcessErr رو true کنید که معلوم بشه Start درست کار نکرده تا بعدا در رخداد Shown فرم که نخ مدیریت فرم نمایش فرم رو به اتمام رسونده و آمادگی نمایش MessageBox رو داره چک کنید که اگر اون متغیر true بود MessageBox رو نمایش بده و Application.Exit کنه. به همین سادگی.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
ممنون استاد علی .
بله قضیه ی uac را میدونم . درباره ی قضیه ی messagebox هم ممنون . messagebox را کلا نادیده بگیرین . uac هم حالا فرض کنید کاربر اجازه داد . اینکه کلا روال کار به این شکل درست نیست هم نادیده بگیرین . حالا چجوری میشه کد بالا را در تابع Main بصورت درست نوشت که یکبار برنامه مون اجرا بشه (و همینطور برنامه ی رایج و جاری مون که با سطح دسترسی معمولی در حال اجراست ، بسته بشه) ؟

------------------------------------------------------------------------------------------------

درباره ی قضیه ی شادو کپی از پادویش سئوال پرسیدم ، این جواب را الان دادن :


"
با سلام و احترام

VSS یک سری فلگ دریافت می کنه و انواع مختلفی از بکاپ را می تونه بگیره. برخی از این بکاپها (نه همه) در Previous Version نمایش داده می شوند. اصلا یکی از فلگ ها مربوط به نمایش/عدم نمایش در لیست است. ولی سایر فلگ ها هم موثرند (مثلا بکاپ از نوع ریستور پوینت هیچوقت نمایش داده نمی شه)

که با دستور vssadmin نگاهی به فلگ های بکاپهای عادی بیاندازید مساله را پیدا می کنید.

"

درباره ی دستور vssadmin ، این مطالب را پیدا کردم :

Vssadmin

Manage the Volume Shadow Copy Service with from the Vssadmin Command-Line

Controlling Windows Vista/7 shadow copies

Use Vssadmin command-line to manage VSS in Windows

ولی اینا را باید توی کجا (یا به عنوان ورودی کدوم تابع) وارد کرد؟ درباره ی اینا توضیح نداد توی اون لینک .
حالا فلگ های دیگه را هنوز نمیدونم
ممنون
 

the_king

مدیرکل انجمن
ممنون استاد علی .
بله قضیه ی uac را میدونم . درباره ی قضیه ی messagebox هم ممنون . messagebox را کلا نادیده بگیرین . uac هم حالا فرض کنید کاربر اجازه داد . اینکه کلا روال کار به این شکل درست نیست هم نادیده بگیرین . حالا چجوری میشه کد بالا را در تابع Main بصورت درست نوشت که یکبار برنامه مون اجرا بشه (و همینطور برنامه ی رایج و جاری مون که با سطح دسترسی معمولی در حال اجراست ، بسته بشه) ؟
شما خودتون در Main با کدی که هست فرمی رو نمایش میدهید، اگه کدی نباشه که نخ دیگه کاری برای انجام نداره و برنامه بسته میشه. یعنی بسته شدن برنامه کاری نیست که کد لازم داشته باشه. در فرم ها هم که نوشتم، با Application.Exit بسته میشه. مشکل کد شما اینه که به ظاهر اصلا برایش دسترسی ادمین نیاز نیست. اینجا یکبار و چند بار معنی نداره. چرا فکر می کنید کدتون باید یکبار اجرا بشه؟ ممکنه همون یکبار هم اضافی باشه. کد شما که اصلا کاری با دسترسی ادمین بودنش نداره، چک نمی کنه که دسترسی داره یا نه. اگر کاربر خودش برنامه رو شما رو با دسترسی ادمین اجرا کرد چه مرضی داریم که مجددا یکبار اجراش کنیم؟
حالا این به کنار، شما می توانید موقع اجرا کردن پروسه در همون ProcessStartInfo یک Arguments دلخواهی فرضا "admin" مشخص کنید که موقع اجرا شدن برنامه در Environment.GetCommandLineArgs و Environment.CommandLine قابل دسترسی ئه. اولین پارامتر اسم فایل اجرایی برنامه است و آرگومان در ادامه اش قرار میگیره. در Main می توانید اون آرگومان رو جستجو کنید تا اگر پیدا نشد، متوجه شوید که فراخوان برنامه خودتون نیست و نیازه فراخوانیش کنید. گرچه کد اشتباه با هر استدلالی اشتباهه.

فرض کنید که می خواهید با برنامه تان فایل rar بسازید یا از حالت فشرده خارج کنید. دو تا گزینه دارید، یا از کمپوننت و کتابخانه های موجود استفاده می کنید و یا با دستورات command line با rar.exe کار می کنید. طبعا هم موقع کار با command line یکسری محدودیت ها پیدا می کنید، چون در کمپوننت ها مراحل اجرا تکه تکه بود و می توانستید کارهای زیادی رو انجام بدید و روی روال اجرا هم تسلط داشتید، اما در Command Line همون اول یک دستوری می دهید و تا دستور تموم نشده نه می توانید تغییری در روال بدهید و نه از پیشرفت کار با خبر می شوید. در مورد بعضی Command Line ها می توانید از ProcessStartInfo.RedirectStandardOutput کمک بگیرید تا اگر اون فرمان خروجی متنی مناسب پردازشی داره داخل برنامه تون دریافتش کنید، اما در مورد خیلی از Command Line ها حتی اینکار هم نتیجه مناسبی نداره. حالا در مورد VSS هم همین قضیه است. شما همیشه می توانید با Process.Start یک فرمان Command Line رو به یک فایل اجرایی بدهید اما تسلطی که در حین انجام کار دارید ممکنه خیلی کم باشه. اگر می خواهید در مورد کار با Command Line آشنا بشید، اول با یک نمونه ساده تر مثل C:\Windows\System32\PING.EXE تمرین کنید که سوئیچ های پیچیده و مشکل سازی نداره و سریع هم به جواب میرسه و سیستمی هم نیست که رویش کار نکنه. اگر بخواهید از اول با یک برنامه و سرویس های پیچیده تمرین کنید مشکلات تون چند برابر میشه.
 

جدیدترین ارسال ها

بالا