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

the_king

مدیرکل انجمن
خیلی ممنون استاد علی
خوب منم که گفتم دونه دونه که همینجوری جلو میرم ، مستنداتی که مربوط به اون تابع و پارامترهاش و لینک هایی که از اونجا میده را میخونم . ولی انگار نیاز به اطلاعات گسترده تری داره . خوب من که نمیدونم چه چیزهایی لازمه . نمیدونم هم کدوم مقاله را باید بخونم یا ترتیب الویت اش کدوم هستن . مثلا درباره ی security descriptor و acl خیلی مقاله پیدا کردم :

لینک اول و کلا اون گروه مطالبی که در کنارش فهرست شده خیلی مناسبه. اون لینک دوم بدردتون نمیخوره یا حداقل الان بدردتون نمیخوره، برای دسترسی های عادی مختص پروسه و پروسه سازی است، شما با دسترسی های عادی پروسه تون که مشکلی ندارید، با دسترسی های COM اش کار دارید.
لینک های بعدی و مثال های دیگه هم علاوه بر اینکه بیشتر متفرقه است، زمانی براتون قابل درک و استفاده میشن که اصل موضوع رو بشناسید، قاعدتا الان خیلی برای بررسی شون زوده.
لطف میکنین یه لینکی بدین که نمونه کد کامل از مثال ++C برای ساخت شی و کلا استراکچر security descriptor برای امنیت process را مثال زده باشه؟ اگه مثال #C در این زمینه باشه که عالی میشه . اگه میشه ، کامل باشه چون تیکه تیکه را پیدا میکنم ولی مثال کامل (مخصوصا ساده) به سختی گیر میاد.

چیزی که شما دنبالش هستید امنیت process نیست، امنیت process همونه که در لینک دوم لیست دسترسی های عمومی شو می بینید، مثل اجازه معلق کردن پروسه. شما موضوع تون دسترسی در COM ئه.
Security in COM - Windows applications
https://docs.microsoft.com/en-us/wi...rocesswide-security-with-coinitializesecurity
مثال ساده یا حتی کامل فقط برای تعیین دسترسی به تنهایی نیست، حتما جزئی از یک کار بزرگتره که نیاز به اون دسترسی داره. مثال هایی هم که عموما هست برای دسترسی هایی است که ارتباطی با COM و نیاز شما نداره، مثل دسترسی به فایل و رجیستری و ...

و از طرف دیگه هنوز حداقل به من نگفتید که از بررسی اجرای کدتون در alphavss به این نتیجه رسیدید که ارتباط COM حتما در پروسه برنامه خودتونه یا اصلا ظاهرا مربوط به alphavss ئه و بیخودی برای پروسه خودتون دسترسی COM تعریف می کنید.

این داره خیلی وقت ازم میگیره. تصمیم گرفتم این قضیه ی security descriptor را در پس زمینه و با روال آروم با پیگیری کامل مستندات انجام بدم (حالا شاید هم به نتیجه برسم یا نه) و وقت بیشتر را برای پیگیری اصل vss و مستنداتش بذارم .
خیلی ممنون
حتما وقت میگیره.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
و از طرف دیگه هنوز حداقل به من نگفتید که از بررسی اجرای کدتون در alphavss به این نتیجه رسیدید که ارتباط COM حتما در پروسه برنامه خودتونه یا اصلا ظاهرا مربوط به alphavss ئه و بیخودی برای پروسه خودتون دسترسی COM تعریف می کنید.


حتما وقت میگیره.

خیلی ممنونم استاد علی
نمیدونم . چجوری باید متوجه بشم؟
 

the_king

مدیرکل انجمن
خیلی ممنونم استاد علی
نمیدونم . چجوری باید متوجه بشم؟
یک پروژه جداگانه برای مثالی ساده استفاده از alphavss ایجاد کنید که قاطی کد نویسی های قبلی نشه و باهاش یک عملیاتی رو با alphavss انجام بدید که طبیعتا موقع اجرا با کاربر ادمین باید موفقیت آمیز کار کنه، فرضا backup بسازه.
حالا فایل اجرایی این پروژه رو با یک کاربر standard ویندوز تون که دسترسی های ادمین رو نداره مجددا امتحان کنید. از اونجایی که پروسه پروژه خودتون برای دسترسی های ادمین درخواستی نداده با کاربر فعال استاندارد اجرا میشه که vss نمیتونه باهاش کار کنه و اگر همچنان برنامه درست کار کنه نشون میده که alphavss با پروسه مجزایی درخواست دسترسی ادمین کرده که البته بعیده که اینطور باشه ولی اگر چنین باشه نشون میده که کلا alphavss مستقل ئه و دسترسی های COM پروسه شما روی اون تاثیری نداره.
و همچنین در تست بعدی پروژه جداگانه تون رو با صفت MTAThread بجای STAThread کامپایل کنید که معمولا ارتباط COM ها رو مختل می کنه، در مورد بیشتر کمپوننت ها اینطوریه. بعد ببینید همچنان پروژه تون تحت کاربر ادمین میتونه موفقیت آمیز کار کنه یا نه. اگر کار کنه یقینا که نه ولی به احتمال زیاد نشون میده که ارتباط COM مستقیمی بین پروسه برنامه شما و vss نیست و دسترسی های COM پروسه شما روی کارش تاثیری نداره.

اگر در هر دو تست برنامه درست کار نکنه میتوانید خیلی امیدوار باشید که دسترسی COM پروسه تون بتونه موثر باشه وگرنه فقط باید داخل alphavss دنبال همچین چیزی باشید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
یک پروژه جداگانه برای مثالی ساده استفاده از alphavss ایجاد کنید که قاطی کد نویسی های قبلی نشه و باهاش یک عملیاتی رو با alphavss انجام بدید که طبیعتا موقع اجرا با کاربر ادمین باید موفقیت آمیز کار کنه، فرضا backup بسازه.

منظورتون از کد نویسی قبلی ، کدهای مربوط به تابع CoInitializeSecurity و استراکچرها و کلا روندهای مربوط بهش هست؟
اگه آره ، همه شون را کامنت کردم و کلا تاثیری ندارن .
کد بکاپ را اجرا کردم و درست اجرا شد و بکاپ گرفته شد .


حالا فایل اجرایی این پروژه رو با یک کاربر standard ویندوز تون که دسترسی های ادمین رو نداره مجددا امتحان کنید. از اونجایی که پروسه پروژه خودتون برای دسترسی های ادمین درخواستی نداده با کاربر فعال استاندارد اجرا میشه که vss نمیتونه باهاش کار کنه و اگر همچنان برنامه درست کار کنه نشون میده که alphavss با پروسه مجزایی درخواست دسترسی ادمین کرده که البته بعیده که اینطور باشه ولی اگر چنین باشه نشون میده که کلا alphavss مستقل ئه و دسترسی های COM پروسه شما روی اون تاثیری نداره.

