نمایش نتایج 1 تا 5 از 5

نام تاپیک: مرجع کامل رجیستری در #C

  1. #1

    مرجع کامل رجیستری در #C

    فهمیدن همیشه بهتر از آموختن است.
    با سلام.

    از اینکه عضو جامعه بزرگ سایت برنامه نویس هستم بسیار خوشحالم. تصمیم گرفتم اولین مطلبی که ارسال می کنم در زمینه نحوه ارتباط با رجیستری در #C باشد. امیدوارم این مطلب مورد استفاده دوستان قرار بگیرد.

    سطح مطلب: کاربران سطح متوسط به بالا

    قبل شروع پیشنهاد می کنم با ساختار رجیستری و مفاهیم Value, Key و SubKey آشنا شوید.

    برای استفاده از کلاس های مربوط به رجیستری ابتدا باید فضای نام Microsoft.Win32 را به فضای نامتان اضافه کنید.

    ساخت کلید(CreateSubKey):


    ("مسیر مورد نظر")CreateSubKey.مسیر اصلی در رجیستری.RegistryKey key = Registry

    در کد بالا ابتدا کلاس RegistryKey را نوشته و نام دلخواه key را به این کلاس اختصاص می دهیم. حال از کلاس Registry برای تعیین مسیر مورد نظر در رجیستری استفاده می کنیم.

    مسیرهای اصلی عبارتند از:

    1-HKEY_CURRENT_USER CurrentUser
    2-HKEY_LOCAL_MACHINE LocalMachine
    3-HKEY_CLASSES_ROOT ClassesRoot
    4-HKEY_USERS Users
    5-HKEY_PERFORMANCE_DATA PerformanceData
    6-HKEY_CURRENT_CONFIG CurrentConfig
    7-HKEY_DYN_DATA DynData

    و مسیر مورد نظر شامل مسیر زیر مجموعه این مسیر اصلی است. به عنوان مثال:

    SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
    مثال:
    RegistryKey key = Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run  ");



    نکته: منظور از RegistryKey در تمام مثال ها نام کلاسی است که برای ساخت کلید به کار می رود. یعنی ابتدا کلید مربوطه را می سازیم و سپس بوسیله نام این کلاس عملیات زیر را انجام می دهیم.

    دادن مقدار به کلید (SetValue):

    (RegistryKey.SetValue (String, Object, RegistryValueKind

    String: نام Value
    Object: مقدار Value
    RegistryValueKind: نوع مقدار (Binary،DWord،MultiString،QWord،String،Unknown )

    دستور زیر مقداری yes را به restart می دهد.


    RegistryKey key = Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run ");
    key.SetValue("restart","Yes", RegistryValueKind.String);



    حذف زیر مجموعه کلید اصلی (DeleteSubKey):


    (RegistryKey.DeleteSubKey (String, Boolean



    String: نام زیر کلید

    Boolean: اگر مقدار آن true باشد اگر کلید یافت نشد پیغام خطایی نمایش داده می شود و اگر false بود پیغامی نمایش داده نمی شود.






    RegistryKey key = Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run ");
    key.DeleteSubKey("Control",true);




    متد DeleteSubKeyTree خود کلید و تمام زیر مجموعه های آن را حذف می کند.


    حذف مقدار کلید:



    (RegistryKey.DeleteValue (String, Boolean



    String: نام مقدار

    Boolean: اگر مقدار آن true باشد اگر کلید یافت نشد پیغام خطایی نمایش داده می شود و اگر false بود پیغامی نمایش داده نمی شود.

    دریافت تمام کلیدهای زیر مجموعه کلید اصلی:



    ()GetSubKeyNames


    این متد یک آرایه از نوع رشته شامل نام تمام کلیدهای زیر مجموعه کلید اصلی را بر می گرداند.

    دریافت مقدار یک Value (مقدار کلید):


    (RegistryKey.GetValue (String, Object

    String:نام Value Object: مقدار پیش فرض در صورتی که Value یافت نشود این مقدار برگردانده می شود.



    RegistryKey key = Registry.LocalMachine.CreateSubKey
    ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run ");
    key.GetValue("restart","No").ToString();



    نمایش نوع Value (مقدار کلید):



    باید از متد GetValueKind به صورت زیر استفاده کرد:
    (GetValueKind (string name







    RegistryKey key = Registry.LocalMachine.CreateSubKey
    ("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run ");
    Label1.Text=key.GetValueKind("restart").ToString();



    name: نام Value


    نمایش نام تمام Value های یک کلید:


    ()string[] GetValueNames


    این متد نام تمام Value های یک کلید را به صورت آرایه ای از رشته ها بر می گرداند.


    تعیین سطح دسترسی به یک کلید: (امنیت در رجیستری)

    باید از متد زیر در کلاس استفاده نمود:


    (SetAccessControl (RegistrySecurity

    RegistrySecurity نام یک کلاس در فضای نام System.Security.AccessControl است. که تنظیمات مربوط به امنیت رجیستری را بر عهده دارد. به مثال زیر توجه کنید:




    using System;


    using System.Reflection;


    using System.Security;


    using System.Security.AccessControl;


    using Microsoft.Win32;


    public class Example


    {


    public static void Main()


    {


    // Delete the example key if it exists.


    try


    {


    Registry.CurrentUser.DeleteSubKey("RegistryRightsE xample");


    Console.WriteLine("Example key has been deleted.");


    }


    catch (ArgumentException)


    {


    // ArgumentException is thrown if the key does not exist. In


    // this case, there is no reason to display a message.


    }


    catch (Exception ex)


    {


    Console.WriteLine("Unable to delete the example key: {0}", ex);


    return;


    }



    string user = Environment.UserDomainName + "\\" + Environment.UserName;



    RegistrySecurity rs = new RegistrySecurity();



    // Allow the current user to read and delete the key.


    //


    rs.AddAccessRule(new RegistryAccessRule(user,


    RegistryRights.ReadKey | RegistryRights.Delete,


    InheritanceFlags.None,


    PropagationFlags.None,


    AccessControlType.Allow));



    // Prevent the current user from writing or changing the


    // permission set of the key. Note that if Delete permission


    // were not allowed in the previous access rule, denying


    // WriteKey permission would prevent the user from deleting the


    // key.


    rs.AddAccessRule(new RegistryAccessRule(user,


    RegistryRights.WriteKey | RegistryRights.ChangePermissions,


    InheritanceFlags.None,


    PropagationFlags.None,


    AccessControlType.Deny));



    // Create the example key with registry security.


    RegistryKey rk = null;


    try


    {


    rk = Registry.CurrentUser.CreateSubKey("RegistryRightsE xample",


    RegistryKeyPermissionCheck.Default, rs);


    Console.WriteLine("\r\nExample key created.");


    rk.SetValue("ValueName", "StringValue");


    }


    catch (Exception ex)


    {


    Console.WriteLine("\r\nUnable to create the example key: {0}", ex);


    }


    if (rk != null) rk.Close();



    rk = Registry.CurrentUser;



    RegistryKey rk2;



    // Open the key with read access.


    rk2 = rk.OpenSubKey("RegistryRightsExample", false);


    Console.WriteLine("\r\nRetrieved value: {0}", rk2.GetValue("ValueName"));


    rk2.Close();



    // Attempt to open the key with write access.


    try


    {


    rk2 = rk.OpenSubKey("RegistryRightsExample", true);


    }


    catch (SecurityException ex)


    {


    Console.WriteLine("\nUnable to write to the example key." +


    " Caught SecurityException: {0}", ex.Message);


    }


    if (rk2 != null) rk2.Close();



    // Attempt to change permissions for the key.


    try


    {


    rs = new RegistrySecurity();


    rs.AddAccessRule(new RegistryAccessRule(user,


    RegistryRights.WriteKey,


    InheritanceFlags.None,


    PropagationFlags.None,


    AccessControlType.Allow));


    rk2 = rk.OpenSubKey("RegistryRightsExample", false);


    rk2.SetAccessControl(rs);


    Console.WriteLine("\r\nExample key permissions were changed.");


    }


    catch (UnauthorizedAccessException ex)


    {


    Console.WriteLine("\nUnable to change permissions for the example key." +


    " Caught UnauthorizedAccessException: {0}", ex.Message);


    }


    if (rk2 != null) rk2.Close();



    Console.WriteLine("\r\nPress Enter to delete the example key.");


    Console.ReadLine();



    try


    {


    rk.DeleteSubKey("RegistryRightsExample");


    Console.WriteLine("Example key was deleted.");


    }


    catch(Exception ex)


    {


    Console.WriteLine("Unable to delete the example key: {0}", ex);


    }



    rk.Close();


    }


    }



    /* This code example produces the following output:



    Example key created.



    Retrieved value: StringValue



    Unable to write to the example key. Caught SecurityException: Requested registry access is not allowed.



    Unable to change permissions for the example key. Caught UnauthorizedAccessException: Cannot write to the registry key.



    Press Enter to delete the example key.



    Example key was deleted.


    */



    موفق باشید.
    آخرین ویرایش به وسیله وحید پیرمرادیان : شنبه 19 اردیبهشت 1388 در 09:27 صبح

  2. #2
    مدیر بخش آواتار salehbagheri
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    In Hearts
    سن
    35
    پست
    2,225

    نقل قول: مرجع کامل رجیستری در #C

    لطفاً كدهاتون رو بين تگ كد قرار بديد! بدين صورت كه كد مورد نظر رو در اديتور سايت انتخاب و سپس بر روي # از منوي اديتور كليك كنيد!
    امیدم به دستان زیبای اوست . آنکه می آید . همان که نامش منجی ست ....

    به راستی اگر غرق نبودیم چرا مارا به منجی ای نیازمند کرده اند؟ ... دنیا دریاست ....

    دلنوشته های من


  3. #3
    کاربر دائمی آواتار newgoldenman
    تاریخ عضویت
    آبان 1385
    محل زندگی
    همشهري حضرت معصومه (س)
    پست
    367

    نقل قول: مرجع کامل رجیستری در #C

    سلام دوست عزیز. ممنون از مطلب مفیدت و نیز چند تا تاپیك دیگه كه مفید بودند دیدم الان زدی.
    فقط یه چیزی! اگه لطف كنی و مطابت رو توی این تاپیك:
    https://barnamenevis.org/showthread.php?t=95001
    قرار بدی، دیگه كسی كه دنبالش میخواد بگرده، نمیاد توی كل تاپیك ها جستجو كنه.
    چون اون تاپیك مرجع این تالار هست.
    دستت درد نكنه
    موفق باشی

  4. #4
    کاربر دائمی آواتار HAMRAHSOFT.IR
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    هرجا كه غم و ناراحتي باشه
    پست
    1,174

    نقل قول: مرجع کامل رجیستری در #C

    سلام دوستان امكان داره يك برنامه كوچيك بزاريد ؟

  5. #5

    نقل قول: مرجع کامل رجیستری در #C

    دوستان عزیز من وقتی کد رو تو دکمه میزارم و برنامه رو اجرا میکنم خطا میده!!!!!!
    میشه بیشتر توضیح بدید؟
    ممنون

    visual studio cannot start debugging because the debug target
    .
    .
    .
    یکمی از متن پیغام خطا هست

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •