PDA

View Full Version : سوال: خطای سطح دسترسی در رجیستری ویندوز



ronix3
سه شنبه 04 خرداد 1395, 07:24 صبح
سلام دوستان من می خوام یه سری اطلاعات رو از رجیستری بخونم ولی خطا ی نداشتن دسترسی می ده run as adminstator هم کردم با این که ادمینستاتور به اون کلید دسترسی داره ولی باز هم رو این کلید همین خطا رو نشون می ده ممنون می شم کمکم کنید که بتونم اطلاعات این کلید رو بخونم

abdullah20
سه شنبه 04 خرداد 1395, 12:49 عصر
سلام
چ خطایی میده؟

ronix3
سه شنبه 04 خرداد 1395, 17:37 عصر
سلام
چ خطایی میده؟

سلام
Requested registry access is not allowed

Felony
سه شنبه 11 خرداد 1395, 21:46 عصر
به جای اسپم زدن کدتون مشکلتون رو کامل توضیح بدید و کدی که نوشتید رو قرار بدید .

ronix3
چهارشنبه 12 خرداد 1395, 01:02 صبح
به جای اسپم زدن کدتون مشکلتون رو کامل توضیح بدید و کدی که نوشتید رو قرار بدید .
معذرت می خوام ولی توضیحات رو تو پست اول داده بودم از طرفی هم این مسئله برام مهم بود تاپیک رو میاوردم بالا ک کابرای بیشتری ببینن

من تو برنامم کل رجیستری رو باید بخونم و همه ی کلید ها رو تو یه treeview نشون بدم و یه سری کار دیگه مشکل من تو خوندن از بعضی قسمت ها (مثل کلید HKEY_CURRENT_USER\Software\Classes\CLSID) هست که وقتی اجرا می شه می گه شما دسترسی به این کلید ندارید می خوام راه حلی پیدا کنم که چطور به این کلید دسترسی پیدا کنم و کلید ها زیر مجموعه ی این کلید رو هم بخونم کار دادن دسترسی باید از طریق نرم افزار انجام بشه
تو تنضیمات کلید دیدم که ادمینستاتور به این کلید دسترسی داره پس برنامه رو به عنوان ادمینستاتور اجرا کردم ولی فایده نداشت و بازم نتیجه همین بود
متن ارور هم Requested registry access is not allowed بود

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

RegistryKey r;
r = Registry.CurrentUser.OpenSubKey(KeyName);


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


RegistryKey r;
r = Registry.CurrentUser.OpenSubKey(KeyName,true);

Felony
چهارشنبه 12 خرداد 1395, 06:11 صبح
var regularx64View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
var clsidKey = regularx64View.OpenSubKey(@"SOFTWARE\Classes\CLSID\", RegistryKeyPermissionCheck.ReadSubTree);

ronix3
چهارشنبه 12 خرداد 1395, 18:27 عصر
var regularx64View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
var clsidKey = regularx64View.OpenSubKey(@"SOFTWARE\Classes\CLSID\", RegistryKeyPermissionCheck.ReadSubTree);


کلاس RegistryKey متد OpenBaseKey نداره OpenRemoteBaseKey داره منظور همونه؟
RegistryView هم توی فضای نام Microsoft.Win32 نیست لطفا فضای نامشو بفرمایید

ronix3
چهارشنبه 12 خرداد 1395, 18:40 عصر
var regularx64View = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
var clsidKey = regularx64View.OpenSubKey(@"SOFTWARE\Classes\CLSID\", RegistryKeyPermissionCheck.ReadSubTree);


چون فضای نام ها رو پیدا نکردم این پستو گذاشتم با بالا بردن نسخه ی فریم ورک مشکلم حل شد ممنون

ronix3
چهارشنبه 19 خرداد 1395, 21:12 عصر
کد های بالا از ویندوز ۱۰ و نسخه ۶۴ بیتش کار می کنه https://msdn.microsoft.com/en-us/library/microsoft.win32.registryview%28v=vs.110%29.aspx
من از ویندوز ۸.۱ ۳۲ بیت استفاده می کنم باز هم به کلید هایی که پرامیشن اون ها دسترسی کامل داده نشده ارور می ده

ژیار رحیمی
چهارشنبه 19 خرداد 1395, 21:38 عصر
بصورت زیر کدهاتو اصلاح کن ببین به نتیجه میرسی حتما ویژوال استودیو در مد run as administrator باشه تا مجوز های لازم رو داشته باشی.

var registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;
using (var hkcu = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, registryView))
{
var clsidKey = hkcu.OpenSubKey(@"SOFTWARE\Classes\CLSID",false);
if (clsidKey != null)
foreach (var Name in clsidKey.GetValueNames())
if (Name == "مقدار مورد نظر")
{
//نوشتن کدهای لازم
}
}

Felony
چهارشنبه 19 خرداد 1395, 23:12 عصر
کد های بالا از ویندوز ۱۰ و نسخه ۶۴ بیتش کار می کنه https://msdn.microsoft.com/en-us/library/microsoft.win32.registryview%28v=vs.110%29.aspx
من از ویندوز ۸.۱ ۳۲ بیت استفاده می کنم باز هم به کلید هایی که پرامیشن اون ها دسترسی کامل داده نشده ارور می ده
Version Information

Universal Windows Platform
Available since 10
.NET Framework
Available since 4.0

ربطی به ویندوز ۱۰ نداره - اون برای Universal هست ...

ronix3
پنج شنبه 20 خرداد 1395, 00:43 صبح
بصورت زیر کدهاتو اصلاح کن ببین به نتیجه میرسی حتما ویژوال استودیو در مد run as administrator باشه تا مجوز های لازم رو داشته باشی.

var registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;
using (var hkcu = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, registryView))
{
var clsidKey = hkcu.OpenSubKey(@"SOFTWARE\Classes\CLSID",false);
if (clsidKey != null)
foreach (var Name in clsidKey.GetValueNames())
if (Name == "مقدار مورد نظر")
{
//نوشتن کدهای لازم
}
}


برنامه run as adminstator اجرا می شه باز هم وقتی به اون کلید می رسه همون ارور Requested registry access is not allowed

private TreeNode GetCurrentUser(string KeyName, TreeNode Node)
{
var registryView = Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32;
using (var hkcu = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, registryView))
{
var r = hkcu.OpenSubKey(KeyName, false);
if (r!=null & r.SubKeyCount != 0)
{
string[] Key = r.GetSubKeyNames();
foreach (string K in Key)
{
TreeNode N = new TreeNode();
N.Text = K;
TreeNode e = new TreeNode();
e = GetCurrentUser(KeyName + "\\" + K, N);
Node.Nodes.Add(e);
}
}
}
return Node;
}

ronix3
پنج شنبه 20 خرداد 1395, 00:44 صبح
Version Information



Universal Windows Platform
Available since 10
.NET Framework
Available since 4.0

ربطی به ویندوز ۱۰ نداره - اون برای Universal هست ...


حق با شماست

ژیار رحیمی
یک شنبه 23 خرداد 1395, 03:22 صبح
یک user جدید از نوع Administrator در Windows بساز و با این user جدید Login شو و برنامه ت رو تست بزن.کدی که برات گذاشتم تست شده س.
http://www.codeproject.com/Articles/4808/All-you-wanted-to-know-about-the-Registry-with-C-P
https://msdn.microsoft.com/en-us/library/xthy8s8d(v=vs.110).aspx