منظورتون اینه که یک user دیگه در ویندوز (10) ام بسازم که دسترسی ادمین نداشته باشه تا برنامه و کد را توش اجرا کنم یا اینکه صرفا در همین user فعلی باشه که کلا برنامه ام بصورت ادمین درخواست نده و اجرا بشه کافیه؟


و همچنین در تست بعدی پروژه جداگانه تون رو با صفت MTAThread بجای STAThread کامپایل کنید که معمولا ارتباط COM ها رو مختل می کنه، در مورد بیشتر کمپوننت ها اینطوریه. بعد ببینید همچنان پروژه تون تحت کاربر ادمین میتونه موفقیت آمیز کار کنه یا نه. اگر کار کنه یقینا که نه ولی به احتمال زیاد نشون میده که ارتباط COM مستقیمی بین پروسه برنامه شما و vss نیست و دسترسی های COM پروسه شما روی کارش تاثیری نداره.

اگر در هر دو تست برنامه درست کار نکنه میتوانید خیلی امیدوار باشید که دسترسی COM پروسه تون بتونه موثر باشه وگرنه فقط باید داخل alphavss دنبال همچین چیزی باشید.

با صفت MTAThread و با دسترسی ادمین انجام دادم ، کد کار کرد و باز هم بکاپ گرفته شد .
 

the_king

مدیرکل انجمن
منظورتون اینه که یک user دیگه در ویندوز (10) ام بسازم که دسترسی ادمین نداشته باشه تا برنامه و کد را توش اجرا کنم یا اینکه صرفا در همین user فعلی باشه که کلا برنامه ام بصورت ادمین درخواست نده و اجرا بشه کافیه؟
من که نمیدونم الان کاربر فعلی تون از چه نوعیه، یک کاربر غیر ادمین باشه، از گروه کاربران standard باشه :
How to change a Windows 10 user account type and why

با صفت MTAThread و با دسترسی ادمین انجام دادم ، کد کار کرد و باز هم بکاپ گرفته شد .
خبر خوبی نیست، یعنی شما هر کاری با پروسه تون بکنید تاثیری روی روال alphavss نداره. دسترسی پروسه تون نقشی در ماجرا نداره که بخواهید روی اون وقت بذارید.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
من که نمیدونم الان کاربر فعلی تون از چه نوعیه، یک کاربر غیر ادمین باشه، از گروه کاربران standard باشه :
How to change a Windows 10 user account type and why


خبر خوبی نیست، یعنی شما هر کاری با پروسه تون بکنید تاثیری روی روال alphavss نداره. دسترسی پروسه تون نقشی در ماجرا نداره که بخواهید روی اون وقت بذارید.

خیلی ممنون
یه اکنت جدید با دسترسی standard ساختم . پروژه را توش بصورت معمولی اجرا کردم که طبعا با ارور مواجه شد اما توی همون اکنت (با دسترسی standard ) ، پروژه را بصورت run as admin اجرا کردم ، بکاپ با موفقیت انجام شد.

الان پس شما نمیتونید یه راهکار دیگه بهم پیشنهاد بدید (توی قضیه ی محافظت از بکاپ ها) تا روی اون راهکار مطالعه و پیگیری کنم؟
یا اینکه حداقل یه راهکاری میتونید بدید که دستور vssadmin delete shadows را کاری کنم تا اجرا نشه؟ چون طبق چیزی که خوندم ، اغلب بدافزارها یا مخصوصا باجگیرها از این دستور برای پاک کردن بکاپ ها استفاده میکنن . یه روش ساده که به نظرم میاد اینه که مثلا vssadmin.exe را rename کنم اما این علاوه بر اینکه خیلی راحت قابل دور زدن هست ، به نوعی پاک کردن صورت مسئله هست (که حتی خود کاربر هم نمیتونه از vssadmin استفاده کنه) . البته اگه تغییراتی بدم ، قبل اش به کاربر اطلاع میدم .

توی دستور vssadmin نوشته ، فقط بکاپ های نوع VSS_CTX_CLIENT_ACCESSIBLE و VSS_CTX_CLIENT_ACCESSIBLE_WRITERS را میتونه پاک کنه بنابراین میشه یه راهکار این باشه که بکاپ ها را از این نوع نگیرم که خوب هم باعث میشه بکاپ ها در اون سربرگ previous version نشون نده و هم اینکه میتونن از دستورات api ویندوز عمل delete بکاپ ها را انجام بدن (بجای vssadmin delete shadows) که این راهکار هم خنثی میشه .
 
آخرین ویرایش:

the_king

مدیرکل انجمن

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

سطح محافظتی که تصور میکنید رو با واقعیت بسنجید، قبلا بهش اشاره کردم، مثل اینه که مایکروسافت رو راهنمایی کنیم که چیکار کنه ویندوز یا آفیسش کرک نشه. خوب اگه عملی بود که خودش یه خاکی تو سرش میریخت که کرک نشه.
شما نمی توانید چیزی رو از دسترسی کاربر ادمین محافظت کنید، از این بابت خیالتون راحت. هر چیزی هم که هر جایی خوندید جدی نگیرید، تو اینترنت هم مطالب درست هست و هم مطالب اشتباه.
کسی که فکر حفاظت از سیستمشه، باید اجازه نده بد افزار روی سیستم قرار بگیره و اجرا بشه، وگرنه خیال میکنید vssadmin چیکار میکنه جز استفاده از vss؟ مثل برنامه #C شما است، مستقل از vss که کار نمی کنه.
چه فرقی می کنه که طرف خودش یک برنامه شبیه به vssadmin با #C بسازه یا از vssadmin استفاده کنه؟ شما که برنامه بد افزار دست نویس اون یارو رو که نمیتوانید کنترل کنید.
اونهایی که اینجور مطالب در مورد rename رو مطرح میکنند دید درستی از امنیت و شناختی کاملی از ویندوز ندارند، حرفشون رو جدی نگیرید.
تازه کسی که نگران داده هاش باشه که اصلا از vss استفاده نمی کنه. هارد بسوزه یا بدزدنش نسخه backup ئه vss داشت یا نداشت فرقی میکرد؟
backup داده های مهم رو روی یک رسانه دیگه در جای دیگری نگهداری میکنند. اونم یک نسخه مستقل که بدرد بازیابی بخوره، نه با vss

شما می توانید ببینید نسخه backup ئه در کدام مسیر ذخیره میشه، شاید بتوانید دسترسی اون فولدر رو طوری تغییر بدید که فقط برای یکسری کاربران سیستم تون قابل دسترسی باشه، که اونم از نظر من کار بیخودیه.
مثل بعضی فولدر های سیستم تون که موقع rename کردن میبینید دسترسی کافی ندارید و Owner اش رو تغییر میدهید و دسترسی پیدا می کنید.
اما اینکه اینکار رو بکنید و بعدا چه اختلالی در سایر عملیات روی vss پیش میاد رو باید تست کنید. همه دسترسی ها در زبانه Security ئه :
How to take ownership of files and folders on Windows 10
 

SU-57

Active Member
سلام

1-- اصلا یادگیری قسمت Console App فایده ای داره یا اینکه فقط Windows Form App رو یاد بگیریم. اصلا Console کاربرد داره؟

