PDA

View Full Version : ریجیستری و کاربرد در application !!



هانی هاشمی
سه شنبه 19 دی 1385, 22:58 عصر
سلام
من چندتا کار می خوام با رجستری انجام بدم
1.ببینم تو یه قسمت مثلا run چه چیزایی هست
2.بتونم پاکشون کنم
3.بتونم بهشون اضافه کنم
البته در این رابطه سرچ کردم در همین سایت اما به جواب کاملی نرسیدم


یه خورده مبتدی توضیح بدید:بوس:

whitehat
چهارشنبه 20 دی 1385, 07:41 صبح
شما می توانید namespace زیر را به کد خود اضافه کنید


using Microsoft.Win32
حال می توانید یک متغیر از نوع کلید رجیستری تعریف کنید مثلا


RegistryKey hklm =Registry.LocalMachine;بعد باید آنرا باز کنید


hklm=hklm.OpenSubKey("Software\\Microsoft\\windows\\CurrentVersion\\run\ \...");
به جای ... هر مقداری که می خواهید بخوانید قرار دهید
حال یک متغیر از تعریف کنید و مقدار را بخوانید و...، بعد باز کردن یک کلید رجیستری قادر به حذف ، اضافه و تغییر آن خواهید بود. فضای نام Microsoft.Win32 توابع مفیدی در را بطه با کار در رجیستری در اختیار شما قرار می دهد.
لینک زیر هم یک مقاله بسیاد خوب در این ضمینه می باشد
http://www.codeproject.com/csharp/dotnet_registry.asp
موفق باشید

هانی هاشمی
چهارشنبه 20 دی 1385, 08:45 صبح
می شه یه مثال بزنید که هم پاک کنه و هم بشه دید و هم بشه اضافه کرد http://qsmile.com/qsimages/39.gif

amir.NET2
چهارشنبه 20 دی 1385, 09:13 صبح
برای دیدن :



hklm=hklm.OpenSubKey("Software\\Microsoft\\windows\\CurrentVersion\\run\ \...").GetValue("YourValue").ToString();


برای اضافه کردن :



hklm=hklm.OpenSubKey("Software\\Microsoft\\windows\\CurrentVersion\\run\ \...", true).CreateSubKey("YourSubKey");


بعد به جای CreateSubKey متد SetValue رو به کار ببر

برای پاک کردن :



hklm=hklm.OpenSubKey("Software\\Microsoft\\windows\\CurrentVersion\\run\ \...", true).DeleteValue("YourValue");

هانی هاشمی
چهارشنبه 20 دی 1385, 22:39 عصر
تو قسمت برای دیدن به جای YourValue باید چی بزارم؟!

iman_s52
پنج شنبه 21 دی 1385, 10:06 صبح
منظورش اون شاخه ای که میخوای مقدارش رو بکشی بیرون .
ValueName ای که مقدارش رو میخوای ببینی.

mahdyeh
پنج شنبه 21 دی 1385, 10:59 صبح
سلام
من چندتا کار می خوام با رجستری انجام بدم
1.ببینم تو یه قسمت مثلا run چه چیزایی هست
2.بتونم پاکشون کنم
3.بتونم بهشون اضافه کنم
البته در این رابطه سرچ کردم در همین سایت اما به جواب کاملی نرسیدم


یه خورده مبتدی توضیح بدید:بوس:
حذف آنچه نمی خواهید، بوسیله رجیستری!
توجه داشته باشید که باید دقیقا همین کلیدها را در رجیستری وارد کنید.کوچکترین تغییری ممکن است منجر به دوباره install کردن ویندوز شود.
برای شروع کار ابتدا در قسمت Run از منوی start این دستور را وارد کنید و کلید OK را کلیک کنید:


Regedit
پس از تغییر دستور مورد نظر فقط پنجره Registry Editor را ببندید و کامپیوتر را Restart کنید تا تغییرات اعمال شوند.
حالا هر کدام از دستورات زیر را که دوست دارید میتوانید تغییر دهید.
حذف منوی Favorites :
اگر از این منو خوشتان نمی آید میتوانید آن را حذف کنید.برای این کار به زیر کلید:


