PDA

View Full Version : آپدیت نرم افزار



Saeid59_m
چهارشنبه 25 مهر 1386, 10:07 صبح
سلام
من می خواهم برای برنامه هایی که می نویسم آپدیت قرار بدم .

مشکل اینجاست که وقتی یه فایل exe‌ رو می خواهیم جای فایل exe اصلی برنامه کپی کنم . به دلیل باز بودن فایل exe اصلی امکان کپی فایل جدید وجود نداره .

لطفا راهنمائی کنید
ممنون

manvaputra
چهارشنبه 25 مهر 1386, 10:42 صبح
سلام دوست عزیز یه سری روش ها اینجا توضیح داده شده:

http://blog.marcocantu.com/blog/auto_updating_programs.html

SYNDROME
چهارشنبه 25 مهر 1386, 13:51 عصر
با سلام
می توانید کل Exe را به یک روش ساده روژن بندی کنید.
سپس یک برنامه Main داشته باشید.
حالا برنامه Main که اجرا می شود آخرین ورژن نرم افزار را فراخوانی کند.
موفق باشید

Bahmany
شنبه 28 مهر 1386, 11:57 صبح
شما می تونید فرم های مختلف رو در فایل های مختلف داشته باشید
مثلا Form1 را در فایل first_fm.dll قرار دهید و در سورس اصلی برای نمایش آن را از Dll بسازید و همینطور بقیه فرم ها
من خودم از این روش برای Update استفاده می کردم که هر وقت خواستم هر فرمی رو که می خواستم Update می کردم

AlirezaBahredar
شنبه 28 مهر 1386, 13:49 عصر
شما می تونید فرم های مختلف رو در فایل های مختلف داشته باشید
مثلا Form1 را در فایل first_fm.dll قرار دهید و در سورس اصلی برای نمایش آن را از Dll بسازید و همینطور بقیه فرم ها
من خودم از این روش برای Update استفاده می کردم که هر وقت خواستم هر فرمی رو که می خواستم Update می کردم
دوست عزیز میشه لطف کنی یک نمونه کوچولو اینجا بذاری؟
فکر کنم همه به این روشی که شما گفتی خیلی احتیاج داشته باشند....

Bahmany
یک شنبه 29 مهر 1386, 08:28 صبح
1- یک فرم طراحی کن و آن را با نام form1 و نام سورس را Unit1.pas در یک دایرکتوری مشخص ذخیره کن
2- یک پروژه DLL ایجاد و نام آنرا DLL_frm بگذار و در همان پوشه ای که Unit1.pas را ذخیره کرده ای ذخیره کن و کد زیر را در آن وارد کن :


library DLL_frm;

{ Important note about DLL memory management: ShareMem must be the
first unit in your library's USES clause AND your project's (select
Project-View Source) USES clause if your DLL exports any procedures or
functions that pass strings as parameters or function results. This
applies to all strings passed to and from your DLL--even those that
are nested in records and classes. ShareMem is the interface unit to
the BORLNDMM.DLL shared memory manager, which must be deployed along
with your DLL. To avoid using BORLNDMM.DLL, pass string information
using PChar or ShortString parameters. }

uses
SysUtils,
Classes,Unit1;

{$R *.res}

procedure showfrm;stdcall;
var frm:TForm1;
begin

frm:=TForm1.Create(nil);

frm.Show;

end;

exports
showfrm;

begin
end.



3- بعد برنامه ایت را Build کن
4- سپس همه چیز را ببند و یک پروژه جدید (Application) را باز کن و یک دکمه روی فرم قرار بده و کدهای زیر را وارد کن :


unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
procedure showfrm;stdcall;external 'DLL_frm';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
showfrm;
end;

end.




اگه مشکلی برخوردی همینجا مطرح کن
Bye

Valadi
یک شنبه 29 مهر 1386, 09:47 صبح
جناب Bahmany
با تشکر از آین آموزش
من سوالی دارم
شما 3 تا فرم طراحی کردید
در فرم اول یک Label داریم و در فرم سوم یک Edit حالا می خواهیم از فرم سوم (که edit دارد) متن edit را ببریم در فرم اول چکار باید کرد ؟
فرم اول بصورت یک Dll می شود نحوه ارتباط با فرم سوم نمی دونم
با تشکر