2- می خواهیم یک برنامه بنویسیم از .NET Framework چند استفاده کنیم بهتره. مثلا از نسخه 2 یا آخرین نسخه. تفاوتی هم می کنن؟

3- مستند سازی دقیقا چیه؟ همین نوشتن توضیحات برای کدهاست؟ مستند سازی در هنگام نوشتن کدهاست یا بعد از اینکه برنامه رو کامل نوشتیم؟ مستند سازی رو می شه به زبان فارسی نوشت یا اینکه حتما باید به زبان انگلیسی باشه.
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
سلام

1-- اصلا یادگیری قسمت Console App فایده ای داره یا اینکه فقط Windows Form App رو یاد بگیریم. اصلا Console کاربرد داره؟

2- می خواهیم یک برنامه بنویسیم از .NET Framework چند استفاده کنیم بهتره. مثلا از نسخه 2 یا آخرین نسخه. تفاوتی هم می کنن؟

3- مستند سازی دقیقا چیه؟ همین نوشتن توضیحات برای کدهاست؟ مستند سازی در هنگام نوشتن کدهاست یا بعد از اینکه برنامه رو کامل نوشتیم؟ مستند سازی رو می شه به زبان فارسی نوشت یا اینکه حتما باید به زبان انگلیسی باشه.

سلام
1) به نظر من نه ، کاربرد نداره . صرفا Console App را توی دانشگاه ها درس میدن تا از جزئیات گرافیکی خلاص بشن .
2) بستگی داره ویندوز هدفتون چی باشه. عموما ، بهتره یه نسخه را در نظر بگیرید که همه ی ویندوزها یا بصورت پیش فرض اون نسخه (یا نسخه ی بالاترش از اون خانواده) را نصب داشته باشن یا بتونن نصب کنن . حالت استاندارد ، نسخه ی 4.0 میتونه باشه که از ویندوز xp تا 10 را براحتی ساپورت میکنه .
3) همون نوشتن کامنت منظورتونه؟
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
خیلی ممنون استاد علی .
پس به کسایی که از این برنامه ام استفاده میکنن ، پیشنهاد میکنم از پادویش برای محافظت از بکاپ شون استفاده کنن منتها همه ی درایوهاشون را در پادویش برای بکاپ نگرفتن در حالت استثناء قرار بدن :green:
من نمیدونم پادویش چجوری داره محافظت میکنه.
به نظرتون داره از سطح درایورش برای محافظت استفاده میکنه؟
جوری هه که نه کاربر admin سیستم توسط cleanup میتونه پاک کنه (از این طریق ، هیچ ارور و هشداری هم نمیده اما بکاپ هم پاک نمیشه) و نه از طریق دستورات vssadmin میتونه پاک کنه (در این صورت با هشدار داده بان پادویش مواجه میشه که گزینه ی "برنامه را ببند" داره و با زدن این گزینه توسط کاربر ، پروسه ی برنامه مربوطه (در اینجا power shell) بسته میشه) و به طبع نباید هم هر برنامه ی دیگه ای با دسترسی admin بتونه با دستورات api ویندوز ، بکاپ ها را با وجود پادویش حذف کنه .


از اساس یه حفاظت بی معنیه، میخواهید از چیزی حفاظت کنید که نه از خودش میتونه حفاظت کنه و نه بدون داده اصلی اعتبار داره.
اگه شما بمن بگید من نرم افزاری دارم که همچین قابلیتی داره تنها واکنشم اینه که فکر می کنم نسخه backup ئه vss خودش چقدر برای من اهمیت داره که حالا حفاظتش اهمیت داشته باشه.
اینکه ویندوز برای حفاظت از فایل های سیستمی خودش از vss استفاده میکنه به کنار، برای من کاربر vss کاربردی نداره.
اگه فکر می کنید نرم افزاری قصد داره backup هاتون رو از بین ببره اولا چرا اصلا کل داده های درایو رو از بین نبره و ثانیا چرا برای داده های مهم تون از vss استفاده می کنید؟

این خودش داستان داره .
یعنی در وهله و دید اول ، حرفتون درسته ولی از یه طریق دیگه نگاه کنید ، حفاظتش منطقی هه . اول باید هدف از ساختش را پی برد تا متوجه ی کاربردش شد .
اصلا داستان ساخت این نرم افزار بکاپی که دارم میسازم ، برمیگرده به کمبودهای آپشن های پادویش برای بکاپ گیری . من دیدم که این بخش (بکاپ گیری و داده بان) چیز خیلی خوبیه (حداقل برای من که جلوتر توضیح میدم) اما این رویه ای که اینها برای بکاپ گیری در پیش گرفتن (حداقل هر روز یکبار تا دوبار از کل درایوها بکاپ میگیره . اگه کاربر بخواد خودش مجزا از یه پوشه فقط بکاپ بگیره ، اولا گزینه ای برای پوشه ی خاص نداره و فقط از کل درایو بکاپ میگیره و دوما باز هم برای یه بکاپ از یه درایو ، از کل درایو بکاپ میگیره) تقریبا بی هدف بکاپ میگیره که این روند باعث اذیت کاربر در دراز مدت میشه (حداقل برای من) . به خودشون گفتم ، گفتن چون پادویش برای بکاپ گیری ساخته نشد و صرفا این بخشش برای امنیت بیشتر ساخته شد ، فعلا بطور خاص روی بسط و گسترش آپشن های قسمت بکاپش کار نمیکنن . که از اونجایی که این قابلیت کاربردی هه (در جلوتر کاربردش را میگم) و نرم افزارهای حتی خارجی هم در این زمینه ، کم و بدون کرک (یا پولی هستن که به آسونی هم گیر نمیاد) هستن ؛ باعث شد خودم به فکر یه نرم افزار بکاپ گیری بیفتم .
کلا میخوام بگم هدف من از ساخت این نرم افزار اینه که ضعف های بکاپ گیری پادویش را پوشش بده (البته هدفم تنها این نیست) . بنابراین حالا باید هدف پادویش از این نرم افزار بکاپ اش را ببینیم که چیه .
پادویش برای باجگیرها این بخش را طراحی کرد (البته ضد باجگیر پادویش 4 بخش داره که یه بخش اش بکاپ گیری و محافظت از بکاپ هست . بخش ها و مکانیسم حفاظت از فایل اش در برابر باجگیرها را کاری ندارم) . همونطور که میدونید ، چون باجگیرها فایل ها را بدون بازگشت حذف میکنن و اگه بکاپ vss ای وجود داشته باشه ، تمام کارشون هدر میره ، پس پاک کردن این بکاپ ها برای باجگیرها از الویت بسیار ویژه ای برخوردار هه تا کاربر قادر به بازگردانی فایل پاک شده اش نباشه . اینجاست که حفاظت از بکاپ ها و کاربرد بکاپ بسیار خودش را نشون میده .

علاوه بر این کاربرد بکاپ های vss میتونه خیلی چیزهای دیگه باشه . مثلا چون معمولا خیلی کم حجم اند و زمان خیلی کمی میگیرن ، خوب هر کسی یکی میتونه بکاپ بگیره ولو شده بذاره واسه روز مبادا (سنگ مفت ، گنجشک هم مفت) :green: . پیش میاد مواردی که خود کاربر (یا گاها یه نرم افزار) ناخواسته فایلی را حذف کنه که با وجود بکاپ ، راحت میشه بر گردوندنش (واسه من بارها پیش اومده) . کلا به نظرم کاربرد داره .
هر چند بکاپی نیست که به عنوان بکاپ اصلی بشه روش حساب باز کرد . من معمولا برای درایو ویندوزم ، بکاپی توسط acronis true image تهیه میکنم و برای درایوهای آرشیو ام (غیر ویندوز) از بکاپ vss استفاده میکنم .


تازه کسی که نگران داده هاش باشه که اصلا از vss استفاده نمی کنه. هارد بسوزه یا بدزدنش نسخه backup ئه vss داشت یا نداشت فرقی میکرد؟
backup داده های مهم رو روی یک رسانه دیگه در جای دیگری نگهداری میکنند. اونم یک نسخه مستقل که بدرد بازیابی بخوره، نه با vss

البته توی vss انگار چشمم افتاد به اینکه بکاپش قابل انتقال باشه یا نه . انگار یه اتریباتس یا آپشنی بود که بعدا درباره اش بیشتر تحقیق میکنم .


شما می توانید ببینید نسخه backup ئه در کدام مسیر ذخیره میشه، شاید بتوانید دسترسی اون فولدر رو طوری تغییر بدید که فقط برای یکسری کاربران سیستم تون قابل دسترسی باشه، که اونم از نظر من کار بیخودیه.
مثل بعضی فولدر های سیستم تون که موقع rename کردن میبینید دسترسی کافی ندارید و Owner اش رو تغییر میدهید و دسترسی پیدا می کنید.
اما اینکه اینکار رو بکنید و بعدا چه اختلالی در سایر عملیات روی vss پیش میاد رو باید تست کنید. همه دسترسی ها در زبانه Security ئه :
How to take ownership of files and folders on Windows 10

پس آخرین بخش ، فقط محافظت پوشه مطرح هه . ممنون .
البته چون مطالعاتم کامل نیست ، اصلا نمیدونم توی چه پوشه ای ذخیره میشه . آدرس بکاپ ها مثلا انگار در شبکه share شده باشن ، اینجوری هه :

کد:
\\localhost\نام درایو$\زمان بکاپ
حالا ببینم از این روش استفاده میکنم یا کلا بی خیال میشم و پادویش را پیشنهاد میکنم . البته قطعا باز هم پیشنهاد پادویش گزینه ی چون این راه ها براحتی قابل دور زدنه
 
آخرین ویرایش:

SU-57

Active Member
3) همون نوشتن کامنت منظورتونه؟
مراحل نوشتن برنامه رو نوشته بعد مرحله آخر که مرحله نگهداریه ولی مرحله یکی مونده به آخر مستند سازیه. حالا من نمی دونم منظورش دقیقا همون توضیحاته یا چیز دیگه ایه اگه توضیحات بود چرا پس مرحله یکی مونده به آخره. این یعنی اول همه برنامه رو بسازیم آخر سر مستند سازی. الان خودت مستند سازی می کنی فارسیه یا حتما انگلیسیه
 

SajjadKhati

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


مستندسازی را نمیدونم ولی کامنت هام فارسی هه
 

the_king

مدیرکل انجمن
سلام
1-- اصلا یادگیری قسمت Console App فایده ای داره یا اینکه فقط Windows Form App رو یاد بگیریم. اصلا Console کاربرد داره؟
صد البته که مفیده. Windows Form App میتونه برای کاربری که داخل محیط خود برنامه هست گزارش پیشرفت کارش رو نشون بده ولی وقتی توسط سایر برنامه ها قراره اجرا بشه تا کاری رو در پس زمینه انجام بده نمیتونه گزارش پیشرفت کار مستقیمی بده، مجبوره به روش هایی مثل ایجاد فایل خروجی تکیه کنه که اونم چندان کاربردی و بی دردسر نیست. برعکس برنامه های کنسولی می توانند خروجی متنی مفصلی رو به برنامه دیگری تحویل بدهند بدون اینکه اصلا فایلی در بین شون در کار باشه. حتی می توانند بصورت تدریجی از جایی ورودی بگیرند و بصورت تدریجی خروجی بدهند. برای همینه که خیلی از نرم افزار هایی که توسط سایر برنامه ها استفاده میشوند یا کنسولی هستند یا حداقل یک نسخه کنسولی دارند. مثل winrar و pngcrush و ffmpeg و 7zip و ImageMagick و ping و net و ...
فقط تصور کنید چقدر نرم افزار تبدیل صوتی و گرافیکی متفاوت در اینترنت هستند که هسته اصلی تبدیل شون ffmpeg ئه، یک برنامه کنسولی.

2- می خواهیم یک برنامه بنویسیم از .NET Framework چند استفاده کنیم بهتره. مثلا از نسخه 2 یا آخرین نسخه. تفاوتی هم می کنن؟
هر چقدر نسخه بالاتر باشه امکانات بیشتری برای کد نویسی شما هست و سازگاری کمتری برای کسی که میخواد ازش استفاده کنه. پس پایین ترین نسخه ای که به امکاناتش نیاز دارید رو انتخاب کنید تا هم خودتون در کد نویسی مشکلی داشته باشید و هم حداکثر سازگاری رو با ویندوز های قدیمی تر و بدون نیاز به نصب Framework داشته باشه. بیخودی نسخه بالایی رو انتخاب نکنید که به امکاناتش نیازی ندارید. قبلا در همین تاپیک در موردش صحبت شده.

3- مستند سازی دقیقا چیه؟ همین نوشتن توضیحات برای کدهاست؟ مستند سازی در هنگام نوشتن کدهاست یا بعد از اینکه برنامه رو کامل نوشتیم؟ مستند سازی رو می شه به زبان فارسی نوشت یا اینکه حتما باید به زبان انگلیسی باشه.
مستند سازی یعنی مطالبی که هم برای برنامه نویسی که میخواد پروژه رو ادامه بده و هم برای کاربری که ازش استفاده می کنه توضیح بده این چیه و برای چه منظوری بکار میره.
مستند سازی هم فقط این نیست که در کد بنویسید متد کارش چیه و این پارامتر برای چیه. اونجور مستند سازی مثل کار اون کارخونه های ایرانی است که یه دستگاه پیچیده رو میفروشن که توی جعبه اش یک برگه A5 راهنما به زحمت پیدا میشه. کسی که بخواد از پروژه شما استفاده کنه به مستند جدایی مثل pdf هم نیاز داره که با فهرست و فصل های متفاوت نحوه استفاده رو توضیح بده. حتی خودتونم بعد یه مدت که از کدتون فاصله گرفتید یادتون خواهد رفت و به مستندات نیاز پیدا می کنید.
زبان خاصی مطرح نیست ولی معمولا در پروژه هایی که در اینترنت می بینید زبان انگلیسی ئه. اگر کار بین المللی نمی کنید اهمیتی نداره ولی انگلیسی حداقل موقع تایپ کردن در ویژوال استدیو مثل فارسی که راست به چپ شدنش مشکل سازه نمیشه. در ویژوال استدیو در منوی ...Project > {project_name} Properties زبانه Build یک گزینه XML documentation هست. اون گزینه برای برنامه هایی که برای کلاس ها و متدهاشون مستند سازی استاندارد دارند مهمه. بالای هر موردی مثل تعریف کلاس و فیلد و ... که سه تا کاراکتر /// تاپیک کنید، خودکار برای نوشتن یکسری اطلاعات اساسی جا باز میشه که البته اطلاعات محدود به اونها نیست که نوشته و جا برای اطلاعات بیشتری هم هست. اطلاعاتی که اونجا در سطر های /// می نویسید بصورت خودکار در مستندات xml همراه فایل اجرایی برنامه تون قرار میگیره که خود ویژوال استدیو هم برای کسی که میخواد از برنامه تون استفاده کنه نمایش میده.
 

the_king

مدیرکل انجمن
خیلی ممنون استاد علی .
پس به کسایی که از این برنامه ام استفاده میکنن ، پیشنهاد میکنم از پادویش برای محافظت از بکاپ شون استفاده کنن منتها همه ی درایوهاشون را در پادویش برای بکاپ نگرفتن در حالت استثناء قرار بدن :green:
من نمیدونم پادویش چجوری داره محافظت میکنه.
به نظرتون داره از سطح درایورش برای محافظت استفاده میکنه؟
جوری هه که نه کاربر admin سیستم توسط cleanup میتونه پاک کنه (از این طریق ، هیچ ارور و هشداری هم نمیده اما بکاپ هم پاک نمیشه) و نه از طریق دستورات vssadmin میتونه پاک کنه (در این صورت با هشدار داده بان پادویش مواجه میشه که گزینه ی "برنامه را ببند" داره و با زدن این گزینه توسط کاربر ، پروسه ی برنامه مربوطه (در اینجا power shell) بسته میشه) و به طبع نباید هم هر برنامه ی دیگه ای با دسترسی admin بتونه با دستورات api ویندوز ، بکاپ ها را با وجود پادویش حذف کنه .




این خودش داستان داره .
یعنی در وهله و دید اول ، حرفتون درسته ولی از یه طریق دیگه نگاه کنید ، حفاظتش منطقی هه . اول باید هدف از ساختش را پی برد تا متوجه ی کاربردش شد .
اصلا داستان ساخت این نرم افزار بکاپی که دارم میسازم ، برمیگرده به کمبودهای آپشن های پادویش برای بکاپ گیری . من دیدم که این بخش (بکاپ گیری و داده بان) چیز خیلی خوبیه (حداقل برای من که جلوتر توضیح میدم) اما این رویه ای که اینها برای بکاپ گیری در پیش گرفتن (حداقل هر روز یکبار تا دوبار از کل درایوها بکاپ میگیره . اگه کاربر بخواد خودش مجزا از یه پوشه فقط بکاپ بگیره ، اولا گزینه ای برای پوشه ی خاص نداره و فقط از کل درایو بکاپ میگیره و دوما باز هم برای یه بکاپ از یه درایو ، از کل درایو بکاپ میگیره) تقریبا بی هدف بکاپ میگیره که این روند باعث اذیت کاربر در دراز مدت میشه (حداقل برای من) . به خودشون گفتم ، گفتن چون پادویش برای بکاپ گیری ساخته نشد و صرفا این بخشش برای امنیت بیشتر ساخته شد ، فعلا بطور خاص روی بسط و گسترش آپشن های قسمت بکاپش کار نمیکنن . که از اونجایی که این قابلیت کاربردی هه (در جلوتر کاربردش را میگم) و نرم افزارهای حتی خارجی هم در این زمینه ، کم و بدون کرک (یا پولی هستن که به آسونی هم گیر نمیاد) هستن ؛ باعث شد خودم به فکر یه نرم افزار بکاپ گیری بیفتم .
کلا میخوام بگم هدف من از ساخت این نرم افزار اینه که ضعف های بکاپ گیری پادویش را پوشش بده (البته هدفم تنها این نیست) . بنابراین حالا باید هدف پادویش از این نرم افزار بکاپ اش را ببینیم که چیه .
پادویش برای باجگیرها این بخش را طراحی کرد (البته ضد باجگیر پادویش 4 بخش داره که یه بخش اش بکاپ گیری و محافظت از بکاپ هست . بخش ها و مکانیسم حفاظت از فایل اش در برابر باجگیرها را کاری ندارم) . همونطور که میدونید ، چون باجگیرها فایل ها را بدون بازگشت حذف میکنن و اگه بکاپ vss ای وجود داشته باشه ، تمام کارشون هدر میره ، پس پاک کردن این بکاپ ها برای باجگیرها از الویت بسیار ویژه ای برخوردار هه تا کاربر قادر به بازگردانی فایل پاک شده اش نباشه . اینجاست که حفاظت از بکاپ ها و کاربرد بکاپ بسیار خودش را نشون میده .

علاوه بر این کاربرد بکاپ های vss میتونه خیلی چیزهای دیگه باشه . مثلا چون معمولا خیلی کم حجم اند و زمان خیلی کمی میگیرن ، خوب هر کسی یکی میتونه بکاپ بگیره ولو شده بذاره واسه روز مبادا (سنگ مفت ، گنجشک هم مفت) :green: . پیش میاد مواردی که خود کاربر (یا گاها یه نرم افزار) ناخواسته فایلی را حذف کنه که با وجود بکاپ ، راحت میشه بر گردوندنش (واسه من بارها پیش اومده) . کلا به نظرم کاربرد داره .
هر چند بکاپی نیست که به عنوان بکاپ اصلی بشه روش حساب باز کرد . من معمولا برای درایو ویندوزم ، بکاپی توسط acronis true image تهیه میکنم و برای درایوهای آرشیو ام (غیر ویندوز) از بکاپ vss استفاده میکنم .




البته توی vss انگار چشمم افتاد به اینکه بکاپش قابل انتقال باشه یا نه . انگار یه اتریباتس یا آپشنی بود که بعدا درباره اش بیشتر تحقیق میکنم .




پس آخرین بخش ، فقط محافظت پوشه مطرح هه . ممنون .
البته چون مطالعاتم کامل نیست ، اصلا نمیدونم توی چه پوشه ای ذخیره میشه . آدرس بکاپ ها مثلا انگار در شبکه share شده باشن ، اینجوری هه :

کد:
\\localhost\نام درایو$\زمان بکاپ
حالا ببینم از این روش استفاده میکنم یا کلا بی خیال میشم و پادویش را پیشنهاد میکنم . البته قطعا باز هم پیشنهاد پادویش گزینه ی چون این راه ها براحتی قابل دور زدنه
قاعدتا backup ها جایی روی دیسک ذخیره میشه که با دسترسی مناسب حذف میشه و پروسه ها هم نمی توانند بصورت موثر جلو حذف شدنش رو بگیرند.
مساله اینجا است که چون خودتون نتوانستید backup ها رو پاک کنید نتیجه گرفتید که حفاظتش موثره. :green: ویندوز نمیتونه جلوی حذف فایل های اساسی خودشو بگیره، چه برسه به موارد دیگه.
در ضمن امتحان کردید که اگه بدافزاری تصمیم بگیره سرویس vss رو حذف کنه و از کار بیاندازه پادویش جلوشو میگیره یا نه؟
How To Remove Services In Windows - gHacks Tech News
 

SajjadKhati

کاربر فعال <A href="http://forum.majidonline.com/f
قاعدتا backup ها جایی روی دیسک ذخیره میشه که با دسترسی مناسب حذف میشه و پروسه ها هم نمی توانند بصورت موثر جلو حذف شدنش رو بگیرند.
مساله اینجا است که چون خودتون نتوانستید backup ها رو پاک کنید نتیجه گرفتید که حفاظتش موثره. :green: ویندوز نمیتونه جلوی حذف فایل های اساسی خودشو بگیره، چه برسه به موارد دیگه.
در ضمن امتحان کردید که اگه بدافزاری تصمیم بگیره سرویس vss رو حذف کنه و از کار بیاندازه پادویش جلوشو میگیره یا نه؟
How To Remove Services In Windows - gHacks Tech News

ممنون استاد علی
بله روی دیسک هستن .
من که نتونستم پاک کنم . اگه مثلا شما هم نسخه ی آزمایشی پادویش را نصب کنید و طرفندی برای حذف بکاپ پیدا کنید ، یا اینکه ویروس یا باج افزاری بدین که توی vmware تست کنم (یا به پادویش بدم تست کنه) که با وجود نصب بودن پادویش ، آیا میتونه بکاپ ها را حذف کنه یا نه ، برام جالب خواهد بود .
واسه ی منم جالبه که بدونم اینا با برنامه نویسی سطح درایور دارن این محافظت را انجام میدن یا با روش های پیشنهادی ویندوز مثل استفاده از تابع CoInitializeSecurity یا روش هایی از این قبیل . (البته به نظرم قطعا از متد CoInitializeSecurity استتفاده نمیکنن چون اونجور که خوندم و اشتباه نکرده باشم ، این متد نمیتونه بکاپ هایی که از پروسه های دیگه گرفته شده را محافظت کنه ولی پادویش از بکاپ هایی که اپلیکیشن من میگیره هم محافظت میکنه) .
سرویس های مربوط به vss را غیر فعال کردم (Volume Shadow Copy و Microsoft Software Shadow Copy Provider) در این صورت اصلا نتونست هیچ کاری کنه و موقع حذف ، ویندوز (powershell) ارور داد که سرویس ها غیر فعال هستن و بکاپ ها را حذف نکرد .
نه ، پادویش نمیتونه جلوی غیر فعال شدن این سرویس های vss را بگیره (البته فکر هم نکنم غیر فعال شدن سرویسی ، به آنتی ویروس مربوط باشه) .

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

میگم استاد علی ، بالاتر از دسترسی administrator ، دسترسی ای بنام system داریم؟ همچین چیزی اصلا داریم؟ و اگه آره ، این دسترسی system ، فقط برای برنامه نویس هاست و همون برنامه نویسی سطح درایور هست؟
 
آخرین ویرایش:

SajjadKhati

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

این یک نمونه از سندی که درباره ی قابل انتقال بودن بکاپ های vss پیدا کردم :

Importing Transportable Shadow Copied Volumes - Windows applications

حالا باید آروم آروم بخونم و اسناد بیشتری پیدا کنم .

بعد اینکه استاد علی در vss ، یه واژه ای بنام writer هست . من تعریف اینو توی واژه نامه ی قسمت vss خوندم . جاهای دیگه هم خوندم ولی متوجه نشدم چیه . شما متوجه شدین بهم توضیح بدین (بی زحمت) ؟
کلا 3 واژه ی اساسی Requester و Provider و Writer وجود داره (اون دو تا را تا حدودی درک کردم ولی Writer را متوجه نمیشم به چی میگه و کجا به درد میخوره) .
توی power shell هم دستور لیست writer را زدم که نتیجه اش را در زیر میذارم ولی من متوجه نشدم چیه :


2.JPG
 

the_king

مدیرکل انجمن
سرویس های مربوط به vss را غیر فعال کردم (Volume Shadow Copy و Microsoft Software Shadow Copy Provider) در این صورت اصلا نتونست هیچ کاری کنه و موقع حذف ، ویندوز (powershell) ارور داد که سرویس ها غیر فعال هستن و بکاپ ها را حذف نکرد .
نه ، پادویش نمیتونه جلوی غیر فعال شدن این سرویس های vss را بگیره (البته فکر هم نکنم غیر فعال شدن سرویسی ، به آنتی ویروس مربوط باشه) .

حدس میزدم، در واقع از لحظه ای که باجگیر vss رو از کار بندازه داده هایی که بعد ایجاد میکنید یا ویرایش می کنید حفاظت نمیشن. از طرف دیگه تصور کنید میخواهید فایلی رو از پروژه #C تون حذف کنید، هم می توانید از داخل ویژوال استدیو اینکار رو بکنید و هم بصورت دستی با ویرایش کردن فایل متنی پروژه. اینکه شما با غیر فعال بودن vss نتوانستید backup رو حذف کنید بخاطر اینه که میخواستید از خود سرویس vss کمک بگیرید، من در مورد حذف کردن از سیستم فایل و درایو صحبت می کنم که نیازی به خود سرویس نداره.
--------------------------------
میگم استاد علی ، بالاتر از دسترسی administrator ، دسترسی ای بنام system داریم؟ همچین چیزی اصلا داریم؟ و اگه آره ، این دسترسی system ، فقط برای برنامه نویس هاست و همون برنامه نویسی سطح درایور هست؟
نه، اصلا ربطی به سطح درایور نداره.
منظور از دسترسی administrator دسترسی ای به نام administrator نیست، منظور دسترسی ای است در سطحی که کاربر administrator دارد. administrator خودش دسترسی نیست، کاربره. فرقی نمی کنه که کاربری که دسترسی در اون سطح رو داره اسمش چیه، administrator بخاطر اینکه جزو گروه Administrators ئه مهمه، وگرنه کاربر Ali هم میتونه همونقدر دسترسی داشته باشه که administrator
مثل اینه که بگیم فلان چیز بوی پرتقال میده. میدونیم پرتقال بو نیست، پرتقال میوه است. ولی ما هر چی بوی اون رو بده میگیم بوی پرتقال.

