[#C] خطای UnAuthorizeException در زمان ایجاد فایل

ساخت وبلاگ
نقل قول در آغاز توسط shahrabiamir پست شده است مشاهده پست
ممنون از جوابتون. با Run As Admin حل شد. در واقع برنامه رو طوری نوشته بودم که همیشه در حین بالا آمدن باید وجود یک فایل خاص را چک میکرد و اگر وجود نداشت می بایست آن فایل را ایجاد میکرد.

حالا یه سوال : چه جوری من میتونم اون فایل را با مجوز Admin ایجاد کنم بدون اینکه برنامه را بصورت Admin اجرا کنم؟

کد:

کد:

private bool CheckLogin() { if (File.Exists(ConfigurationManager.AppSettings["login_info"])) { StreamReader sr = new StreamReader(ConfigurationManager.AppSettings["login_info"]); string message = sr.ReadToEnd(); sr.Close(); message = EncryptString.Decrypt_Text(message); if (message != null) { string[] login_data = message.Split('&'); if (login_data.Length == 4) { int user_id = int.Parse(login_data[0]); string computer_name = login_data[1]; string cookie = login_data[2]; DateTime expire = DateTime.Parse(login_data[3]); if (computer_name != Environment.UserDomainName) { MessageBox.Show("اطلاعات لاگین مربوط به شما نمی باشد", "MS", MessageBoxButton.OK, MessageBoxImage.Error); } else if (DateTime.Now.Subtract(expire).Days == 0) { MessageBox.Show("کوکی شما منقضی شده است. مجددا به سرور متصل شوید", "MS", MessageBoxButton.OK, MessageBoxImage.Waing); } else { Share.cookie = cookie; Share.userID = user_id; retu true; } } } } else File.CreateText(ConfigurationManager.AppSettings["login_info"]); retu false; }

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

اگه شما تنظیم لازم رو برای برنامه تون انجام بدید و تنظیم UAC یا User Account Control ویندوز هم در سیستم کاربر غیر فعال نباشه، خود ویندوز صفحه رو تاریک می کنه و از کاربر برای اجرا شدن برنامه شما
پیغام میده، وگرنه با UAC غیر فعال کاربر متوجه نمیشه و برنامه تون خطا میده و بهتره که خودتون با try catch در برنامه تون یک پیغام به کاربر نشون بدید که لطفا با دسترسی Administrator اجرایش کنید.

در ویژوال استدیو که پروژه تون باز ئه، در منوی Project گزینه ...Add New Item رو انتخاب کنید. در بخش General گزینه Application Manifest File رو انتخاب کنید و به پروژه تون اضافه کنید.
در کد اون فایلی که اضافه شده یک سطر کد </ "requestedExecutionLevel level="asInvoker" uiAccess="false> هست که رنگ مقادیر asInvoker و false اش مشخصا فرق می کنه
(با سطر های توضیحی بالاترشون که تماما یک رنگ هستند اشتباه نگیرید)
مقدار اون asInvoker رو باید به requireAdministrator تغییر بدهید تا برنامه تون به سیستم عامل اعلام کنه که به دسترسی Administrator نیاز داره. (شبیه به اون سطر چند خط بالاتر هست که البته توضیحی ئه و نادیده گرفته میشه.)

در ضمن در کد ()CheckLogin تان try catch ندارید. بهتره که اضافه کنید تا بجای اون خطای UnauthorizedAccessException یک پیغام مناسب نشون بده :

کد:

 private bool CheckLogin() { try { if (File.Exists(ConfigurationManager.AppSettings["login_info"])) { StreamReader sr = new StreamReader(ConfigurationManager.AppSettings["login_info"]); string message = sr.ReadToEnd(); sr.Close(); message = EncryptString.Decrypt_Text(message); if (message != null) { string[] login_data = message.Split('&'); if (login_data.Length == 4) { int user_id = int.Parse(login_data[0]); string computer_name = login_data[1]; string cookie = login_data[2]; DateTime expire = DateTime.Parse(login_data[3]); if (computer_name != Environment.UserDomainName) { MessageBox.Show("اطلاعات لاگین مربوط به شما نمی باشد", "MS", MessageBoxButton.OK, MessageBoxImage.Error); } else if (DateTime.Now.Subtract(expire).Days == 0) { MessageBox.Show("کوکی شما منقضی شده است. مجددا به سرور متصل شوید", "MS", MessageBoxButton.OK, MessageBoxImage.Waing); } else { Share.cookie = cookie; Share.userID = user_id; retu true; } } } } else File.CreateText(ConfigurationManager.AppSettings["login_info"]); } catch { MessageBox.Show("برنامه به دسترسی ادمین نیازمند است", "MS", MessageBoxButton.OK, MessageBoxImage.Error); } retu false; }

کارگاه افکار جدید بشر...
ما را در سایت کارگاه افکار جدید بشر دنبال می کنید

برچسب : نویسنده : محمد رضا جوادیان onlinemajid بازدید : 185 تاريخ : پنجشنبه 31 تير 1395 ساعت: 21:34