HomeWork_10 تمرين تطبيقي
#3
السلام عليكم و رحمة الله
إقتباس :لم اجده !

هذه هي الأوامر التي تحتوي على الخطأ العمدي :

PHP كود :
function TMain.WriteReg(KeyRoot: HKEY; Key, Value, NewValue: string): Boolean;
var
  
Reg: TRegistry;
begin
  Result 
:= False;
  
Reg := TRegistry.Create;
  
Reg.RootKey := HKEY_LOCAL_MACHINE;
  if 
Reg.OpenKey(Key, True) then
  begin
    
if not (Reg.ReadString(Value) = NewValue) then
    begin
      Reg
.WriteString(Value, NewValue);
      
Result := True;
    
end;
  
end
  
else
  
begin
    Result 
:= False;
  
end;
  
Reg.CloseKey;
  
Reg.Free;
end;
 
function 
TMain.ReadReg(KeyRoot: HKEY; Key, Value: string): string;
var
  
Reg: TRegistry;
begin
  Reg 
:= TRegistry.Create;
  
Reg.RootKey := HKEY_LOCAL_MACHINE;
  if 
Reg.OpenKey(Key, False) then
    
if Reg.ValueExists(Value) then
    begin
      Result 
:= Reg.ReadString(Value);
    
end
    
else
    
begin
      Result 
:= 'Error: ' + Value + ' not found';
    
end;
  
Reg.CloseKey;
  
Reg.Free;
end; 

هذه طريقة الاستدعاء :
PHP كود :
ReportMmo.Lines.Add(ReadReg(HKEY_LOCAL_MACHINE, '\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon', 'Shell'));
 
WriteReg(HKEY_LOCAL_MACHINE, '\SOFTWARE\D4A', 'File Name', Application.ExeName); 

لملاحظة الخطأ يتطلب فقط بعض التركيز البسيط :brow:

إقتباس :السبب فى ذلك ان بعد حذف البرنامج لاول مرة, لا يتم حذف القيم الموجودة فى السجل الخاصة بالاصدار و اسم الشركة, الخ..
الفكرة التي وضعتها اخي Goblin هي المعمول بها مع بعض الاضافات الخفيفة :

كود :
Reg.WriteString('UninstallString', Application.ExeName + ' [COLOR=red]Uninstall[/COLOR]');
اضافة Parameter ليتم التفاعل معه عند تشغيل التطبيق

كود :
if ParamStr([COLOR=red]1[/COLOR]) = '[COLOR=red]Uninstall[/COLOR]' then begin Action 01 = Stop and delete installed files... (Location 'Current folder' and 'System folder' and...) Action 02 = Delete all Registry values... Action 04 = .... Action 05 = .... Action 06 = .... Action 07 = Make and run 'Suicide.bat' to delete last file and empty folder or tell system to delete on reboot last file. end;
اوامر الفحص عن التشغيل، في حالة التقاط Parameter يتم قراءته و ان تطابق مع الشرط التطبيق يقوم بعمل اللازم...

هذه الأوامر تخص التقاط براميتر واحد فقط و تتجاهل البرامترات الأخرى، في حالة ارادة معالجة كل البرامترات الممررة على التطبيق نقوم بعمل حلقة تلتقط كل ما يمرر للتطبيق ليتم معالجته..

كود :
var x: integer; begin for x := 1 to [COLOR=red]ParamCount[/COLOR] do begin if paramStr([COLOR=red]x[/COLOR]) = 'Uninstall' then begin end; end;


يمكن ايضا استعمال ملف خارجي يحتوي على التعليمات التي يجب عملها للالغاء التنصيب بنجاح و دون اخطاء، هذه التعليمات تكون منظمة تحت اقسام واضحة او مشفرة...

إقتباس :عذرا اذا كانت الطريقة دون المستوي.
لا يا اخي Goblin حلك جيد Smile

---
هيا... هل من حلول... الأمور اصبحت اكثر وضوحا Smile


الردود في هذا الموضوع
HomeWork_10 تمرين تطبيقي - بواسطة STRELiTZIA - 28-10-2009, 04:58 PM
HomeWork_10 تمرين تطبيقي - بواسطة STRELiTZIA - 30-10-2009, 09:59 AM
HomeWork_10 تمرين تطبيقي - بواسطة Goblin - 30-10-2009, 12:54 PM
HomeWork_10 تمرين تطبيقي - بواسطة STRELiTZIA - 30-10-2009, 02:04 PM
HomeWork_10 تمرين تطبيقي - بواسطة TF6M - 02-11-2009, 02:12 PM
HomeWork_10 تمرين تطبيقي - بواسطة STRELiTZIA - 02-11-2009, 03:11 PM
HomeWork_10 تمرين تطبيقي - بواسطة TF6M - 02-11-2009, 03:17 PM
HomeWork_10 تمرين تطبيقي - بواسطة Goblin - 29-10-2009, 06:43 PM
HomeWork_10 تمرين تطبيقي - بواسطة Goblin - 02-11-2009, 08:46 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم