PDA

View Full Version : سوال: مديريت خطاها هنگام نبودن يك DLL



salehbagheri
پنج شنبه 15 مهر 1389, 15:26 عصر
شما زماني كه از يك DLL يا كلاسي استفاده ميكنيد كه در برنامه شما قرار نداره، در هنگام حذف شدن يا پيدا نشدن با خطايي همچون تصوير زير روبرو ميشيد.

http://www.comlinktechnologies.com/error.JPG

اين شكل خطا زماني كه NetFramework نصب نباشه هم نمايش داده ميشه...

آيا روشي هست كه بر اين خطاها هم مديريت داشته باشيم؟

مثلاً اگه DotNEt Fw نصب نبود، پيغامي مبني بر نصب نبودن دات نت نمايش بديم! يا اگه XXX.DLL در كنار فايل اجرايي نبود، بگيم كه فايل XXX يافت نشد ...

علیرضا مداح
پنج شنبه 15 مهر 1389, 16:14 عصر
سلام،
این ها Unhandled Exceptions هستند،
برای کنترل این گونه خطاها باید از رویداد ThreadException مربوط به کلاس Application بهره بگیرید، بدین منظور کلاس Program.cs را بدین شکل تغییر دهید:

static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Appli cation_ThreadException);
Application.Run(new Form1());
}

static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
MessageBox.Show(String.Format("Unhandled exception occured: {0}", e.Exception.ToString()));
}
}
،/

صباح فتحی
پنج شنبه 15 مهر 1389, 16:35 عصر
سلام من هم برنامه ای نوشتم و ستاب رو یک سیستم دیگه نصب کردم اماموقع اجراین خطارو میداد!
فریم ورک هم نصب بود.اشکال ازکجاست؟

flash118
پنج شنبه 15 مهر 1389, 16:42 عصر
صباح عزیز سلام
اگه این خطا رو میده حتما فایل کتابخانه ایتون ناقص هست یا یه چیز دیگه ممکن هست در هنگام نصب به حالت محافظت شده تغییر حالت داده باشه البته احتمالش کمه اینجور بشه ولی تو بعضی از سیستم ها بعضی برنامه های امنیتی به فایل های کتابخانه هم گیر میدن ولی مورد اون رو بررسی کنید فکر کنم بهتره و راهکارشم دوستان برای مدیریتش گفتن موفق باشین

r00tkit
پنج شنبه 15 مهر 1389, 16:49 عصر
سلام

زمانی که .net نصب نباشه قضیش جدا از کد بالاست

نکته :برای هندل کردن UnhandledException در کونسول اپلیکیشن از AppDomain.CurrentDomain.UnhandledException استفاده کنید
( به علت نبود Application.ThreadException البته از این هم می شه در console استفاده کرد با add کردن اسمبلی مربوط)
مثال:



static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException
+= new UnhandledExceptionEventHandler(
CurrentDomain_UnhandledException);

}
private static void CurrentDomain_UnhandledException(
object sender, UnhandledExceptionEventArgs e)
{

Console.WriteLine("Unexpected error:");
Console.WriteLine(e.ExceptionObject);

}


پی نوشت : این موضوع ، کدها و نکته هاش قبلا تو تالار گفته شده بود

صباح فتحی
پنج شنبه 15 مهر 1389, 16:49 عصر
صباح عزیز سلام
اگه این خطا رو میده حتما فایل کتابخانه ایتون ناقص هست یا یه چیز دیگه ممکن هست در هنگام نصب به حالت محافظت شده تغییر حالت داده باشه البته احتمالش کمه اینجور بشه ولی تو بعضی از سیستم ها بعضی برنامه های امنیتی به فایل های کتابخانه هم گیر میدن ولی مورد اون رو بررسی کنید فکر کنم بهتره و راهکارشم دوستان برای مدیریتش گفتن موفق باشین
ضمن تشکراز پاسختون
میشه یه کد نوشت که اگر روی سیستم طرف فریم ورک نصب نباشه به یارو بگه فریم ورک رونصب کن؟:لبخند:
راستی یادم رفت بپرسم واسه اون خطاباید چیکارکنم
دوستان اگه راهنمایی کنن ممنون میشم

flash118
پنج شنبه 15 مهر 1389, 16:54 عصر
صباح جان
من در c# این کار رو تا بحال امتحان نکردم ولی با نرم افزار اتوران ساز بله می تونید و میشه این کار رو انجام داد یادتون باشه یه بار به یکی از کاربران فایل هایی ارائه شد البته با نرم افزار مالتی مدیا بیلدر ایشون تونستن با اون فایل ها و تلاششون همین کار رو پیاده سازی کنن برای بررسی بیشتر بفرمایی اینم لینکش :
http://barnamenevis.org/forum/showthread.php?t=247910

r00tkit
پنج شنبه 15 مهر 1389, 17:30 عصر
برای اینکه بدونیم .net نصب هستش یا چه ورژنی نصب هستش ( هر چند نیازی به این کار نیست )

با C یه برنامه می نویسیم که وجود .net رو بررسی کنه( با استفاده از رجستری) بعد اگه نصب بود برنامه نوشته شده با .net رو اجرا می کنیم در غیر این صورت bang

روش بررسی وجود .net با C

1)
CheckRegistryKeyExistance

2) یه if ساده

3)
system("myfile") //my file is .net file

اگه نیاز بود بگید با مثال کامل توضیح بدم