PDA

View Full Version : کار با ریجستری



ali_autumnal
چهارشنبه 05 آبان 1389, 12:08 عصر
باسلام و خسته نباشید.

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

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



Requested registry access is not allowed.

کد های نوشته شده در کلاس مربوطه:




public bool CurrentUser(string OpenSubKey, string Name, object value, RegistryValueKind ValueKind)
{
RegistryKey reg;
try
{
reg =
Registry.CurrentUser.OpenSubKey(OpenSubKey, true);
reg.SetValue(Name, value, ValueKind);
reg.Close();
return true;
}
catch(ExternalException error)
{
MessageBox.Show(error.Message, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return false;
}
//================================================== =================================================
public bool CurrentUser(string OpenSubKey,string CreateKey, string Name, object value, RegistryValueKind ValueKind)
{
RegistryKey reg;
try
{
reg =
Registry.CurrentUser.OpenSubKey(OpenSubKey, true);
reg.CreateSubKey(CreateKey, RegistryKeyPermissionCheck.ReadWriteSubTree);
reg.SetValue(Name, value, ValueKind);
reg.Close();
return true;
}
catch (ExternalException error)
{
MessageBox.Show(error.Message, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
return false;
}

روش استفاده:




ClassRegistry claReg = new ClassRegistry();
if (!claReg.CurrentUser("Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies\\ActiveDesktop",
"NoDispCpl", 0, Microsoft.Win32.RegistryValueKind.DWord))
claReg.CurrentUser("Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies", "ActiveDesktop",
"NoChangingWallpaper", 0, Microsoft.Win32.RegistryValueKind.DWord);


از طرفی چطور باید مقدار باینری رو تو مقادیر باینری ست کنم.
توجه کنید:




ClassRegistry claReg = new ClassRegistry();
if (!claReg.CurrentUser("Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies\\Explorer",
"NoFolderOptions",1, Microsoft.Win32.RegistryValueKind.Binary))
claReg.CurrentUser("Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies","Explorer",
"NoFolderOptions", 00000001, Microsoft.Win32.RegistryValueKind.Binary);


مقدار مشخص شده برنگ قرمز رو چطور باید ست کنم؟

با تشکر
علی پاییزی

ali_autumnal
چهارشنبه 05 آبان 1389, 20:21 عصر
کسی از دوستان نظری نداره؟

ali_autumnal
شنبه 08 آبان 1389, 15:30 عصر
از دوستان گرامی استدعا دارم در صورت داشتن اطلاعات کافی راهنمایی کنید.

متشکرم
علی پاییزی

Reza_Yarahmadi
شنبه 08 آبان 1389, 16:40 عصر
اين كد روي سيستم من بدون مشكل اجرا ميشه ، احتمال داره يوزري كه با اون وارد سيستم ميشيد دسترسي Admin نداشته باشه.
براي باينري فرستادن هم ميتونيد بصورت زير عمل كنيد

CurrentUser("Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies", "ActiveDesktop",
"NoChangingWallpaper", new byte[] { 00, 00, 00, 01 }, Microsoft.Win32.RegistryValueKind.Binary);

ali_autumnal
یک شنبه 09 آبان 1389, 14:21 عصر
اين كد روي سيستم من بدون مشكل اجرا ميشه ، احتمال داره يوزري كه با اون وارد سيستم ميشيد دسترسي Admin نداشته باشه.
براي باينري فرستادن هم ميتونيد بصورت زير عمل كنيد

CurrentUser("Software\\Microsoft\\Windows\\CurrentVersion\\Poli cies", "ActiveDesktop",
"NoChangingWallpaper", new byte[] { 00, 00, 00, 01 }, Microsoft.Win32.RegistryValueKind.Binary);

سلام
دوست اگه امکانش هست یه تست کن ببین تو سیستم شما کدوم قسمت از شرط اجرا میشه؟ یعنی دستورات شرط اجرا میشه یا دستورات داخل if

چون اگه دستور شرط اجرا بشه یعنی کلید مورد نظر توسیستم شما وجود داره و فقط مقداری رو تو اون کلید ایجاد میکنه و مقداردهی میکنه.

در غیر اینصورت یا سیستم شما مشکل داره یا سیستم من!

چون تو سیستم هایی که من کار میکنم همه دسترسی admin دارن و حتی نه تو xp اجرا میشه و نه تو 7

منتظر پاسخ شما هستم.

بی نهایت سپاسگزارم
علی پاییزی

Reza_Yarahmadi
یک شنبه 09 آبان 1389, 14:35 عصر
دوست اگه امکانش هست یه تست کن ببین تو سیستم شما کدوم قسمت از شرط اجرا میشه؟ یعنی دستورات شرط اجرا میشه یا دستورات داخل if

چون اگه دستور شرط اجرا بشه یعنی کلید مورد نظر توسیستم شما وجود داره و فقط مقداری رو تو اون کلید ایجاد میکنه و مقداردهی میکنه.
من توي هر 2 حالت تست كردم و مشكلي نداشت. مسلما ايراد از كد نيست.

در غیر اینصورت یا سیستم شما مشکل داره یا سیستم من!
:متفکر: سيستم خودتون مشكل داره!! :چشمک:

چون تو سیستم هایی که من کار میکنم همه دسترسی admin دارن و حتی نه تو xp اجرا میشه و نه تو 7
من توي 7 تست كردم XP رو نميدونم. ولي وقتي توي 7 اجرا بشه نبايد با XP مشكلي داشته باشه.
شما روي سيستم ديگه اي امتحان كنيد ببينيد چطور ميشه و يا اينكه با يوزر Administrator وارد سيستم بشيد....
چون غير از اين چيز ديگه اي نميتونه باشه (در واقع به ذهن من نميرسه)

ali_autumnal
یک شنبه 09 آبان 1389, 22:21 عصر
من توي هر 2 حالت تست كردم و مشكلي نداشت. مسلما ايراد از كد نيست.

:متفکر: سيستم خودتون مشكل داره!! :چشمک:

من توي 7 تست كردم XP رو نميدونم. ولي وقتي توي 7 اجرا بشه نبايد با XP مشكلي داشته باشه.
شما روي سيستم ديگه اي امتحان كنيد ببينيد چطور ميشه و يا اينكه با يوزر Administrator وارد سيستم بشيد....
چون غير از اين چيز ديگه اي نميتونه باشه (در واقع به ذهن من نميرسه)

آقا دستت درد نکنه. واقعا شرمنده کردی.

یه سوال دیگه:

فرض کنیم با PC که کار میکنیم User هست. چه کدی بنویسیم که بشه تغییرات تو ریجستری داد و یا همانند یک admin بتونیم عمل کنیم.

اصلا امکانش هست؟

البته بنظرم که امکانش هست. میشه سیستم عامل رو دور زد.

یه تعداد کدهایی نوشتم که درست عمل می کنند و یه تعداد درست جواب نمیدند و یا عدم دسترسی میده. متاسفانه اطلاعات کاملی در این رابطه ندارم.

اگه در این مورد هم اطلاعاتی دارید مارو هم بی نصیب نذارید.

متشکر
علی پاییزی

MSN_Issue
یک شنبه 09 آبان 1389, 22:27 عصر
سلام
یه مطلبی رو میخواستم خدمتتون عرض کنم !
کدنویسی برای رجیستری وقتی مخاطبتون از وین7 استفاده میکنه کار بیهوده ای هست !!! چون امنیت وین7 اجازه ی دسترسی به رجیستری(از طریق کد) رو نمیده و فکر هم نمیکنم امکانش باشه که شما خودتون راه بیافتید و سیستم تک تک مخاطباتون رو امنیتش رو دستکاری کنید !!!!
پیشنهاد میکنم بجای استفاده از رجیستری به فکر راههای دیگه ای باشید .

ali_autumnal
یک شنبه 09 آبان 1389, 22:47 عصر
سلام
یه مطلبی رو میخواستم خدمتتون عرض کنم !
کدنویسی برای رجیستری وقتی مخاطبتون از وین7 استفاده میکنه کار بیهوده ای هست !!! چون امنیت وین7 اجازه ی دسترسی به رجیستری(از طریق کد) رو نمیده و فکر هم نمیکنم امکانش باشه که شما خودتون راه بیافتید و سیستم تک تک مخاطباتون رو امنیتش رو دستکاری کنید !!!!
پیشنهاد میکنم بجای استفاده از رجیستری به فکر راههای دیگه ای باشید .


کی گفته اجازه دسترسی نمیده!!!!!!!!!!!؟؟؟:عصبانی++:
هر کدی رو که نوشتم دقیقا اجرا کرده و جواب گرفتم.:قهقهه:

اتفاقا در بعضی مواقع بهتر از XP هم جواب میده.:کف:

نه دوست عزیز من نمیخوام تک تک سیستم هارو دستکاری کنم بلکه با یک کلیک همه چی عوض میشه. و البته با Image ای که از سیستم میگیرن کار بقیه هم تموم میشه.

لطفا در مورد راههای دیگه کمی بیشتر راهنمایی کنید.

MSN_Issue
دوشنبه 10 آبان 1389, 09:22 صبح
کی گفته اجازه دسترسی نمیده!!!!!!!!!!!؟؟؟:عصبانی++:
هر کدی رو که نوشتم دقیقا اجرا کرده و جواب گرفتم.:قهقهه:

اتفاقا در بعضی مواقع بهتر از XP هم جواب میده.:کف:

نه دوست عزیز من نمیخوام تک تک سیستم هارو دستکاری کنم بلکه با یک کلیک همه چی عوض میشه. و البته با Image ای که از سیستم میگیرن کار بقیه هم تموم میشه.

لطفا در مورد راههای دیگه کمی بیشتر راهنمایی کنید.
میشه بگید چطور از شر امنیت وین7 خلاص شدید ؟!!!
چون من هر کاری کردم نتونستم از توی برنامه ، رجیستری رو دستکاری کنم (وقتی امنیت وین7 خاموش نباشه اکسپشن میده )
شاید شما امنیت ویندوزتون رو آف کردین ؟!!

Reza_Yarahmadi
دوشنبه 10 آبان 1389, 10:59 صبح
یه سوال دیگه:
فرض کنیم با PC که کار میکنیم User هست. چه کدی بنویسیم که بشه تغییرات تو ریجستری داد و یا همانند یک admin بتونیم عمل کنیم.
اصلا امکانش هست؟
البته بنظرم که امکانش هست. میشه سیستم عامل رو دور زد.
از شدن كه ميشه ولي نه با دور زدن سيستم عامل. در صورتي يك يوزر محدود ميتونه دسترسي Admin داشته باشه كه يوزر و پسورد Admin رو داشته باشه و غير از اين هيچ راه حل ديگه اي نداره.
در صورت داشتن يوزر و پسورد ميتونيد يك Peocess بنويسيد كه يوزر و پسورد Admin داشته باشه ، اين Process كارهاي مورد نظر رو انجام ميده و توي برنامه اصلي اين Process رو اجرا كنيد.

میشه بگید چطور از شر امنیت وین7 خلاص شدید ؟!!!
تا جايي كه ميدونم 7 با XP فرقي نميكنه ، تنها تفاوت در نسخه 32 بيتي با 64 بيتي است كه براي 64بيتي ها به اين روش نميشه عمل كرد. براي توضيح در مورد 64 بيتي به اينجا (http://www.pinvoke.net/default.aspx/advapi32/RegOpenKeyEx.html)مراجعه كنيد

ali_autumnal
دوشنبه 10 آبان 1389, 21:37 عصر
میشه بگید چطور از شر امنیت وین7 خلاص شدید ؟!!!
چون من هر کاری کردم نتونستم از توی برنامه ، رجیستری رو دستکاری کنم (وقتی امنیت وین7 خاموش نباشه اکسپشن میده )
شاید شما امنیت ویندوزتون رو آف کردین ؟!!

نه دوست عزیز من هیچ کاری با امنیت 7 ندارم. من کارمو انجام میدم اون هم کار خودش و البته کارهای من رو انجام میده.

از طرفی اگه دیدی این غول ماکروسافت اذیت میکنه میتونی با کد زیر حالشو بگیری:




using System.Diagnostics;
using System.IO;



private void Kill()
{
string MyName = Path.GetFileNameWithoutExtension(Application.Execu tablePath);
foreach (Process p in Process.GetProcesses())
{
try
{

if (p.ProcessName != MyName)
{
p.Kill();
}
}
catch
{
}
}
}

از طرفی با این تابع هم میتونی کلیه ویروس ها رو هم از حافظه خارج کنی!!!!!!!

درضمن کد فوق درصورتی که تو سیستم عامل XP اجرا بشه باعث Reset شدن سیتم عامل مبشه. اما تو 7 این مشکل وجود نداره براحتی کلیه Process از حافظه خارج میشه و براحتی و بدون مزاحمت ویروس ها و... کارتو انجام میدی. موفق باشید
علی پاییزی

hassan_kahrizy
جمعه 21 آبان 1389, 14:01 عصر
بسمه تعالی
با سلام
من قبلا
UAC ویندوز 7 به شما اجازه نخواهد داد بجز اینکه ازش مجوز بگیرید و برای مجوز گرفتن راست کلیک کنید روی فایل اجراییتون و run as administrator بزنید و بعد مجوز uac را تایید کنید در این صورت مشکلی نخواهید داشت.البته راه هایی هم برای کد نوشتن این کار وجود داره که من تست کردم جواب نگرفتم.
من تصمیم گرفتم بجای اینکار از فایل استفاده کنم و اون هم در شاخه Application.CommonAppDataPath استفاده کردم که بدون هیچ مشکلی تونستم کارهام رو بکنم البته در ویندوز ویستا اگر کاربر شما user باشد برای این هم از شما مجوز uac می خواهد واقعا مایکروسافت شورش رو در آورده است
kill کرد پروسس ها اگر توسط ویندوز شما رو دچار خطا نکنه مطمئنا الان یا در آینده نزدیک آنتی ویروس ها برنامه شما رو به عنوان ویروس خواهن شناخت و این راه هم راه قابل اطمینانی نیست من ترجیح می دهم از مجوز گرفتن uac توسط خود کاربر استفاده کنم

Amir Oveisi
جمعه 21 آبان 1389, 16:14 عصر
نه دوست عزیز من هیچ کاری با امنیت 7 ندارم. من کارمو انجام میدم اون هم کار خودش و البته کارهای من رو انجام میده.

از طرفی اگه دیدی این غول ماکروسافت اذیت میکنه میتونی با کد زیر حالشو بگیری:




using System.Diagnostics;
using System.IO;



private void Kill()
{
string MyName = Path.GetFileNameWithoutExtension(Application.Execu tablePath);
foreach (Process p in Process.GetProcesses())
{
try
{

if (p.ProcessName != MyName)
{
p.Kill();
}
}
catch
{
}
}
}

از طرفی با این تابع هم میتونی کلیه ویروس ها رو هم از حافظه خارج کنی!!!!!!!

درضمن کد فوق درصورتی که تو سیستم عامل XP اجرا بشه باعث Reset شدن سیتم عامل مبشه. اما تو 7 این مشکل وجود نداره براحتی کلیه Process از حافظه خارج میشه و براحتی و بدون مزاحمت ویروس ها و... کارتو انجام میدی. موفق باشید
علی پاییزی




میشه در مورد این کدتون یه مقدار توضیح بدید؟ چرا این کار رو می کنید؟

ali_autumnal
یک شنبه 23 آبان 1389, 15:27 عصر
میشه در مورد این کدتون یه مقدار توضیح بدید؟ چرا این کار رو می کنید؟

سلام و خسته نباشید

این کار زیادی حال میده!!!

ساده ترین موردی که بگم اینکه میتونید آنتی ویروس رو هم از کار بندازید!

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

این تکه کد بیشتر تو 7 کاربرد داره. چون از خودش محافظت میکنه. اما تو XP جواب نمیده و باعث میشه سیستم عامل Reset بشه.

باز اگه سوالی داشتید در خدمتم
موفق باشید
علی پاییزی