[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer]
رفته و یک مقدار به نام NoFavoritesMenu بسازید و به آن مقدار 1 دهید.
برداشتن RUN از منوی START :
به زیر کلید زیر بروید:


[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Policies\Explorer]
و یک مقدار باینری به نام NoRun بسازید و به آن مقدار01 بدهید.بدین ترتیب حتی کلیدهای نیز کار نخواهند کرد.
بدون جستجو:
اگر دوست ندارید کسی فایلی را در کامپیوتر شما جستجو کند , میتوانید Search را از منوی Start حذف کنید.
برای این کار به زیر کلید زیر بروید:


[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVresion\Polisies\Explorer]
و یک مقدارDWORD به نام NoFind بسازید و به آن مقدار1 بدهید.بدین ترتیب حتی کلید های F3 وWindows+F نیز کار نخواهند کرد.
حذف My Documents:
وقتی فایلی را باز میکنید , ویندوز یک میانبر برای آن فایل درMy Documents در منوی Start قرار میدهد.این موضوع میتواند به عنوان یک جاسوس بر ضد شما عمل کند.
برای حذف آن به زیر کلید زیر بروید:


[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVresion\Polisies\Explorer]
و یک مقدار باینری به نام NoRecentDocsHistory بسازید و به آن مقدار01 بدهید.همچنین برای حذف آن از منوی میتوانید یک مقدار باینری به نام NoRecentDocsMenu بسازید و به آن مقدار 01 را بدهید.
حذف Log Off :
برای حذف آن از منوی Start باید به زیر کلید زیر بروید:


[HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVresion\Polisies\Explorer]
و یک مقدارDWORD به نام NoLogOff بسازید و به آن مقدار1 بدهید.
بدون انیمیشن:
زمانی که منویی را باز مینید , ویندوز این عملیات را در چند تصویر انجام میدهد.که این موضوع بعضی اوقات خسته کننده میشود.
برای غیر فعال کردن این موضوع , به زیر کلید زیر بروید:


[HKEY_CURRENT_USER\ControlPanel\Desktop\WindowsMetr ics]
و به مقدار رشته ای مقدار صفر را بدهید. حالا میبینید که ویندوز سریعترنیز شده.

پاکسازی رجیستری
بانک اطلاعاتی رجیستری در ویندوز از نرم افزارها و سخت افزارهای و نصب شده در کامپیوتر نگهداری می کند و اطلاعاتی در مورد خصوصیات اجزای مختلف کامپیوتر نیز ذخیره می کند. بعد از instal یا unistal کردن یا حتی تغییرات پیکر بندی در برنامه های رجیستر شده رجیستری ویندوز می تواند خراب شود یا آنقدر شلوغ شود که اصطلاحآ کامپیوتر گیج شود و عکس العملهای غیر معمولی از خود نشان دهد.
ویندوز یک ابزار بسیار مفید برای تعمیر رجیستری در اختیار شما قرار داده است. به دلیل اینکه رجیستری دائمآ در ویندوز مورد استفاده قرار می گیرد این ابزار فقط در msdos قابل استفاده است روی start کلیک کنید سپس روی shut down کلیک کنید و گزینه start in ms dos کلیک کنید. اطلاعات بیشتر در مورد این ابزار را می توانید از سایت microsoft بدست بیاورید.


زمانیکه C:\windows ظاهر شد این عبارت را تایپ کنید scanreg/fix بعد از یک تآخیر کوتاه یک پنجره حاوی پیغام ظاهر می شود و به شما اطلاع می دهد که رجیستری با موفقیت تعمیر شد با زدن کلید Enter آن را تصدیق کنید. زمانیکه دوباره C:\windows ظاهر شد تایپ کنید scanreg/opt بعد از لحظاتی دوباره C:\windows ظاهر می شود. برای باز گشت به ویندوز exit را تایپ کنید.

امید وارم به دردتون بخورن؟
تا بعد

mahdyeh
پنج شنبه 21 دی 1385, 11:13 صبح
من چیکار کنم [FONT=Arial] ها رو تایپ نکنه؟

