کار با Registry با استفاده از NET.

در این پست نشان خواهیم داد که چگونه با استفاده از NET. با Registry کار کنیم.

کار با Registry با استفاده از NET.

مقدمه

رجیستری ویندوز (Windows Registry) به خوبی یک برنامه اطلاعات سیستم عامل را نگهداری می کند که مانند یک انبار مرکزی کار می کند. توسعه دهندگان معمولا ترجیح می دهند مقادیر برنامه مانند مسیر فایل، مسیر پوشه و غیره و یا  تنظیمات پیکربندی مانند connection string، را در رجیستری ویندوز ذخیره کنند.

اکنون با یک مثال به درک بهتر موضوع خواهیم پرداخت. اگر برنامه کاربر را به انتخاب یک مسیر فایل یا مسیر پوشه وادار کند، مقدار انتخاب شده با یک نام مناسب در رجیستری ذخیره می شود. دفعه بعد، اگر کاربر شروع به کار باهمان برنامه در همان کامپیوتر کند، بجای انتخاب همان مسیر، مقادیری که قبلا انتخاب کرده است از رجیستری واکشی شده و در برنامه نشان داده خواهد شد.

اصول اولیه ویندوز رجیستری (Windows Registry)

اطلاعات ذخیره در رجیستری برای برنامه های دیگر و کاربران، قابل دستیابی می باشند. بنابراین اطلاعات امن نباید در رجیستری ذخیره شوند. رجیستری یک ساختار سلسله مراتبی دارد. دارای کلیدهای از پیش تعرف شده می باشد که تحت آن همه داده ها ذخیره و قابل دستیابی هستند. این کلیدها نمی توانند توسط کاربران تغییر نام داده شده یا پاک شوند. شرح مختصری از کلیدهای از پیش تعریف شده را باهم ببینیم.

 HKEY_CURRENT_USER: شامل اطلاعات پیکربندی کاربری که در حال حاضر وارد سیستم شده است می باشد که اطلاعات پروفایل کاربر در اینجا ذخیره شده است. 

 HKEY_USERS: شامل پروفایل تمام کاربران در کامپیوتر است. HKEY_CURRENT_USER درواقع یک نام مستعار برای یک کلید در زیردرخت HKEY_USERS می باشد.  

 HKEY_LOCAL_MACHINE: شامل اطلاعات پیکربندی خاص کامپیوتر می باشد. صرف نظر ازینکه کدام کاربر وارد شده است.

HKEY_CLASSES_ROOT: شامل انواع فایل های مرتبط با برنامه ها و داده های پیکربندی برای اشیاء COM می باشد. 

 HKEY_CURRENT_CONFIG: شامل اطلاعات درمورد مشخصات سخت افزاری استفاده شده در کامپیوتر در هنگام راه اندازی سیستم می باشد.

 

تصویر بالا محیط رجیستری را نشان می دهد. برای باز کردن Registry به دستور Run بروید و کلمه regedit را بنویسید. هر کلید از پیش تعریف شده دارای کلیدهای بسیاری است و هر کلید دارای یک مقدار می باشد.

کار با Registry با استفاده از NET.

ارتباط با رجیستری با استفاده از فضای نام system.Microsoft.Win32 انجام می شود. تصویر زیر ساختار فضای نام را نشان می دهد.

C#.NET و Registry

یک پروژه برای پیاده سازی عملی عملیات رجیستری، ایجاد می کنیم.

ایجاد کلید

public void CreateRegistryKey()  
{  
   RegistryKey regkey;  
   regkey = Registry. CurrentUser.OpenSubKey("Software", true); //LINE : 1  
   regkey.CreateSubKey("REGISTRY_OPERATIONS"); //LINE : 2  
  
}

در این کد، یک زیرکلید در قسمت کلید کاربر جاری در مسیر زیر ساخته می شود.

HKEY_CURRENT_USER -> Software-> REGISTRY_OPERATIONS

خط 1: زیرکلید Software را باز می کند، پارامتر بولین دوم به این مفهوم است که آیا کلید، قابل نوشتن هست یا نه. برای مثال اگر شما در حال خواندن از رجیستری هستید، می توانید آن را به false تنظیم کنید.

خط 2: ایجاد یک زیرکلید، تحت یک کلید دیگر

خواندن و نوشتن مقادیر

 

RegistryKey regkey;  
regkey.OpenSubKey("Software\\REGISTRY_OPERATIONS", true);  
regkey.SetValue(“FOLDER PATH”, “C:\Downloads); //LINE: 1  
string folderPath = regkey.GetValue("FOLDER PATH", "").ToString(); //LINE: 2  

 

خط 1 مقادیر رجیستری را در مسیر مشخص تنظیم می کند.

خط 2 مقدار رجیستری را برای کلید خاص بدست می آورد.

پاک کردن یک زیرکلید

RegistryKey regkey;  
regkey.OpenSubKey("Software", true);  
regkey.DeleteSubKey( “REGISTRY_OPERATIONS”, true);  
regkey.Close();

در قطعه کد بالا، می خواهیم که زیرکلید REGISTRY_OPERATION و تمام مقادیر آن را پاک کنیم.

توجه کنید که،  مقدار بولین true به متد delete ارسال می شود و دلیلش این است که اگر کلید پاک شده یافت نشد، یک استثنا رد شود.

نکته:

برای خواندن و نوشتن در رجیستری، نیاز به حق دسترسی (permission) می باشد. اگر حق دسترسی مناسب را نداشته باشید، هنگام تلاش برای دستیابی یا ایجاد کلید، یک SecurityException دریافت خواهید کرد.

رجیستری یک بخش حساس از سیستم عامل است. بنابراین این یک امر ضروری است که قبل از تلاش برای انجام کاری در آن یک بکاپ (backup) از آن تهیه کنید. یک رجیستری خراب، یک سیستم عامل غیرکاربردی را به شما ارائه خواهد داد.