PDA

View Full Version : مشکل در نوشتن در رجیستری



مهران رسا
دوشنبه 11 مرداد 1389, 16:55 عصر
سلام ؛
از ویندوز 7 استفاده میکنم و برنامه رو به صورت Run As Administrator اجرا میکنم ، با این حال با نوشتن کد های زیر ، هیچ تغییری در رجیستری اعمال نمیشه :



REG := TRegistry.Create(KEY_WRITE);
REG.RootKey := HKEY_LOCAL_MACHINE;
REG.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVer sion', true);
REG.WriteString('CommonFilesDir', 'Value')

کسی میدونه علت چیه ؟

AliReza Vafakhah
دوشنبه 11 مرداد 1389, 19:48 عصر
دوست عزیز من سورس را تست کردم و مشکلی نداشت ، اطلاعات در رجیستری ذخیره شد

مهران رسا
دوشنبه 11 مرداد 1389, 22:31 عصر
دوست عزیز من سورس را تست کردم و مشکلی نداشت ، اطلاعات در رجیستری ذخیره شد

ویندوزتون چیه ؟

vcldeveloper
سه شنبه 12 مرداد 1389, 00:42 صبح
کسی میدونه علت چیه ؟
علتش اینه که ویندوز 7 شما 64 بیتی هست، و برنامه شما 32 بیتی. در ویندوز های 64 بیتی، برنامه های 32 بیتی و 64 بیتی وقتی به بعضی مسیرهای خاص مثل همون مسیر مورد نظر شما در رجیستری دسترسی پیدا می کنند، ویندوز کپی های مختلفی از اون مسیر برای این دو نوع از برنامه ارائه میکنه. در واقع برنامه 32 بیتی شما تغییر مورد نظر خودش را در مسیر زیر اعمال میکنه:

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ Windows\CurrentVersion

البته از نظر برنامه شما مسیر همون

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion
هست، ولی وقتی با Regedit به اون مسیر برید، تغییر خودتان را آنجا نمی بینید.


در ضمن، این کد شما از نظر من مشکوک هست، چرا میخواید مسیر CommonFileDir ویندوز را در برنامه خودتون تغییر بدید؟!! یک برنامه عادی نیازی به تغییر این مقدار نداره، و تغییر در آن میتونه برای برنامه های مختلف در سیستم کاربر مشکل ایجاد کنه!

مهران رسا
سه شنبه 12 مرداد 1389, 06:13 صبح
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ Windows\CurrentVersion
ممنون از پاسختون . برای من در این مسیر هیچ کلیدی وجود نداره . اما حق با شماست ، ظاهراً کلیدها در جایی دیگه ذخیره میشند :


REG := TRegistry.Create();
try
REG.RootKey := HKEY_LOCAL_MACHINE;
REG.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVer sion', true);
REG.WriteString('CommonFilesDir', 'Value');
//
Res := REG.ReadString('CommonFilesDir');
ShowMessage(Res); //Result = 'Value'
finally
REG.Free;
end;




در ضمن، این کد شما از نظر من مشکوک هست، چرا میخواید مسیر CommonFileDir ویندوز را در برنامه خودتون تغییر بدید؟!! یک برنامه عادی نیازی به تغییر این مقدار نداره، و تغییر در آن میتونه برای برنامه های مختلف در سیستم کاربر مشکل ایجاد کنه!
کد بالا یک مثال بود بنده اصلاً قصد همچین جسارتی رو نداشتم :D