هانی هاشمی
پنج شنبه 21 دی 1385, 11:16 صبح
سلام
ممنون جناب مهدیه
اما من تو سی شارپ می خواستم بدونم چه جوری می شه این کارارو کرد.

اگه می شه یه مثال بزنین که هرچی تو قسمت run هستش رو بهم نشون بده (یعنی تو سمت راسته run )
خواهشا یه مثال بزنین

iman_s52
شنبه 23 دی 1385, 06:32 صبح
rtbRegInfo.Clear(); // یه RichTextBox
RegistryKey rk = Registry.CurrentUser.OpenSubKey( آدرس مورد نظر );
String[] stTemp = rk.GetValueNames();
foreach (string st in stTemp)
rtbRegInfo.AppendText(rk.GetValue(st).ToString()+"\n");

Amir Oveisi
شنبه 23 دی 1385, 15:13 عصر
امیدوارم به درد بخوره
(البته دوستان کامل توضیح دادن من سعی کردم عملیشو نشون بدم )
موفق باشید

arash1718
یک شنبه 25 شهریور 1386, 09:29 صبح
با وجود .net framework استفاده از ریجیستری چقدر کاربرد داره؟ اگه مثال های مفیدی دارید لطفا ارائه کنید.

MH2538
یک شنبه 25 شهریور 1386, 10:24 صبح
کاربرد رجیستری ویندوز ارتباطی با زبان برنامه‌نویسی ندارد.
رجیستری برای منظورهای مختلف استفاده می‌شود که از جمله پرکاربردترین آنها نگهداری تنظیمات ویندوز و برنامه‌ها است.
از تنظیمات ساده‌ای مثل برنامه‌هایی که قرار است در StartUp قرار بگیرند و عکس دسکتاپ ویندوز تا GUID‌های کاربران و تنظیمات امنیتی ویندوز.
فرض کنید شما در حال تولید یک مجموعه برنامه هستید که بصورت ماژولاز تحویل مشتری می‌شود و هر مشتری می‌تواند بسته به نیاز خود یک یا چند ماژول را تهیه و هر یک را در یک آدرس جداگانه نصب کند. برای برقراری ارتباط بین این ماجول‌ها و هسته برنامه و مشخصه‌های هر ماجول بهترین راه رجیستری ویندوز است. برای اطلاع هسته برنامه و سایر ماژول‌ها از ماژول‌های نصب شده دیگر نیز بهترین مکاتن رجیستری ویندوز است.
این نمونه بخش بسیار کوچی از کاربردهای فراوان رجیستری است.
امیدوارم با همین توضیح کوچک متوجه شده باشید که زبان برنامه نویسی شما ربطی به کاربرد رجیستری ندارد.

bpzone
یک شنبه 25 شهریور 1386, 11:17 صبح
با سلام

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

با سپاس

arash1718
یک شنبه 25 شهریور 1386, 11:37 صبح
کاربرد رجیستری ویندوز ارتباطی با زبان برنامه‌نویسی ندارد.
رجیستری برای منظورهای مختلف استفاده می‌شود که از جمله پرکاربردترین آنها نگهداری تنظیمات ویندوز و برنامه‌ها است.
از تنظیمات ساده‌ای مثل برنامه‌هایی که قرار است در StartUp قرار بگیرند و عکس دسکتاپ ویندوز تا GUID‌های کاربران و تنظیمات امنیتی ویندوز.
فرض کنید شما در حال تولید یک مجموعه برنامه هستید که بصورت ماژولاز تحویل مشتری می‌شود و هر مشتری می‌تواند بسته به نیاز خود یک یا چند ماژول را تهیه و هر یک را در یک آدرس جداگانه نصب کند. برای برقراری ارتباط بین این ماجول‌ها و هسته برنامه و مشخصه‌های هر ماجول بهترین راه رجیستری ویندوز است. برای اطلاع هسته برنامه و سایر ماژول‌ها از ماژول‌های نصب شده دیگر نیز بهترین مکاتن رجیستری ویندوز است.
این نمونه بخش بسیار کوچی از کاربردهای فراوان رجیستری است.
امیدوارم با همین توضیح کوچک متوجه شده باشید که زبان برنامه نویسی شما ربطی به کاربرد رجیستری ندارد.


