PDA

View Full Version : شناسایی ProgramFile در درایوهای دیگر



Graphical
چهارشنبه 29 خرداد 1387, 15:22 عصر
با عرض سلام و ادب حضور اساتید محترم
جستجوی زیادی انجام دادم اما به نتیجه نرسیده ام..
بنده تغییرات نرم افزاری ام را در قالب Patch ارائه میدهم.
مشتریانم به من گفته اند Patch عمل نمیکند یا به عبارتی نرم افزار تغییراتی نکرده است.
مشکل آنها این است که نرم افزار را هر جا دلشون خواسته نصب کردند...
من در Patch گفته ام که تعداد فایل موجود را به ProgramFiles و مقصد اصلی برنامه ام کپی کن اما Programfile در درایوی غیر از ویندوز ممکن است وجود داشته باشد
برای زمانی که در ProgramFile در SystemROot وجود نداشته باشد دستور جستجوی Programfile در درایوهای دیگر را داده ام، و پس از یافتن کپی انجام میشود
اما این جستجو و شناسایی فایلها به کندی انجام میشود .
آیا من این موارد را درست انجام داده ام؟

procedure TForm1.Button1Click(Sender: TObject);
var
Rec: TSearchRec;
begin
if FindFirst('C:\Program Files\test\' + 'test1.exe', faDirectory, Rec) = 0 then
CopyFile('test1.exe','C:\Program Files\test\',false);
end;
end.

Felony
چهارشنبه 29 خرداد 1387, 16:50 عصر
آقا این کار رو نکن من هم قبلا این کار رو میکردم به مشگل میخوری یه کار دیگه کن.
مثلا موقع نصب به برنامت بگو تویه کلید تو ریجستری محلی رو که کاربر برای نصب انتخاب کرده ذخیره کنه و بعدا که خاستی Patch بدی به Patch هات بگو اون کلید رو بخونن و آدرس رو ازش درارن و خودشونو اونجا کپی کنن.

Graphical
چهارشنبه 29 خرداد 1387, 16:56 عصر
سلام دوست عزیز
برنامه ام رو از قبل نصب شده دارم
الان فقط باید با یک Patch اینکار انجام بشه

Hsimple11
چهارشنبه 29 خرداد 1387, 17:18 عصر
با سلام.

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


function GetProgramFilesDir: string;
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVer sion', False);
Result := reg.ReadString('ProgramFilesDir');
finally
reg.Free;
end;
end;

خروجی این تابع مسیر مورد نظر خواهد بود :


procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := GetProgramFilesDir;
end;


در ضمن اضافه کردن یونیت Registry در لیست uses فرم خود را فراموش نکنید.
موفق باشید...

B-Vedadian
پنج شنبه 30 خرداد 1387, 09:33 صبح
برای مقصودی که داری بهتره محل نصب برنامتو تو رجیستری یا یه فایل ini ذخیره کنی. شاخه program files مربوط به windows فقط یکیه و اونم تو درایو نصب ویندوزه، وقتی کسی جایی غیر program files انتخاب میکنه نمیتونی از ویندوز جاشو بپرسی. (اگه از installer برای نصب برنامت استفاده کردی، خودش تو رجیستری یک شاخه به نام برنامت درست کرده و محل نصب رو نگه داشته.)

Graphical
دوشنبه 03 تیر 1387, 12:26 عصر
سلام
چطوری میتونم پروگرام فایل رو توی دستور کپی بنویسم

CopyFile(c:\test.exe, پروگرم فایل شناسایی شده test.exe, True);
مثلا مقصد که D:\program files شناسایی شده چطوری توی دستور کپی واردش کنم؟

delphi5
دوشنبه 03 تیر 1387, 12:41 عصر
از


dir1:=dir2+'\*.*';
dir2:='';
dir2:=('َآدرس');
ShellFileOperation(dir1,dir2,FO_copy);


یا



Action:=CopyFile(pchar(dir1),pchar(dir2),true);

استفاده کنید

Graphical
سه شنبه 04 تیر 1387, 10:59 صبح
ShellFileOperation(dir1,dir2,FO_copy);
با سلام و احترام،، بنده با کد بالا کپی رو انجام میدم اما اگه فایلی از قبل وجود داشته باشه پیغام اینکه آیا میخواهید جایگزین شود ظاهر میشود
بعد از انجام کپی میخوام فایل بدون اینکه سئوالی پرسیده بشه کپی انجام بشه و دیگه سئوالی نپرسه