PDA

View Full Version : دسترسی به فایل در سی شارپ



mahdiappleseed
دوشنبه 07 مهر 1393, 18:22 عصر
سلام دوستان من یه برنامه دارم که برای نوشتن و خوندن فایل تکست باید به درایو سی دسترسی داشته باشه (درایو سی کاربر که حتما باید سی باشه ) اما متاسفانه نمیتونه به فایل دسترسی پیدا کنه چون میگه دسترسی ممنوع هست. دوستان خواهشنا کمکم کنید چجوری این مانع رو بردارم؟ ممنون میشم کمک کنید

juza66
دوشنبه 07 مهر 1393, 19:10 عصر
سلام
در ویندوزهای 7 به بالا دسترسی بصورت مستقیم به درایو ویندوز ممکن نیست شما UAC رو غیر فعال کنید

آموزش غیر فعال کردن UAC
رروی Settings و سپس برروی Control Panel کلیک کنید. توجه داشته باشید در ویندوز 8 و ویندوز 8.1 با راست کلیک برروی Start در گوشه چپ و پایین دسکتاپ نیز Control Panel در دسترس خواهد بود. همچنین می‌توانید از کلیدهای ترکیبی "Win + X" نیز برروی کیبورد استفاده نمایید. در بخش جستجوی بالای پنجره "کنترل پنل" عبارت UAC را وارد نمایید. لینک Change User Account Control settings نشان داده می شود. برروی آن کلیک نمایید. برای دسترسی به پنجره User Account Control settings می‌توانید به روش‌های زیر نیز عمل کنید: اگر کنترل پنل در حالت نمایشی Category می‌باشد به System and Security -> Action Center مراجعه کرده و در لینک‌های سمت چپ بررویChange User Account Control settings کلیک نمایید.
اگر کنترل پنل در حالت نمایشی Icons می‌باشد به Action Center مراجعه کرده و در لینک‌های سمت چپ برروی
Change User Account Control settings کلیک نمایید. با جابجایی دکمه ی لغزنده و قرار دادن آن در پایین‌ترین سطح، UAC بصورت کامل غیرفعال می شود. برروی OK کلیک نمایید. در پیام نشان داده شده برروی Yes کلیک نمایید تا تغییرات اعمال شده و UAC غیرفعال شود. در ویندوز 8 و 8.1 پس از غیرفعال کردن UAC نیازی به ریست ویندوز نیست!

سورس برنامه نویسی در سی شارپ
http://parsicoders.com/showthread.php?tid=1117

mahdiappleseed
دوشنبه 07 مهر 1393, 19:59 عصر
سلام دوست من از کمک شما ممنون ، ولی من قراره برنامه رو به کاربر برم !من که نمیتونم برای اینکار کاربر رو مجبور کنم ! اگر ممکنه یه کمکی کنید که رو سیستم کاربر این اتفاق نیفته. با تشکر

juza66
دوشنبه 07 مهر 1393, 20:14 عصر
مجدد سلام

بررسي حالت اجراي برنامه است. بايد متوجه شويم كه آيا برنامه به سيستم دسترسي کامل دارد؟ براي اين‌كار از متد زير استفاده مي‌کنيم.


static internal bool IsAdmin()
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal p = new WindowsPrincipal(id);
return p.IsInRole(WindowsBuiltInRole.Administrator);
{


ين متد ابتدا مشخصات کاربر جاري را از سيستم مي‌گيرد و با استفاده از IsInRole مشخص مي‌کند که کاربر جزو دسته Administrator است يا خير. براي اطلاعات بيشتر در مورد متدها و کلاس‌هاي استفاده شده به MSDN مراجعه كنيد. اگر متد بالا مقدار true را برگرداند، يعني کاربر ادمين است و دسترسي کامل و نامحدود به‌سيستم دارد و مي‌تواند هر عملي را انجام دهد.

نکته: وقتي شما از گزينه Run As Administrator براي اجراي برنامه استفاده مي‌کنيد، مثل اين است که کاربر ادمين برنامه را اجرا کرده است يا اين‌که وقتي UAC را غير‌فعال مي‌کنيد، بدين معناست که همه کاربران ادمين هستند.

اگر کاربر ادمين نبود، يعني متد IsAdmin مقدار false را برگرداند، چه بايد كرد؟

در اين شرايط شما بايد برنامه را با استفاده از دستور runas که پيش‌تر توضيح داده شد اجرا كنيد. اين‌کار با استفاده از متد زير انجام مي‌شود:


internal static void RestartElevated()
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
startInfo.Verb = "runas";
try
{
Process p = Process.Start(startInfo);
}
catch(System.ComponentModel.Win32Exception ex)
{
return; //If cancelled, do nothing
}
Application.Exit();
}


کاري که اين متد انجام مي‌دهد اين است که نمونه ديگري از برنامه ما را با دستور runas اجرا مي‌کند و سپس نمونه قبلي را با استفاده از Application.Exit مي‌بندد. بعد از اجراي اين متد، برنامه ما با سطح دسترسي ادمين اجرا مي‌شود، درست مانند زماني که ما گزينه Run as administrator را براي اجراي برنامه انتخاب کرده‌ايم. به‌اين ترتيب، برنامه بدون مشکل تمام کارها را انجام مي‌دهد.


منبع: http://pnu-club.com/34050-%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%A7%D8%B2-%D8%B4%D8%B1-uac-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%D9%8A-%D8%AE%D9%88%D8%AF-%D8%AE%D9%84%D8%A7%D8%B5-%D8%B4%D9%88%D9%8A%D9%85%D8%9F/

sagggad
دوشنبه 07 مهر 1393, 21:17 عصر
سلام
میتونید از داخل مانیفست برنامه اونو روی حالت run as adminstrator بذارید (با تغییر یک حرف در کدهای xml)