درسته که ریجیستری و برنامه نویسی دو مطلب جدا هستند اما همان طور که خودتون اشاره کردین استفاده از ریجیستری بسیار در پیشرفت برنامه ها مفید است. منظورم بیشتر ذکر ترفندهای متداول در این زمینه است و پی بردن به این امر که آیا این مطلب آیا ارزش پی گیری های بشتر را دارد یا خیر!
اگر کسی ترفندی کاربردی داره لطفا ارائه کنه .

MH2538
یک شنبه 25 شهریور 1386, 11:43 صبح
یک مثال ساده براتون فرستادم
اول RegWritterApp رو اجرا کنید. با این کار RegWritterApp آدرس محل اجرای خودش رو توی رجیستری می‌نویسه و پس از نمایش یک پیغام بسته می‌شه.
حالا RegReaderApp رو اجرا کنید. به شما یک پیغام می ده که حاوی آدرس محل اجرای RegWritterApp است.

gomnam
یک شنبه 25 شهریور 1386, 12:36 عصر
یک مثال ساده براتون فرستادم
اول RegWritterApp رو اجرا کنید. با این کار RegWritterApp آدرس محل اجرای خودش رو توی رجیستری می‌نویسه و پس از نمایش یک پیغام بسته می‌شه.
حالا RegReaderApp رو اجرا کنید. به شما یک پیغام می ده که حاوی آدرس محل اجرای RegWritterApp است.

چه الزامییه که از 2 تا برنامه جدا استفاده کردین؟
یه خوندن ونوشتن ساده تو registry هست دیگه؟؟؟

MH2538
یک شنبه 25 شهریور 1386, 12:48 عصر
بله برنامه‌ای که فرستادم فقط یک خواندن و نوشتن ساده است ولی اگر مطلبی رو که فرستاده بودم می‌خوندنید و به سئوال دوستمون هم توجه می کردید و ... متوجه می‌شدید منظورم پیاده سازی دو تابرنامه از هم جداست و این که یک برنامه همیشه چطور می‌تونه خبردار بشه که برنامه اصلی (مثلاً هسته نرم‌افزارهای ماژولار) در چه آدرسی قرار دارد و بالعکس هسته نرم‌افزار از محل قرار گیری ماژول‌ها یا پلاگین‌ها مطلع بشه و از اونها استفاده کنه.

arash1718
یک شنبه 25 شهریور 1386, 17:23 عصر
یک مثال ساده براتون فرستادم
اول RegWritterApp رو اجرا کنید. با این کار RegWritterApp آدرس محل اجرای خودش رو توی رجیستری می‌نویسه و پس از نمایش یک پیغام بسته می‌شه.
حالا RegReaderApp رو اجرا کنید. به شما یک پیغام می ده که حاوی آدرس محل اجرای RegWritterApp است.

برنامتون یه exeption داشت که تو ضمیمه هست فک می کنید از چی باشه؟

gomnam
یک شنبه 25 شهریور 1386, 23:52 عصر
بله برنامه‌ای که فرستادم فقط یک خواندن و نوشتن ساده است ولی اگر مطلبی رو که فرستاده بودم می‌خوندنید و به سئوال دوستمون هم توجه می کردید و ... متوجه می‌شدید منظورم پیاده سازی دو تابرنامه از هم جداست و این که یک برنامه همیشه چطور می‌تونه خبردار بشه که برنامه اصلی (مثلاً هسته نرم‌افزارهای ماژولار) در چه آدرسی قرار دارد و بالعکس هسته نرم‌افزار از محل قرار گیری ماژول‌ها یا پلاگین‌ها مطلع بشه و از اونها استفاده کنه.

اتفاقا خوندم که اون پست را دادم
اگه هدف شما آموزش استفاده از registry بود که همون یه برنامه که گفتم کافیه
و اگرم مزایای registry و ... هدفتون بود بهتر بود که یه کتاب یا لینکی بهشون معرفی میکردین که از base شروع کنند