Valadi
یک شنبه 29 مهر 1386, 18:28 عصر
جناب Bahmany
نیستی ما همچنان منتظریم جواب سوال ما را بدهی

Bahmany
دوشنبه 30 مهر 1386, 09:08 صبح
نحوه ارتباط با فرمی که بوسیله DLL باز میشه مثل اینی می مونه که داری با یک فرمی از برنامه دیگه کاری می کنی و با توجه به نوع کلاس فورمت (TForm) و نام اون باید اول پیدایش کنی :

FindWindows(nil,caption name);
و بعد از بدست آوردن هندل پنجره ای که بوسیله DLL باز شده به آن پیغام ارسال کنی :

SendMessage


البته الان دلفی ندارم تا سورس برات بزارم ولی لینک زیر می تونه کمکت کنه :
http://www.link-rank.com/dll.htm

Saeid59_m
چهارشنبه 02 آبان 1386, 08:46 صبح
اما من نرم افزارهایی که تا به حال دیدم این همه DLL نداشتند . پس اونا چیکار می کنن .
در ضمن توی این روش اگه بهر دلیل یکی از DLL‌ ها حذف شود . برنامه نابود می شود .

vcldeveloper
چهارشنبه 02 آبان 1386, 09:28 صبح
اما من نرم افزارهایی که تا به حال دیدم این همه DLL نداشتند . پس اونا چیکار می کنن .
در ضمن توی این روش اگه بهر دلیل یکی از DLL‌ ها حذف شود . برنامه نابود می شود .
الان فکر می کنید ویندوز شما چطور بخش های مختلف خودش رو آپدیت میکنه؟! یک فایل 600 مگابایتی برای هر آپدیت استفاده میکنه؟!
خیلی از DLLها در پوشه مربوط به برنامه نگه داری نمیشند، بلکه در پوشه های سیستمی کپی میشند.
اگر حذف یک DLL را مساوی با از کار افتادن برنامه می دونید، حذف فایل EXE برنامه هم همین نتیجه را دارد.

برای کسب انعطاف پذیری بیشتر در دلفی می تونید بجای DLL ها از Package ها هم استفاده کنید. در موردشون قبلا بحث شده.

Saeid59_m
چهارشنبه 02 آبان 1386, 10:23 صبح
در مورد package ها هرچی سرچ کردم همش در مورد کامپوننت ها بود و یا بعضی از دوستان بعد از ایجاد Pakage‌مشکلاتشون رو مطرح کرده بودند ولی طریقه ساخت و استفاده اونا رو پیدا نکردم .

اگه ممکنه بیشتر راهنمائی کنید یا یه لینکی چیزی معرفی کنید
ممنون

vcldeveloper
چهارشنبه 02 آبان 1386, 13:06 عصر
اگه ممکنه بیشتر راهنمائی کنید یا یه لینکی چیزی معرفی کنید
برای Package ها:
http://barnamenevis.org/forum/showthread.php?p=73936
http://barnamenevis.org/forum/showthread.php?t=21340

در بخش مقالات سایت CodeGear هم مطالب بسیار خوبی پیدا خواهید کرد.

A.Nemati
چهارشنبه 02 آبان 1386, 14:38 عصر
بستگی به این داره که در چه محدوده‌ای می‌خواهی برنامه خودتو Update کنی.
در هر صورت استفاده از bplها و dllها کار اصولی و درستیه فقط به این نکته توجه داشته باش که در برنامه‌های تحت شبکه (Client/Server) این کار به راحتی انجام نمی‌گیره، چون باید پای سیستم تک تک کاربرا بری و فایل‌هاتو جایگزین و update کنی. یک راه خوب، استفاده از یک برنامه کوچیک جانبیه که هربار اجرا می‌شه، نسخه برنامه اصلی (یا DLLها و BPLها) رو با فایل‌های موجود در محلی که به عنوان منبع به اون معرفی کردید(جایی در شبکه)، چک می‌کنه و اگه نسخه‌ها متفاوت باشن، فایلها رو از منبع بر‌می‌داره، جایگزین می‌کنه و بعد از اون، برنامه اصلی رو اجرا می‌کنه.