system هم همینطور، دسترسی نیست، کاربر داخلی ئه، یعنی Internal Account ئه. بر خلاف کاربر هایی که شما برای لاگین در ویندوز تون میسازید، یکسری کاربر هایی از قبل در داخل ویندوز تعریف شده اند که لاگین کردنی نیستند و در لیست کاربران هم نمایش داده نمی شوند و عضو هیچ گروه کاربری هم نیستند، یعنی حتی جزو گروه کاربران Administrators ها هم به حساب نمیان. Administrator رو هم خود ویندوز از قبل ایجاد میکنه ولی جزو کاربران قابل نمایشه و باهاش لاگین هم می توانید بکنید و عضو گروه کاربری هم هست. SYSTEM کاربر سیستمی ویندوزه، بصورت پیشفرض دسترسی زیادی داره و سرویس های ویندوز و پروسه هایی که مستقل از کاربر شما اجرا میشن هم توسط همین SYSTEM اجرا میشن. اگه دقت کنید در لیست پروسه های ویندوز مشخص میشه که اجرا کننده اش کدوم کاربر ئه، اونجا یکسری پروسه با همین کاربر داخلی SYSTEM می بینید.
 

the_king

مدیرکل انجمن
بعد اینکه استاد علی در vss ، یه واژه ای بنام writer هست . من تعریف اینو توی واژه نامه ی قسمت vss خوندم . جاهای دیگه هم خوندم ولی متوجه نشدم چیه . شما متوجه شدین بهم توضیح بدین (بی زحمت) ؟
کلا 3 واژه ی اساسی Requester و Provider و Writer وجود داره (اون دو تا را تا حدودی درک کردم ولی Writer را متوجه نمیشم به چی میگه و کجا به درد میخوره) .
فرض کنید که با برنامه ای به نام X میخواد backup ساخته بشه، Requester همین X ئه. خودش فقط درخواست کننده است، هر نرم افزاری میتونه باشه مثل برنامه #C شما.
در خواست رو میده به Provider. که این Provider همون عاملی است که backup رو ایجاد میکنه یا مدیریت میکنه.
Provider هم چون داره از فایل ها یا کلا درایو یا هر موجودیت دیگه ای که مدام تغییر میکنه backup میگیره، در حین backup گرفتن اگه تغییری در داده ها پیش بیاد نصف داده قدیمیه و نصفش جدید و عملا یه چیز قاطی پاتیه که بدرد نمیخوره. مثل اینه که شما موقع رایت کردن DVD نصب ویژوال استدیو، نصف setup ویژوال استدیو 2015 رو بنویسین و نصف بعدی رو از ویژوال استدیو 2017، خوب این DVD درست نصب نمیشه چون نه اینه و نه اون.
برای همین در حین backup گیری باید یک مکث در رخداد هایی ایجاد بشه که این داده ها رو تغییر میدن. Writer همون عاملیه که میاد روی داده هایی که backup گرفته میشن نظارت میکنه. روال ذخیره سازی روی فایل ها و درایو مربوط به اون موقعیت رو موقتا منتظر نگه میداره تا backup اون بخش تموم بشه، یعنی برای خودش صف انتظار داره. همون Writer ئه که باعث میشه شما بتوانید در همون زمانی که هارد دیسک مشغول انواع نوشتن ها است و چیزی رو متوقف نکردید backup بگیرید، بدون اینکه داده ای در backup ناقص و غیر قابل استفاده بشه.
 

SU-57

Active Member
سلام

استاد علی فرض کن یک برنامه ای در ویژوال استودیو با 3 زبان درست شده یعنی هر قسمتش با یک زبان

Visual Basic.NET

c#

visual c++


خوب اینطور که تو کتاب نوشته هر قسمت بعد از کامپایل به کدهای MSIL تبدیل می شه و بعد از اون توسط کامپایلر دیگه ای که توی CLR هست این کد ها به هم وصل می شن و به زبان ماشین تبدیل می شن و تشکیل یک برنامه رو میدن.
من قبلا خونده بودم که سی پلاس پلاس سرعت بالایی داره و سی شارپ از نظر اجرا به سرعتش نمی رسه. یعنی سرعت یکی از ویژگی های زبان سی پلاس پلاسه

1- به نظر شما غیر از اینکه مایکروسافت با ویژوال استودیو کاری کرده همه برنامه نویس ها بتونن با هم روی یک پروژه کار کنن آیا این یک قریب و اشتباه نیست برای اون افرادی که می خوان سرعت سی پلاس پلاس رو داشته باشن اما در نهایت کدها به MSIL تبدیل می شن.

2- این جمله درسته: ما هر برنامه ای با سی شارپ بنویسیم و کامپایل کنیم همیشه به صورت کدهای MSIL هستش و هر وقت که اجراش کنیم توسط CLR به زبان ماشین ترجمه می شه.
این ماشین مجازی همون .NET Framework هستش.

3- امکان داره که تا چند سال آینده سرعت سی شارپ به سی پلاس پلاس برسه یا اینکه به هیچ عنوان عملی نیست.
_______________________

تو کتاب نوشته برنامه های سی شارپ از قطعاتی به نام کلاس تشکیل میشن و هر برنامه سی شارپ حداقل از یک کلاس تشکیل می شه که این کلاس از کلاس فرم ارث می بره.

4- حالا اگه من یک فرم ایجاد کردم و چند تا کنترل روش گذاشتم اسم این کلاس چیه که از کلاس فرم ارث برده؟(البته می دونم که همه کلاس ها از کلاس Object ارث می برن)

5- قبلا توی یک سایت خوندم که کلاس یک مفهومه و باید یک شی ازش بسازیم. پس چطوری برنامه های سی شارپ از قطعاتی به نام کلاس تشکیل می شن در حالی که کلاس مفهومه.
__________________

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

the_king

مدیرکل انجمن
سلام

استاد علی فرض کن یک برنامه ای در ویژوال استودیو با 3 زبان درست شده یعنی هر قسمتش با یک زبان

Visual Basic.NET

c#

visual c++


خوب اینطور که تو کتاب نوشته هر قسمت بعد از کامپایل به کدهای MSIL تبدیل می شه و بعد از اون توسط کامپایلر دیگه ای که توی CLR هست این کد ها به هم وصل می شن و به زبان ماشین تبدیل می شن و تشکیل یک برنامه رو میدن.
من قبلا خونده بودم که سی پلاس پلاس سرعت بالایی داره و سی شارپ از نظر اجرا به سرعتش نمی رسه. یعنی سرعت یکی از ویژگی های زبان سی پلاس پلاسه
این زبان برنامه نویسی نیست که تعیین کننده سرعت اجرا است، کامپایلر و پلتفرم زبان برنامه نویسی ئه. اینکه بصورت رایج کامپایلر های ++C کد رو بصورت بهینه به زبان ماشین ترجمه میکنند ئه که منجر به این سرعت اجرای بالاتر شده، نه اینکه چون زبان ++C بوده پس سریعتره. سرعت ++C ویژگی زبان اش نیست، ویژگی کامپایلر های خوبشه. چطور که همون ++C وقتی تحت ماشین مجازی NET. میاد به شکل محسوسی کند میشه.
خود زبان ++C همچین تفاوت آنچنانی خاصی با #C یا حتی Java نداره که سرعت نتیجه اون تفاوت ها باشه. #C و Java و ویژوال بیسیک چون کدش در ماشین مجازی اجرا میشه به نسبت کندتر از کامپایلر های زبان هایی است که مستقیما به کد ماشین واقعی ترجمه می کنند. C++ CLI هم در اغلب موارد همون اندازه سرعت اجرا داره که #C و همون اندازه که VB.NET . اینها همه شون خروجیشون همون MSIL ئه که معمولا مشابهه.
نمی توانید C++ CLI رو از لحاظ کارایی و سرعت اجرا با C++ Native یکی فرض کنید، طبعا کند تره، بخاطر زبان نیست، بخاطر کامپایلر و پلتفرم ئه. ماشین مجازی هر مزیتی هم داشته باشه کند شدن به هر حال جزو معایبشه.

