PDA

View Full Version : مشکل در دسترسی برنامه به پوشه در درایو C



Imenam
پنج شنبه 18 دی 1393, 12:06 عصر
با سلام
یه برنامه نوشتم با سی شارپ و بانک sql----- وقتی رو درایو C(درایو ویندوز) نصب می کنم برنامه به دلیل محدودیت دسترسی، با بانک اطلاعاتی ارتباط برقرار نمی کنه... در صورتی که تمامی تنظیمات UAC و Run as administrator را انجام دادم و حتی توی یوزر adminstrator ویندوز هم نصب کردم ولی باز مشکل داره. وقتی روی درایو دیگه ای نصب می کنم به طور کامل اجرا میشه و با بانک ارتباط برقرار می کنه...
جالب اینجاست که اگه تو پوشه program files نصب نکنم ، برنامه هیچ مشکلی نداره و به خوبی کار میکنه...
به نظر اساتید مشکل کجاست و باید چطور حلش کنم؟
یه راه حل خودم پیدا کردم و اینکه رو پوشه برنامه خودم که تو program files نصب شده کلیک راست می کنم و از قسمت security دسترسی رو روی full control بزارم ولی من میخوام وقتی برنامه نصب میشه دیگه نیاز به دستکاری تنظیمات توسط کاربر نباشه؟

کمک؟؟؟؟

plus
پنج شنبه 18 دی 1393, 12:43 عصر
اگه از SQL Server استفاده میکنید باید به کاربر NT AUTHORITY\NETWORK SERVICE اجازه دسترسی به پوشه مورد نظر رو بدین.این کار رو میتونید موقع نصب با اجرای فایل (calcs (Access Control List Editor و یا توسط #C و کلاس ها System.IO.Directory انجام بدین و البته مطمئن بشین که فایل های دیتابیس Read-Only نیستن.

Imenam
پنج شنبه 18 دی 1393, 14:06 عصر
با اجرای فایل calcs (Access Control List Editor مشکل حل شد.

به خاطر راهنماییتون ممنونم:تشویق:

sadegh_sha2006
دوشنبه 17 فروردین 1394, 09:45 صبح
سلام منم دقیقا همین مشکل رو دارم شما چه مراحلی رو انجام دادین که مشکلتون حل شد اگه میشه بیشتر توضیح بدین

Imenam
سه شنبه 01 اردیبهشت 1394, 17:55 عصر
با سلام
من تو C#‎‎‎ با کد زیر دسترسی full control برای یوزر Everyone ایجاد میکنم و مشکلم حل میشه... شما هم امتحان کن ببینید کار میده یا نه؟
به جای Application.StartupPath می تونید آدرس پوشه موردنظر خودتون رو بدید.




try
{
string userName = "Everyone";

FileSystemAccessRule accessRule = new FileSystemAccessRule(userName, FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit
| InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow);

DirectoryInfo directoryInfo = new DirectoryInfo(Application.StartupPath);
DirectorySecurity directorySec = directoryInfo.GetAccessControl();
directorySec.AddAccessRule(accessRule);
directoryInfo.SetAccessControl(directorySec);

}
catch (Exception error)
{

MessageBox.Show(error.Message + "خطا در اجرای کد");

}

parsa_7373
سه شنبه 03 اردیبهشت 1398, 21:05 عصر
با سلام
من تو C#‎‎‎‎‎ با کد زیر دسترسی full control برای یوزر Everyone ایجاد میکنم و مشکلم حل میشه... شما هم امتحان کن ببینید کار میده یا نه؟
به جای Application.StartupPath می تونید آدرس پوشه موردنظر خودتون رو بدید.




try
{
string userName = "Everyone";

FileSystemAccessRule accessRule = new FileSystemAccessRule(userName, FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit
| InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow);

DirectoryInfo directoryInfo = new DirectoryInfo(Application.StartupPath);
DirectorySecurity directorySec = directoryInfo.GetAccessControl();
directorySec.AddAccessRule(accessRule);
directoryInfo.SetAccessControl(directorySec);

}
catch (Exception error)
{

MessageBox.Show(error.Message + "خطا در اجرای کد");

}


این کد رو کجای برنامه باید نوشت؟؟؟؟

Shadow_net
چهارشنبه 04 اردیبهشت 1398, 00:57 صبح
این کد رو کجای برنامه باید نوشت؟؟؟؟
بهتره در Program.cs باشه

SaeedZer0
دوشنبه 30 آبان 1401, 22:26 عصر
بهتره در Program.cs باشه
سلام من دارم یه برنامه ساختم براش اپدیت اتوماتیک گذاشتم ولی وقتی داخل درایو c نصب میکنم موقع اپدیت فایل اپدیت دانلود میشه ولی جایگزین فایل اصلی نمیشه درصورتی که وقتی داخل یه درایو دیگه نصب میکنم اوکیه
که با خودم گفتم شاید بخاطر دسترسی درایو c باشه این کدی که شما گذاشتین رو امتحان کردم ولی کار نکرد ممنون میشم راهنمایی کنید
یجا دیگه هم باز به همین مشکل برخوردم اینکه وقتی میخوام داخل برنامه از پایگاه داده فایل پشتیبان تهیه کنم رو درایو c اجازه نمیده و ارور میده