PDA

View Full Version : ایجاد کلید رجیستری در HKEY_LOCAL_MACHINE در ویندوز 8.1



hadisalahi2
شنبه 22 آذر 1393, 18:47 عصر
سلام
من میخوام توی اون روت که نوشتم کلید رجیستری ایجاد کنم
اما موقع اجرا پیغام خطا میده که نمیتونم به اینجا دسترسی پیدا کنم
اینم کدی که نوشتم




Procedure TMainForm.writeToReg(PAth, KeyName, KeyValue: string);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
reg.Access := KEY_WRITE;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.CreateKey('Software\Pascal\HakimAsrar');
reg.WriteString(KeyName,KeyValue);
reg.CloseKey;
Except
reg.Free;
end;


end;


در ضمن وقتی بدون مد admin اجرا میکنم خطای عم دسترسی میده
در صورتی که با خط زیر دسترسی رو تعریف کردم

reg.Access := KEY_WRITE;



وقتی در مد administrator اجرا میکنم برنامه رو ، خطا نمیده ، اما کلید هم نمیسازه
ممنون میشم راهنمایی کنید
یا حق

Mask
یک شنبه 23 آذر 1393, 10:26 صبح
ویندوزتون چند بیتیه؟

hadisalahi2
یک شنبه 23 آذر 1393, 15:25 عصر
64 بیتی حمزه جان

Mask
دوشنبه 24 آذر 1393, 23:20 عصر
یک کلید خاص رو بسازید و بعد با جستجوی رجیستری دنبالش بگردید تا متوجه بشد در ویندوزهای 32 و 64 بیتی علت این موضوع چیه.

hadisalahi2
سه شنبه 25 آذر 1393, 10:46 صبح
الان مشکل توی ساخت همون کلید هستش
چزوی کلید رو بسازم توی ویندوز 64 بیتی؟



تا متوجه بشد در ویندوزهای 32 و 64 بیتی علت این موضوع چیه.

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

Mask
چهارشنبه 26 آذر 1393, 00:11 صبح
الان مشکل توی ساخت همون کلید هستش
چزوی کلید رو بسازم توی ویندوز 64 بیتی؟
برادر کلید ساخته میشه ، اما نه در اون مسیری که فکر میکنید.
مثلا این مسیر رو ببینید:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr entVersion\Run1
وقتی در این مسیر کلیدی میسازید و مراجعه میکنید وجود ندارد.
چرا:
چون برنامه سازنده این کلید 32 بیتی هست، رجیستری این کلید رو در این مسیر میسازه:

[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ Windows\CurrentVersion\Run1]
امیدوارم متوجه موضوع شده باشید.

hadisalahi2
پنج شنبه 04 دی 1393, 17:07 عصر
حالا تکلیف توی ویندوزهای 32 بیتی چیه؟
باید هر مسیر رو جداگانه چک کنم؟

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

اگه جواب مثبته ، در اینصورت کار خیلی سخت میشه
چطوری مسیرها رو توی ویندوزهای مختلف تشخیص بدم؟

Mask
جمعه 05 دی 1393, 00:32 صبح
حالا تکلیف توی ویندوزهای 32 بیتی چیه؟
باید هر مسیر رو جداگانه چک کنم؟

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

اگه جواب مثبته ، در اینصورت کار خیلی سخت میشه
چطوری مسیرها رو توی ویندوزهای مختلف تشخیص بدم؟
اگه اصرار به ساخت کلید در مسیر مورد نظر دارید باید تابع ریدایرکشن ویندوز رو موقتا از کار بندازید ،عملیاتتون رو انجام بدید و دوباره تابع رو کال کنید.
دقت کنید که حتما حتما باید دوباره تابع ریدایرکشن رو فعال کنید، وگرنه کلیه عواقب با خودتون هست.
برای مثال :

var Form1: TForm1;
Var Wow64FsEnableRedirection: LongBool;
implementation


{$R *.dfm}


Function Wow64DisableWow64FsRedirection(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
External 'Kernel32.dll' Name 'Wow64DisableWow64FsRedirection';
Function Wow64EnableWow64FsRedirection(Wow64FsEnableRedirec tion: LongBool): LongBool; StdCall;
External 'Kernel32.dll' Name 'Wow64EnableWow64FsRedirection';


procedure TForm1.Button1Click(Sender: TObject);
Begin
If Wow64DisableWow64FsRedirection(Wow64FsEnableRedire ction) Then
Begin
CopyFile('c:\1.exe','c:\windows\system32\2.exe',fa lse);
Wow64EnableWow64FsRedirection(Wow64FsEnableRedirec tion);
End;
End;