1- به نظر شما غیر از اینکه مایکروسافت با ویژوال استودیو کاری کرده همه برنامه نویس ها بتونن با هم روی یک پروژه کار کنن آیا این یک قریب و اشتباه نیست برای اون افرادی که می خوان سرعت سی پلاس پلاس رو داشته باشن اما در نهایت کدها به MSIL تبدیل می شن.
فرض های مساله تون اشتباهه، شما می توانید در همون ویژوال استدیو پروژه C++ MFC/ATL مستقل از NET. و CLR/CLI داشته باشید که Native ئه و کاری با MSIL و ماشین مجازی هم نداره. در ضمن مزیت NET. به کتابخانه غنی و مجهز اونه، اینکه کسی با دانستن یک زبان برنامه نویسی بتونه از کد های سایر زبان ها استفاده کنه مزیت بزرگیه، فریب یا اشتباهی در کار نیست.

2- این جمله درسته: ما هر برنامه ای با سی شارپ بنویسیم و کامپایل کنیم همیشه به صورت کدهای MSIL هستش و هر وقت که اجراش کنیم توسط CLR به زبان ماشین ترجمه می شه.
این ماشین مجازی همون .NET Framework هستش.
بله.

3- امکان داره که تا چند سال آینده سرعت سی شارپ به سی پلاس پلاس برسه یا اینکه به هیچ عنوان عملی نیست.
شما زبان رو با زبان نمی تونید مقایسه کنید، باید کامپایلر رو با کامپایلر مقایسه کنید، ممکنه سه تا کامپایلر زبان ++C باشند که هر کدوم خروجی شون سرعت اجرای متفاوتی داشته باشه.
و به سال ارتباطی نداره، مادامی که CLR بصورت just-in-time یعنی در زمان اجرای برنامه بخواد کد رو به زبان ماشین کامپایل کنه اون مدت زمانی که صرف این کامپایل می کنه سربار ئه و تایید کننده میزان کندتر بودنش هم هست. هر چقدر این زمان کوتاه بشه بالاخره یک زمانی ئه و صفر که نمیشه، پس تا وقتی MSIL ای در کار هست همچین حالتی پیش نمیاد.
اگر زمانی کامپایلری برای #C طراحی بشه که مستقیما به زبان ماشین ترجمه انجام بده و خبری از CLR و MSIL نباشه میتوانید توقع داشته باشید که سرعتش به اندازه کامپایلر های Native سایر زبان ها برسه، ولی احتمالا در اون حالت NET. هم از زبان #C حذف شده چون NET. وابستگی به MSIL داره.

تو کتاب نوشته برنامه های سی شارپ از قطعاتی به نام کلاس تشکیل میشن و هر برنامه سی شارپ حداقل از یک کلاس تشکیل می شه که این کلاس از کلاس فرم ارث می بره.
4- حالا اگه من یک فرم ایجاد کردم و چند تا کنترل روش گذاشتم اسم این کلاس چیه که از کلاس فرم ارث برده؟(البته می دونم که همه کلاس ها از کلاس Object ارث می برن)
اسم فرم تون، مثلا Form1 یک کلاس ئه که وارث Form ئه. در ابتدای کدتون Form1 : Form رو می بینید.

5- قبلا توی یک سایت خوندم که کلاس یک مفهومه و باید یک شی ازش بسازیم. پس چطوری برنامه های سی شارپ از قطعاتی به نام کلاس تشکیل می شن در حالی که کلاس مفهومه.
سایت ئه شرح خوبی نداده ولی به هر حال شما در کدتون هزار تا کلاس عادی هم بسازید؛ خودش که به تنهایی اعلام وجود نمی کنه، شما جایی از اون کلاس شیء میسازید یا استفاده می کنید که تاثیر گذار میشه.
فرضا شما در پروژه تون Program.cs رو ببینید. داخلش با new از اون کلاس فرمی که ساخته اید، فرضا Form1 شیء میسازید. اگر اون شیء ساخته نمیشد که فرم Form1 نمایشی نمیتونست داشته باشه.
شما اون شیء رو نمایش میدید نه خود Form1 رو.

یک نمونه مستند سازی به صورت pdf یا هر مدلی که جهانی است برای دانلود قرار بدید. فقط می خوام ببینم چطوری مستند سازی می کنن. اگه مستند سازی به زبان فارسی هم دارید بی زحمت قرار بدید. اصلا مستند سازی کردن آموزش داره و قوانینی یا قرار داد هایی داره یا هر کی به روش خودش باید انجام بده؟
قوانین ساده نگارش رو داره، استاندارد خاصی نیست.
تو مستند سازی ایرانی ها بدترین شرایط رو دارند، چون نه کارفرماشون خیلی روی مستندات تاکید داره و نه برنامه نویس علاقه داره مستندات کاملی در اختیار سایرین قرار بده و نه درست برای اینکار آموزش دیده اند. به نظرشونم یک کار اضافی و تشریفاتیه. از خداشونم هست که کسی از کد و محصول سردرنیاره و دست به دامن خودشون بشه.
فرضا Aspose.Words این امکان رو برنامه نویس میده که از داخل برنامه اش فایل Word بسازه یا ویرایش کنه و فرضا بجای Print از برنامه هاش خروجی Word بده و ... بدون اینکه نیازی به نصب بودن Microsoft Office باشه. حالا اگه همچین کمپوننت ای که یک عالمه امکانات و جزئیات داره بدون مستندات در اختیارتون قرار می گرفت به مشکل برمیخوردید.
هم خود کمپوننت هاش به همون شیوه xml داخل ویژوال استدیو کلاس ها و متد ها و فیلد ها و ... رو شرح داده و هم مستندات مجزا داره.
ببینید در سایتش چطور با جزئیات و با فهرست طبقه بندی شده بصورت موضوعی طرز استفاده شو شرح داده :
https://docs.aspose.com/display/wordsproductfamily/Home
فایل راهنمای آفلاینش هم بعد از نصب کردن محصولاتش بصورت فایلهای chm هست که نصب میشه.
 

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

بالا