PDA

View Full Version : سوال: خطا در هنگام ایجاد محدودیت سطح دسترسی به فایل



محمد ذبیحی نژاد
جمعه 21 شهریور 1393, 11:07 صبح
با سلام
من در برنامه ام بروی یک فایل سطح دسترسی را برای کاربران محدود کردم تا نتوانند محتوای فایل را تغییر دهند.
ولی زمانی که برنامه من در ویندوز 7 نصب میشه اگر User Account Control (UAC) فعال باشه ویندوز به برنامه خودم هم اجازه دسترسی به فایل را نمی دهد

کد برنامه من چیزی مثل کد زیر است:



namespace AwsPermission
{
public class AwsPermissionCls
{
static WindowsIdentity winIdentity = WindowsIdentity.GetCurrent();

/// <summary>
/// protect from file of change
/// </summary>
/// <param name="path_file">path of file for protect</param>
public static void Protect_File(string path_file)
{
try
{
string account = winIdentity.Name;

FileSecurity fs = new FileSecurity();
fs.AddAccessRule(new FileSystemAccessRule(account, FileSystemRights.FullControl, AccessControlType.Deny));
File.SetAccessControl(path_file, fs);


}
catch (IOException ex)
{
throw ex;
}
}


/// <summary>
/// Unprotect from file for make chang
/// </summary>
/// <param name="path_file">path of file for change</param>
public static void UnProtect_File(string path_file)
{
try
{
string account = winIdentity.Name;


FileSecurity fs = new FileSecurity();
fs.RemoveAccessRule(new FileSystemAccessRule(account, FileSystemRights.FullControl, AccessControlType.Allow));
if (File.Exists(path_file))
File.SetAccessControl(path_file, fs);
}
catch (IOException ex)
{
throw ex;
}


}//end


}
}




لطفا راهنمایی نمایید
با تشکر

plus
جمعه 21 شهریور 1393, 22:18 عصر
اگه یک یا تعدادی فایل مشخص هست، میتونید موقع نصب، با اجرای cacls، به فایل اجرایی برنامه، اجازه دسترسی کامل به این فایل ها رو بدین.برای آشنایی با cacls اون رو در Command Prompt تایپ کنید.
روش ساده تر میتونه این باشه که برنامه شما همیشه تحت Admin اجرا بشه.البته روش اول منطقی تره.

محمد ذبیحی نژاد
سه شنبه 25 شهریور 1393, 04:02 صبح
اگه یک یا تعدادی فایل مشخص هست، میتونید موقع نصب، با اجرای cacls، به فایل اجرایی برنامه، اجازه دسترسی کامل به این فایل ها رو بدین.برای آشنایی با cacls اون رو در Command Prompt تایپ کنید.
روش ساده تر میتونه این باشه که برنامه شما همیشه تحت Admin اجرا بشه.البته روش اول منطقی تره.

می شه با یک مثال روشن تر این Cacls را برای من مشخص کنید. چه جوری می تونم از این دستور تو برنامه استفاده کنم .
ممنون

plus
سه شنبه 25 شهریور 1393, 10:42 صبح
شما در برنامه تون نباید ازین استفاده کنید چون کاری که میخواین بکنین نیاز به اجرا تحت Admin داره...اگه برنامه شما تحت Admin اجرا بشه که اصلا این مشکلی که دارین اصلا به وجود نمیاید.
در عوض شما در Setup برنامه که باید به صورت Admin اجرا بشه، این دستور رو اجرا میکنید و سطح دسترسی به فایل ها رو به کاربر میدین تا نیاز نباشه هر دفعه برنامه شما تحت Admin اجرا بشه.
توضحیات کامل cacls هم با تایپ کردنش در Command Prompt مشخص هست.برای مثال برای دادن Full Control به یک کاربر بر روی یک Folder:

Cacls "F:\Directory" /g "MyUser":F

ولی اگه برنامه شما قرار نیست Setup داشته باشه، راه حل این هست که هر دفعه برنامه شما تحت Admin اجرا بشه.برای این مورد جستجو کنید در همین انجمن تاپیک هاش موجوده.