PDA

View Full Version : حرفه ای: ذخیره تنظیمات سرور در رجیستری



shahramap
دوشنبه 24 آذر 1393, 19:17 عصر
با سلام

یه برنامه سرور کلاینتی سه لایه (شی گرا) دارم که میخوام یه کلاسی طراحی کنم برای اینکه تو فرم لاگین وقتی برای بار اول میاد بالا و کاربر هیچ تنظیمات سروری انجام نداده بهش پیام بده که تنظیمات سرور را انجام بده بعد وقتی تنظیمات سرور رو انجام داد و دکمه ذخیره تنظیمات رو زد این تنظیمات در رجیستری ویندوز ذخیره شه و دفعات بعدی هر بار که دیگه فرم میخواد لود شه بره رشته اتصال رو از رجیستری ویندوز بخونه بعد بتونه همین رشته اتصال رو برگرودنه ...ممنون میشم اگه کسی انجام داده و نتیجه گرفته ازش کمک کنه..باتشکر.

محمد رضا فاتحی
سه شنبه 25 آذر 1393, 07:43 صبح
سلام
اول باید یه مسیر دلخواه توی ریجستری برای خودت دست و پا کنی
با این کد
RegistryKey reg = Registry.LocalMachine.OpenSubKey(@"Software\Yourproject", true);

بعد چک می کنی اصلا وجود داره یا نه اگه وجود نداشت که مغلومه تا حالا تنظیماتی ست نشده
if (reg == null)
{

Registry.LocalMachine.CreateSubKey(@"Software\MedianSofts", RegistryKeyPermissionCheck.ReadWriteSubTree);
reg = Registry.LocalMachine.OpenSubKey(@"Software\MedianSofts", true);
}


بعد میای یه کلید برای کانکشن استرینگت در نظر می گیری و اونو با یه مقدار پیش فرض می سازی البته می تونی تو همین مرحله فرم تنظیمات رو به کاربر نشون بدی و پس از بررسی اتصال کانشن رو دخیره کنی
reg.SetValue("constr", constr, RegistryValueKind.String);

حسین.کاظمی
سه شنبه 25 آذر 1393, 07:46 صبح
آموزش کار با رجیستری در سی شارپ (http://www.rasekhoon.net/forum/post/show/683567/1225004/)



در هنگام نوشتن یک برنامه در مواقعی بایستی مقداری را در یک مکان از سیستم کاربر ذخیره کنیم . انتخاب برنامه نویسان در این گونه موارد معمولا از بین سه گزینه ی زیر می باشد :
1- DataBase
2- فایل های INI
3- رجیستری ( تنها در برنامه نویسی برای سیستم های ویندوزی کاربرد دارد )



استفاده از DataBase : به منظور نگهداری تعداد زیادی از مقادیر ، بهترین گزینه است . همچنین در صورتی که پای امنیت اطلاعات ذخیره شده در میان است ، در انجام این روش شک نکنید . در این روش میتوانید از قابلیت Password Protection که در تمامی بانک های اطلاعاتی وجود دارد ، استفاده کنید .
استفاده از فایل های INI : در بعضی موارد هم میتوان از این روش استفاده کرد . البته این روش همراه با پیچیدگی و امنیت پایین میباشد .
استفاده از رجیستری : روشی که قصد توضیح آن را داریم ، همین روش است . این روش دارای امنیت نسبتا پایینی ست . پس امنیت اطلاعات خود را با این روش به خطر نیاندازید . البته میتوانید اطلاعات خود را به صورت Encrypt شده در رجیستری قرار دهید ( مثلا مواقعی که قصد ذخیره یک رمز عبور ، در یک برنامه ساده را دارید ) . یکی از مزایای این روش سادگی و راحتی آن است .
اگر موافق باشید ، به سراغ مراحل عملی کار برویم :
یک پروژه ی جدید سی شارپ باز کنید و اسم آن را Registry in CS بگذارید .
حالا وارد قسمت کد نویسی شده و Name Space زیر را در قسمت General تعریف کنید :
using Microsoft.Win32;
حالا میتوانید خیلی راحت در هر جایی از برنامتان از کلاس Registry استفاده کنید .
در قسمت زیر اجزای این کلاس را مورد بررسی قرار خواهیم داد :
1- Registry.ClassesRoot
از این قسمت میتوانید برای انجام عملیات مختلف بر روی شاخه HKEY_CLASSES_ROOT استفاده کنید .
چون متدها به صورت Alphabetic مرتب شده اند ، بنده هم آنها را به ترتیب توضیح میدهم . البته در یک مورد استثنا وجود دارد . آن هم متد OpenSubKey هست که باید در ابتدا توضیح بدهم ، چون تعداد زیادی از متدها به این متد وابستگی دارند .
1-1 : OpenSubKey
بوسیله این متد میتوانید یک زیر کلید را باز کنید . برای مثال به کد زیر دقت کنید :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
در این کد نکات زیادی وجود دارد .
خط اول : یک متغییر از نوع RegistryKey تعریف کردیم .
خط دوم : مقدار متغییر reg را که در بالا تعریف کرده بودیم ، برابر کلید بازشده ( GC ) قرار دادیم تا بتوانیم عملیات مورد نظر خود را روی کلید باز شده انجام دهیم .
البته اگر خواستید زیر کلیدهای بیشتری را باز کنید ، باید از کد زیر استفاده کنید :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GCClsid”,true );

در همان خط دوم یک کلمه true می بینید . شاید بپرسید این کلمه چه معنایی دارد ؟! این کلمه به برنامه میگوید که کاربر دسترسی به این کلید را تایید میکند ( در بعضی مواقع دسترسی باید تایید شود ) .
1- 2 : Close
این متد کلید قبلی را که توسط متد OpenSubKey باز شده بود ، میبندد . بهتر است بعد از هر بار که متد OpenSubKey را به کار میگیرید ، در پایان کارتان متد Close را اجرا کنید .
1- 3 : CreateSubKey
وظیفه این متد ساخت یک زیر کلید است . کد زیر را ببینید :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
reg.CreateSubKey(“NewSubKey”);

1- 4 : DeleteSubKey
اگر خواستید یک زیر کلید را حذف کنید ، میتوانید از این متد استفاده کنید . کد زیر همان کلید قبلی را که ساختیم پاک میکند :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
reg.DeleteSubKey(“NewSubKey”);

1- 5 : DeleteSubKeyTree
این متد یک کلید با تمام زیر کلیدهایش و مقادیر زیر مجموعه اش را پاک میکند :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
reg.DeleteSubKeyTree(“NewSubKey”);
1- 6 : DeleteValue
این متد هم که از نامش پیداست . پاک کردن یک مقدار کار این متد است . به کد زیر توجه کنید :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
reg.DeleteValue(“Your Value”);
1- 7 : Flush
خوب است در هر قسمتی که کارتان با رجیستری تمام شد ، یک بار این متد را فراخوانی کنید . البته متد Close کار این متد ( Flush ) را هم انجام خواهد داد .
Registry.ClassesRoot.Flush();
1- 8 : GetAccessControl
به MSDN مایکروسافت مراجعه کنید .
1- 9 : GetSubKeyName
با استفاده از این کد میتوانید زیر کلیدهای یک کلید رجیستری را بدست بیاورید . فقط قبل از اینکه کد زیر را اجرا کنید ، یک لیست باکس به فرمتان اضافه کنید و خاصیت Name آن را برابر با listBox قرار دهید :
RegistryKey Reg;
Reg = Registry.CurrentUser.OpenSubKey(“Software”);
//————-
foreach (string strSubKeysName in Reg.GetSubKeyNames())
{
listBox.Items.Add(strSubKeysName);
}
1- 10 : GetValue
این متد میتواند مقدار یک Value را برگرداند . کد زیر را ببینید :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
MessageBox.Show(reg.GetValue(“Your Value”).ToString());
1- 11 : GetValueKind
با این متد میتوانید نوع یک Value را دریافت کنید .
انواع Value عبارتنداز :
1- String
2- Binary
3- DWORD
4- Multi-String
5- Expandable
به این کد توجه کنید :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
MessageBox.Show(reg.GetValueKind(“Your Value”).ToString());

1- 12 : GetVlaueNames
با این کد هم میتوانید مقادیر موجود در یک کلید را بدست بیاورید . کد زیر :
RegistryKey Reg;
Reg = Registry.CurrentUser.OpenSubKey(“SoftwareMy APPSettings”);
//————-
foreach (string strSubKeysName in Reg.GetValueNames())
{
listBox1.Items.Add(strSubKeysName);
}
1- 13 : Name
این یکی هم مسیر جاری رجیستری را برمیگرداند :
RegistryKey reg;
reg = Registry.ClassesRoot.OpenSubKey(“GC”,true);
MessageBox.Show (reg.Name);
1- 14 : SetAccessControl
به MSDN مایکروسافت مراجعه کنید .
1- 15 : SetValue
بوسیله این متد میتوانید یک مقدار را در رجیستری بنویسید :
RegistryKey Reg;
Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);
//————-
Reg.SetValue(“My Value”, “Program”,RegistryValueKind.String);
یک نکته در این کد وجود دارد . در خط سوم کدها آنجا که نوشته شده RegistryValueKind.String ، اینجا نوع متغییر تنظیم شده است . انواع متغیر ها را میتوانید در راهکار 1- 11 مشاهده کنید .
1- 16 : SubKeyCount
این یکی هم تعداد زیر کلیدهای یک کلید رجیستری را بازگشت خواهد داد :
RegistryKey Reg;
Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);
//————-
MessageBox.Show(Reg.SubKeyCount.ToString());
1- 17 : ValueCount
و اما آخرین مورد . بوسیله این تابع میتوانید تعداد متغییرهای داخل یک کلید را بدست بیاورید .
RegistryKey Reg;
Reg = Registry.LocalMachine.OpenSubKey(“SOFTWARE”, true);
//————-
MessageBox.Show(Reg.ValueCount.ToString());

میتونی هم تو اینترنت سرچ کنی
موفق باشی