ولی به هر حال زحمت کشیدین

PC2st
دوشنبه 26 شهریور 1386, 20:02 عصر
با وجود .net framework استفاده از ریجیستری چقدر کاربرد داره؟
برای نگهداری داده ها و تنظیمات کاربر، بهتره از رجیستری استفاده نکنید و application setting میتونه جایگزین مناسبی برای آن باشه.

arash1718
دوشنبه 26 شهریور 1386, 20:08 عصر
برای نگهداری داده ها و تنظیمات کاربر، بهتره از رجیستری استفاده نکنید و application setting میتونه جایگزین مناسبی برای آن باشه.

ٍٍٍمی شه با مثال توضیخ بدید؟

PC2st
دوشنبه 26 شهریور 1386, 23:26 عصر
مثلا، یک برنامه نوشتید که در تنظیمات کاربری، کاربر میتونه تنظیم کنه تا وقتی که برنامه اجرا شد، یک آهنگ اتوماتیک پخش بشه یا نشه... یا اینکه کاربر میخواد رنگ دکمه ها سیاه باشه یا سفید باشه... و سایر تنظیماتی که کاربر مختص به برنامه دوست داره انجام بشه... اینگونه تنظیمات رو در Application Setting میشه ذخیره کرد و آخرین تنظیماتی که کاربر دوست داشته رو از این طریق بازیابی کرد.
مثلا کاربر میخواهد در هنگام اجرا برنامه، یک آیکون در Sys Try قرار بگیره. میشه این تنظیم رو در Application Setting ذخیره کرد تا برای دفعه بعدی، وقتی کاربر برنامه رو اجرا کرد، آیکونش در Sys Try به نمایش در بیاد.

برای ایجاد یک کلید در Application Setting در زمان Design Time:
مثلا میخوایم که کاربر بخواهد تصمیم بگیره که در زمان اجرای برنامه، فرم بصورت مینیمم نمایش داده بشه یا خیر...
در Solution Explorer گزینه Properties رو باز کنید و از قسمت Settings یک کلید رو بنام IsMinimized ایجاد کنید. (از نوع Boolean و مقدارش رو روی False تنظیم کنید و سطح دسترسی روی User باشه).

حالا در فرم یک CheckBox اضافه کنید و در رویداد CheckedChanged کدهای زیر رو بنویسید:


private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
Properties.Settings.Default.IsMinimized = this.checkBox1.Checked;
Properties.Settings.Default.Save();
}

با کدهای فوق، تنظیم چک بودن checkBox1 در AppSetting ذخیره میشه.

سپس در رویداد Load از فرم، کدهای زیر رو بنویسید:


private void Form1_Load(object sender, EventArgs e)
{
if(Properties.Settings.Default.IsMinimized)
{
this.checkBox1.Checked = true;
this.WindowState = FormWindowState.Minimized;
}
}

با اینکار، تنظیماتی که کاربر در اجرای قبلی انجام داده بود، صورت میگیره.

bpzone
سه شنبه 27 شهریور 1386, 02:42 صبح
میشه چنین کاری انجام داد

داخل رجیستری یک متغیر تعریف کنیم و یم مقدار اولیه بهش بدیم
و بعد هر بار که برنامه اجرا میشه یک واحد از اون متغیر کم کرد تا زمانی که به صفر برسه و بعد با چک کردن صفر شدن یا نشدن اون متغیر به کاربر اجازه اجرای برنامه رو بدیم ؟!؟!؟!

آیا این کار برای نسخه آزمایشی و پیش فروش یک برنامه کار مناسبی هست ؟!؟!؟!

PC2st
سه شنبه 27 شهریور 1386, 04:51 صبح
آیا این کار برای نسخه آزمایشی و پیش فروش یک برنامه کار مناسبی هست ؟!؟!؟!
به کمک ابزارهای مونیتورینگ، به راحتی میشه اون متغیر (کلید) رجیستری رو تشخیص داد!

