PDA

View Full Version : دسترسی به شاخه HKEY_LOCAL_MACHINE رجیستری؟؟؟



ProWorld
جمعه 10 مرداد 1393, 15:20 عصر
دوستان سلام خسته نباشید
من زمانی که از کد زیر برای ویرایش رجیستری استفاده می کنم برنامه دچار خطا میشه لطفا راهنمایی کنید....

using Microsoft.Win32;

private void setRegKey(string value)
{
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\myProgram\MyKey", true);
regKey.SetValue("RKey", value,RegistryValueKind.String);
}



121863

erfan_urchin
جمعه 10 مرداد 1393, 18:26 عصر
احتمالا این زیر شاخه ای که نوشتی (@"SOFTWARE\myProgram\MyKey") وجود نداره
یا شایدم value ای که میدی وجود نداره
که دومیه احتمالش بیشتره

امیر مهرشاد
جمعه 10 مرداد 1393, 18:31 عصر
اگر برای تنظیمات چیزی میخوای اول شاخه و ساب اونو ایجاد کن بعد مقدار دهی کن احتمالا طبق فرمایش دوستمون اون شاخه رو پیدا نمیکنه

ProWorld
جمعه 10 مرداد 1393, 18:37 عصر
سلام erfan_urchin (http://barnamenevis.org/member.php?267050-erfan_urchin)
فکر نمی کنم همچین مشکلی باشه....
121866

ProWorld
جمعه 10 مرداد 1393, 18:42 عصر
اگر برای تنظیمات چیزی میخوای اول شاخه و ساب اونو ایجاد کن بعد مقدار دهی کن احتمالا طبق فرمایش دوستمون اون شاخه رو پیدا نمیکنه

زیر شاخه رو به صورت دستی ایجاد کردم....

121868

ProWorld
جمعه 10 مرداد 1393, 18:46 عصر
ممنون امیر مهرشاد (http://barnamenevis.org/member.php?238445-%D8%A7%D9%85%DB%8C%D8%B1-%D9%85%D9%87%D8%B1%D8%B4%D8%A7%D8%AF)
اما بازم جواب نداد....
121869

eiman_ghasemy
جمعه 10 مرداد 1393, 20:00 عصر
من هم با همین مشکل مواجهم لطفا اگر کسی اظلاعات بیشتر داره کمک کنه

ممنون

khokhan
جمعه 10 مرداد 1393, 21:19 عصر
ممنون امیر مهرشاد (http://barnamenevis.org/member.php?238445-%D8%A7%D9%85%DB%8C%D8%B1-%D9%85%D9%87%D8%B1%D8%B4%D8%A7%D8%AF)
اما بازم جواب نداد....

شما بایستی یه تغییراتی در کلاس program پروژه تون بدین تا موقع اجرا گرفتن با کاربری administrative ویندوز وارد برنامه بشین و قابلیت دستیابی به این شاخه از ریجستری رو داشته باشین

برای نیل به این هدف دستورات کلاس program پروژه تون رو به این شکل تغییر بدین


Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(fals e);
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurre nt();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identit y);
//Judge whether the currently logged in user.
if (principal.IsInRole(System.Security.Principal.Wind owsBuiltInRole.Administrator))
{
//If the administrator, is directly run
Application.Run(new Form1());
}
else
{
//Create a startup object
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.UseShellExecute = true;
startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.FileName = Application.ExecutablePath;
//Set the start action, make sure to run as Administrator
startInfo.Verb = "runas";
try
{
System.Diagnostics.Process.Start(startInfo);
}
catch
{
return;
}

Application.Exit();





}

}

nunegandom
جمعه 10 مرداد 1393, 21:33 عصر
Get

var obj = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Adobe\Dreamweaver\12\Installation").GetValue(@"InstallPath");
textBox1.Text = (obj as string);

Set

public static void Set2StartUp(string Name, string Path) {
Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Run", Name, Path);
}

nunegandom
جمعه 10 مرداد 1393, 21:36 عصر
برای اینکه برنامه run as admin باشه میتونید این کد رو توی Manifest اضافه کنید

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3">
<v3:security>
<v3:requestedPrivileges>
<v3:requestedExecutionLevel level="highestAvailable"/>
</v3:requestedPrivileges>
</v3:security>
</v3:trustInfo>
</assembly>

eiman_ghasemy
جمعه 10 مرداد 1393, 21:40 عصر
روی آیکن برنامه کلیک راست کنید Add--> New Item --> Application Manifest File
یه فایل جدید به نام app.manifest به پوشه برنامتون اضافه میشه
محتویات اون فایل رو به محتویات زیر تغییر بدید




<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app" />
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</asmv1:assembly>




در واقع خط <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> مهمترین قسمت این کده که بهتون اجازه میده برنامتون به صورت ادمین اجرا بشه. فراموش کردم این فایلی که ایجاد شده یه سری از تنظیمات برنامتون رو در خودش جا میده که میتونید توضیح بیشترش و جامعتر در مورد این فایل رو در اینجا (http://msdn.microsoft.com/en-us/library/aa374191%28v=vs.85%29.aspx)مشاهده کنید.

حالا راحت کدهای مربوت به ریجیستریتون رو در برنامتون بنویسید مثلا

RegistryKey rkey = Registry.LocalMachine.CreateSubKey("software\\eiman");

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

mo.jalilian
جمعه 10 مرداد 1393, 21:48 عصر
من تونستم توی حالت دولوپ جواب بگیرم ، اما روی IIS سرور هنوز نتونستم
تا اینجا پیش رفتم که گفتن ممکنه مشکل به خاطر 32و 64 بیتی باشه که اون رو هم تغییر دادم نشد!