PDA

View Full Version : حرفه ای: چرا FileIOPermission در vista کار نمی کند؟



mohsen_csharp
سه شنبه 13 مهر 1389, 08:37 صبح
با سلام
من با استفاده از کد زیر می خوام دسترسی سیستم به فایل رو قبل از استفاده از فایل بررسی کنم


try
{
FileIOPermission f = newFileIOPermission(FileIOPermissionAccess.Write, @"c:\a.txt");
f.Demand();//Exception must rise here
StreamWriter w = newStreamWriter(@"c:\a.txt");//but Exception rise here
w.Write(textBox1.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

وقتی از شبکه این بررسی رو انجام میدم نتیجه درست برمی گردونه ولی تو ویندوز vista که admin نباشیم درست کار نمی کنه. چرا؟
البته از System.Security.Permissions; استفاده کنید

mmd2009
سه شنبه 13 مهر 1389, 09:15 صبح
با سلام

نسخه VS شما چنده ؟

mohsen_csharp
سه شنبه 13 مهر 1389, 10:28 صبح
نسخه VS شما چنده ؟
چه ربطی به VS داره؟ مگه تو VS شما کار نمی کنه؟
من هم 2005 هم 2008 و هم 2010 دارم.
تو همش هم نتیجه یکسان هست

mohsen_csharp
چهارشنبه 14 مهر 1389, 00:29 صبح
چی ؟؟ فرق نمیکنه؟؟؟

میشه بپرسم از چه منبعی گفتید که فرقی نداره ما هم بریم شاید چیز جدیدی یاد گرفتیم ؟؟
با سلام
من از همون زمان که C#‎‎ متولد شده C#‎‎ کار می کنم البته میدونم که زمان کمیه.
با توجه به سواد اندکم تا اینجا اطلاع دارم که تمام کدهای نوشته شده در دات نت 2 در 3.5 هم به درستی کار می کنه. ولی دات نت 2 از دات نت 1.1 حمایت نمی کنه(من خودم یه برنامه با 2003 نوشته بودم که با 2005 بازش کردم run time error داد در حالی که در 2003 کاملا کار می کرد)
حالا من تو 2008 این برنامه رو نوشتم اگه شما جواب سوال بلدی این دانش رو از شما گدایی می کنم که به ما هم یاد بدی و فرقشو هم تو نسخه های مختلف به ما بگی
خوشحال میشیم اگه چیز جدیدی از شما اساتید یاد بگیریم !!!

mmd2009
چهارشنبه 14 مهر 1389, 02:51 صبح
خب دوست عزیز شما داری میگی FW2 بعدش میگی ویندوز ویستا. خب ادم یه طوری میشه. اخه مگه تو زمان FW2 ما WV داشتیم؟ تو پلتفرم FW2 نامی از WV برده نشده. دلیلش هم این بود که اصلا WV وجود خارجی نداشت.

mohsen_csharp
چهارشنبه 14 مهر 1389, 06:25 صبح
خب دوست عزیز شما داری میگی FW2 بعدش میگی ویندوز ویستا. خب ادم یه طوری میشه. اخه مگه تو زمان FW2 ما WV داشتیم؟ تو پلتفرم FW2 نامی از WV برده نشده. دلیلش هم این بود که اصلا WV وجود خارجی نداشت.
من تو پست آخری عرض کردم که با FW 3.5 کد نوشتم ولی هنوز هم می گم که هیچ فرقی نداره که این کد رو با FW 1.0 یا FW 3.5 بنویسم .
سوال من اینه که این برنامه تو vista کار نمی کنه مگه vista دات نت رو ساپورت نمی کنه ؟
شما اگه با FW 1.0 هم کدی بنویسید در vista کاملا به درستی کار می کنه.
حالا چون تو زمان FW 2.0 ویستا نبوده ، دلیل بر مشکل پیدا کردن این کد تو ویستا نیست.
طبق گفته های MSDN کلاس FileIOPermission تو همه نسخه های دات نت وجود داره و تو پلت فرم های Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98 کار می کنه.
حالا مشکل اینجاست که چطوری ازش استفاده کنم که تو ویستا کار کنه؟
کسی از دوستان تو این زمینه اطلاعی نداره؟

mmd2009
چهارشنبه 14 مهر 1389, 07:24 صبح
والا دوست عزیز نگفتی از اول که با 3.5 FW نوشته و الا اصلا کار به اینجاها نمیکشید.

ولی به هر حال. کلا ویندوز ویستا یا سون تا ADMIN نباشی اجازه نمیده تو ریشه درایو ثابت مورد نظر فایلی ایجاد کنی.

این کد رو امتحان کن :





try
{
FileIOPermission f = newFileIOPermission(FileIOPermissionAccess.Write, @"c:\mmd2009\a.txt");
f.Demand();//Exception must rise here
StreamWriter w = newStreamWriter(@"c:\mmd2009\a.txt");//but Exception rise here
w.Write(textBox1.Text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
در ضمن دوست عزیز ما که با هم درگیری نداریم عزیزم. :قلب:

امیدوارم کارت راه بیفته.

mohsen_csharp
چهارشنبه 14 مهر 1389, 08:28 صبح
با سلام

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

و چون کاربر عادی مجاز به نوشتن تو این مسیر هست دیگه خط f.Demand();//Exception must rise here تولید Exception نمی کنه
من می خوام که تو همان مسیر ریشه تولید Exception کنه

mohsen_csharp
پنج شنبه 15 مهر 1389, 00:10 صبح
از دوستان کسی جواب سوال رو نمی دونه؟؟؟
یعنی نمیشه با کدنویسی فهمید که آیا این کاربر به درایو c دسترسی داره یا نه؟

Masiha1986
جمعه 30 مهر 1389, 13:35 عصر
با سلام
کد زیر رو تست کنید:


private bool hasWriteAccessToFolder(string folderPath)
{
try
{
// Attempt to get a list of security permissions from the folder.
// This will raise an exception if the path is read only or do not have access to view the permissions.
System.Security.AccessControl.DirectorySecurity ds = Directory.GetAccessControl(folderPath);
return true;
}
catch (UnauthorizedAccessException)
{
return false;
}
}

موفق باشید.