regbyte
سه شنبه 27 شهریور 1386, 10:47 صبح
میشه یه نمونه از این ابزارهای مونیتورینگ رو معرفی کنید (لینک دانلود یا ...)
با تشکر

fshafagh
سه شنبه 27 شهریور 1386, 11:19 صبح
RegMon for Windows
http://www.microsoft.com/technet/sysinternals/SystemInformation/Regmon.mspx


http://img.microsoft.com/library/media/1033/technet/images/sysinternals/images/screenshots/Regmon.gif

http://download.sysinternals.com/Files/Regmon.zip

mdssoft
شنبه 28 مهر 1386, 09:17 صبح
سلام به همگی
بچه ها من چطور میتونم با #C تو Registery چیزی بنویسم یا پاک کنم :متفکر:
البته دستورات تو Vista هم کار کنه .
ممنون میشم جوابم رو بدین

Amir Oveisi
شنبه 28 مهر 1386, 14:04 عصر
Microsoft.Registry
اینجاست هر چی میخواین

allameh
شنبه 28 مهر 1386, 16:43 عصر
conststring userRoot = "HKEY_CURRENT_USER\\Software";
conststring subkey = "softregister";
conststring subkey1 = "softregistration";
conststring keyname = userRoot + "\\" + subkey;
conststring keyname1 = userRoot + "\\" + subkey1;
conststring keyname2 = userRoot +"\\" + subkey ;


ثبت در رجیستری:
Registry.SetValue(keyname, "usernames", txtUsername.Text, RegistryValueKind.ExpandString);
Registry.SetValue(keyname, "passwords", txtPassword.Text, RegistryValueKind.ExpandString);
Registry.SetValue(keyname1, "data", txtUsername.Text, RegistryValueKind.ExpandString);

خواندن رجیستری:

string passes = (string)Registry.GetValue(keyname, "passwords", "");
string users = (string)Registry.GetValue(keyname, "usernames", "");
string days = (string)Registry.GetValue(keyname2, "date", "");

mdssoft
شنبه 28 مهر 1386, 20:55 عصر
این کدها برای Vista صادق هستند دیگه !!!

allameh
یک شنبه 29 مهر 1386, 10:18 صبح
من فکر نکنم فرقی بکنند

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

hassan razavi
یک شنبه 29 مهر 1386, 10:24 صبح
من قبلا روی Vista 32 Bit امتحان کردم ، مشکلی نداشت

mdssoft
یک شنبه 29 مهر 1386, 10:25 صبح
آخه من که Vista ندارم برادر :ناراحت:

hassan razavi
یک شنبه 29 مهر 1386, 10:48 صبح
منم حالا ندارم وگرنه میگفتم کودتو بدی براتون تستش کنم

komeil64
سه شنبه 11 دی 1386, 14:01 عصر
سلام
ممنون از راهنماییتون اما من وقت کد زیر رو نوشتم :

Microsoft.Win32.RegistryKey regkey;
regkey = Registry.LocalMachine.OpenSubKey("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main", true).DeleteSubKey("s");

و اروری که میده:

cannot implicitly convert type 'void' to 'microsoft.win32.registrykey'

Amir Oveisi
سه شنبه 11 دی 1386, 23:57 عصر
دوست عزیز تابع OpenSubKey هیچ مقدار بازگشتی نداره یعنی void هست و نمیتونین اونو تو یه object از نوع RegistryKey قرار بدین.

komeil64
چهارشنبه 12 دی 1386, 12:50 عصر
سلام
ممنون از راهنماییتون
من می خوام مقدار s رو در آدرس مورد نظر در رجیستری تغییر بدم
ممنون میشم راهنمایی کنید

komeil64
چهارشنبه 12 دی 1386, 20:30 عصر
سلام
ممنون میشم راهنمایی کنید

Amir Oveisi
چهارشنبه 12 دی 1386, 23:42 عصر
من می خوام مقدار s رو در آدرس مورد نظر در رجیستری تغییر بدم

دوست عزیز تو اون برنامه که بالا گذاشتم اینکار انجام شده اگه دقت کنین
موفق باشید