نمایش نتایج 1 تا 16 از 16

نام تاپیک: نصب نسخه حدید برنامه روی ماشین کاربران

  1. #1
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    Question نصب نسخه حدید برنامه روی ماشین کاربران

    با سلام
    من نسخه جدید برنامه را در دیتا بیس برنامه ثبت میکنم. سپس برنامه با مقایسه تاریخ ورزن قبلی برنامه با ورژن جدید درخواست نصب برنامه جدید را از کاربر مینماید. کاربر هم با فشردن دکمه نصب کد پیوست اجرا شده و از برنامه خارج میشود. و دوباره ویرایش نصب شده جدید را اجرا مینماید. تا اینجا مشکلی نیست. ولی بعضا کاربران نسخه قدیم برنامه که حالا با کد زیر نامش به OLD.exe را اجرا مینمایند. تصمیم گرفتم به جای تغییر نام کلا فایل اجرایی را حذف و نسخه جدید را نصب نمایم. اما با توجه در حال اجرا بودن برنامه قادر به حذف نمیباشم. پیشنهاد شما برای این معضل چیست؟ متشکرم

    Dir:=ExtractFilePath(Application.ExeName);
    if FileExists(Dir+'.\old.exe') then DeleteFile(Dir+'.\old.exe') ;
    MoveFile(PChar(Dir+'.\Refah.exe'), PChar(Dir+'.\old.exe'));
    qryVerson.Open;
    qryVersonNewVersion.SaveToFile(Dir+'.\Refah.exe');

  2. #2
    کاربر دائمی آواتار hamid-nic
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    اصفهان
    پست
    813

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    یکی از روش ها استفاده از Batch File است .

  3. #3
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    نقل قول نوشته شده توسط hamid-nic مشاهده تاپیک
    یکی از روش ها استفاده از Batch File است .
    با تشکر از پاسختان
    خودم هم به این فکر کرده بودم. ولی آیا راه دیگری برای این مسئله نیست؟

  4. #4

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    میشه با تریک هایی مثل استفاده MoveFile فایل رو منتقل کرد تا بعد از ریست شدن تغییرات اعمال بشه ولی خوب داستان های خاص خودش رو داره و برای برنامه های معمول کاربرد خاصی نداره. راهکار معمول این هست که یه برنامه updater میسازن که تو Temp استخراج میشه و کارش این هست که نسخه اصلی برنامه رو میبنده ، برنامه رو آپدیت میکنه و دوباره اجراش میکنه و برنامه هم بعد از اجرا چک میکنه اگر فایل updater تو temp بود حذفش میکنه .

  5. #5
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    با تشکر از پاسختان
    میشه یک نمونه ارائه بدید. متشکرم

  6. #6
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    نقل قول نوشته شده توسط khoshblagh مشاهده تاپیک
    با سلام
    من نسخه جدید برنامه را در دیتا بیس برنامه ثبت میکنم. سپس برنامه با مقایسه تاریخ ورزن قبلی برنامه با ورژن جدید درخواست نصب برنامه جدید را از کاربر مینماید. کاربر هم با فشردن دکمه نصب کد پیوست اجرا شده و از برنامه خارج میشود. و دوباره ویرایش نصب شده جدید را اجرا مینماید. تا اینجا مشکلی نیست. ولی بعضا کاربران نسخه قدیم برنامه که حالا با کد زیر نامش به OLD.exe را اجرا مینمایند. تصمیم گرفتم به جای تغییر نام کلا فایل اجرایی را حذف و نسخه جدید را نصب نمایم. اما با توجه در حال اجرا بودن برنامه قادر به حذف نمیباشم. پیشنهاد شما برای این معضل چیست؟ متشکرم

    Dir:=ExtractFilePath(Application.ExeName);
    if FileExists(Dir+'.\old.exe') then DeleteFile(Dir+'.\old.exe') ;
    MoveFile(PChar(Dir+'.\Refah.exe'), PChar(Dir+'.\old.exe'));
    qryVerson.Open;
    qryVersonNewVersion.SaveToFile(Dir+'.\Refah.exe');
    سلام

    میتونید در زمان اجرای برنامه چک کنید اگر فایلی با نام Old.EXE در کنار برنامه وجود داره، پاکش کنه.

    برای فرآیند آپدیت هم بدین صورت عمل کنید که:
    1- فایل اجرایی برنامه رو تغییر نام بدید مثلا از App.exe به Old.Exe
    2-نسخه جدید رو دانلود کرده و در کنار فایل اجرایی تغییر نام داده شده بزارید.(با نام App.exe)
    3- دستور Application.Terminate رو صادر کنید
    4-بعد از دستور بالا، دستور اجرای برنامه رو بدید

    WinExec(PAnsiChar(AnsiString(ParamStr(0))), SW_SHOW);


    علی رغم اینکه دستور Terminate داده شده، برنامه خط بعدی رو هم اجرا خواهد کرد، لذا بعد از بسته شدن برنامه، مجددا برنامه اجرا میشود و چون بالاتر دستور حذف Old.EXE رو به شروع برنامه اضافه کردیم، لذا دیگه فایل اجرایی قدیمی وجود نخواهد داشت.

    موفق باشیم

  7. #7
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    نقل قول نوشته شده توسط hp1361 مشاهده تاپیک
    سلام

    میتونید در زمان اجرای برنامه چک کنید اگر فایلی با نام Old.EXE در کنار برنامه وجود داره، پاکش کنه.

    برای فرآیند آپدیت هم بدین صورت عمل کنید که:
    1- فایل اجرایی برنامه رو تغییر نام بدید مثلا از App.exe به Old.Exe
    2-نسخه جدید رو دانلود کرده و در کنار فایل اجرایی تغییر نام داده شده بزارید.(با نام App.exe)
    3- دستور Application.Terminate رو صادر کنید
    4-بعد از دستور بالا، دستور اجرای برنامه رو بدید

    WinExec(PAnsiChar(AnsiString(ParamStr(0))), SW_SHOW);


    علی رغم اینکه دستور Terminate داده شده، برنامه خط بعدی رو هم اجرا خواهد کرد، لذا بعد از بسته شدن برنامه، مجددا برنامه اجرا میشود و چون بالاتر دستور حذف Old.EXE رو به شروع برنامه اضافه کردیم، لذا دیگه فایل اجرایی قدیمی وجود نخواهد داشت.

    موفق باشیم
    باسلام و تشکر از پاسختان
    من فرمایش شما را به شکل زیر اجرا کردم ولی متاسفانه برنامه مجدد اجرا نشد. البته من از XE4 و ویندوز سون استفاده میکنم و به نظرم خط آخر مشکل دارد. در حقیقت فایل old.exe حذف میشود و همچنین فایل جدید هم در فولدر برنامه قرار میگیرد ولی خود برنامه مجددا احرا نمیشود.
    لطفا راهنمایی بفرمائید. متشکرم

    MoveFile(PChar(Dir+'.\SandoghWam.exe'), PChar(Dir+'.\old.exe'));
    qryVerson.Open;
    qryVersonNewVersion.SaveToFile(Dir+'.\SandoghWam.e xe');
    EnableWindow(FindWindowEx(FindWindow('Shell_TrayWn d',nil),0,'Button',nil),true);
    application.Terminate ;
    WinExec(PAnsiChar(AnsiString(ParamStr(0))), SW_SHOW);

    آخرین ویرایش به وسیله khoshblagh : چهارشنبه 29 دی 1395 در 00:48 صبح

  8. #8
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    سلام

    شما همچین چیزی باید بنویسید

    حذف فایل های پیشین در زمان اجرای برنامه:


    procedure TForm1.FormCreate(Sender: TObject);
    begin
    // ParamStr(0) : returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).
    // ExtractFilePath(ParamStr(0)) : Returns the drive and directory portions of a file name.

    DeleteFile(ParamStr(0) + '.old');
    end;


    آپدیت برنامه با کلیک بر روی دکمه آپدیت


    procedure TForm1.btn_UpdateClick(Sender: TObject);
    begin
    RenameFile(ParamStr(0), ParamStr(0) + '.old');
    qryVersonNewVersion.SaveToFile(ExtractFilePath(Par amStr(0)) + 'SandoghWam.exe');
    Application.ProcessMessages;
    WinExec(PAnsiChar(AnsiString(ParamStr(0))), SW_SHOW);
    end;


    به انتهای فایل اگزه قبلی عنوان Old اضافه شده و سپس اگزه جدید اجرا میشود

    البته موارد کنترلی چون انجام صحیح ذخیره ورژن جدید بر روی سیستم هم فراموش نشود

    موفق باشیم
    آخرین ویرایش به وسیله hp1361 : چهارشنبه 29 دی 1395 در 09:45 صبح

  9. #9
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    با سلام خدمت
    من طبق فرمایش شما عمل کردم.
    با کنترل مراحل موارد روبرو بدرستی انجام میشود: 1 - حدف فایل قدیم 2- تغییر نام برنامه به همان نام و با پسوند old و 3- واکشی نسخه جدید از بانک اطلاعاتی به فولدر برنامه
    ولی با این وجود قسمت اصلی یعنی باز شدن برنامه انجام نمیگیرد. پس ناچار با زدن دکمه انصراف همان نسخه قدیمی نمایش داده میشود.

    در موقع ورود به برنامه:
    ParamStr(0);
    ExtractFilePath(ParamStr(0));
    DeleteFile(ParamStr(0) + '.old');
    و در دکمه بروزآوری:
    RenameFile(ParamStr(0), ParamStr(0) + '.old');
    qryVersonNewVersion.SaveToFile(ExtractFilePath(Par amStr(0)) + 'SandoghWam.exe');
    Application.ProcessMessages;
    WinExec(PAnsiChar(AnsiString(ParamStr(0))), SW_SHOW);


  10. #10
    کاربر دائمی آواتار hamid-nic
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    اصفهان
    پست
    813

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    برنامه ای که به عنوان برنامه آپدیت شده هست باید با اسم new.exe در کنار exe قبلی قرار بگیره و به جای NameOfProgram.exe هم نام درست برنامه خودتون را وارد کنید . تست کنید و نتیجه را بگید .

    var
    sl: TStringList;
    begin
    sl := TStringList.Create;
    try
    sl.Append(':Repeat');
    sl.Append('del "' + Application.ExeName + '"');
    sl.Append('if exist "' + ExtractFileName(Application.ExeName) +
    '" goto Repeat');
    sl.Append('Ren "'+ExtractFilePath(Application.ExeName)+'new.exe"' +' "NameOfProgram.exe"');
    sl.Append('start "" "' + Application.ExeName +'"');
    sl.Append('del "' + ExtractBackDir(Application.ExeName) + '\Del.bat"');
    sl.SaveToFile(ExtractBackDir(Application.ExeName) + '\Del.bat');

    ShellExecute(Handle, 'open', pchar(ExtractBackDir(Application.ExeName) + '\Del.bat'), '', '', 7);
    Application.Terminate;
    finally
    sl.Free;
    end;



    تابع ExtractBackDir :

    function ExtractBackDir(Path: string): string;
    begin
    Result := ExcludeTrailingPathDelimiter
    (Copy(Path, 1, LastDelimiter('\', ExtractFileDir(Application.ExeName))));
    end;

  11. #11
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    با سلام و تشکر از پیگیری جهت رفع مشکل
    احتراما با اجرای این کد فایل برنامه حذف میشود . و در ادامه پیام عدم پیدا نمودن همان فایل در مسیر فولدر برنامه نمایش داده میشود. ضمنا من در این کد استخراج فایل برنامه از دیتا بیس را نمی بینم.
    procedure TfrmUpdateVersion.btn2Click(Sender: TObject);
    var
    sl: TStringList;
    begin
    sl := TStringList.Create;
    try
    sl.Append(':Repeat');
    sl.Append('del "' + Application.ExeName + '"');
    sl.Append('if exist "' + ExtractFileName(Application.ExeName)+'" goto Repeat');
    sl.Append('Ren "'+ExtractFilePath(Application.ExeName)+'new.exe"' +'"SandoghWam.exe"');
    sl.Append('start "" "' + Application.ExeName +'"');
    sl.Append('del "' + ExtractBackDir(Application.ExeName)+ '\Del.bat"');
    sl.SaveToFile(ExtractBackDir(Application.ExeName)+ '\Del.bat');
    ShellExecute(Handle, 'open', pchar(ExtractBackDir(Application.ExeName) + '\Del.bat'), '', '', 7);
    Application.Terminate;
    finally
    sl.Free;
    end;
    end;

    ضمنا این کد هم ظاهرا مورد نیاز نمی باشد.
    در موقع ورود به برنامه:
    ParamStr(0);
    ExtractFilePath(ParamStr(0));
    DeleteFile(ParamStr(0) + '.old');

  12. #12
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    نقل قول نوشته شده توسط khoshblagh مشاهده تاپیک
    با سلام و تشکر از پیگیری جهت رفع مشکل
    احتراما با اجرای این کد فایل برنامه حذف میشود . و در ادامه پیام عدم پیدا نمودن همان فایل در مسیر فولدر برنامه نمایش داده میشود. ضمنا من در این کد استخراج فایل برنامه از دیتا بیس را نمی بینم.

    ضمنا این کد هم ظاهرا مورد نیاز نمی باشد.
    در موقع ورود به برنامه:
    سلام

    من جسارتا دستورات زیر رو بصورت کامنت برای شما گذاشتم که بدونید چه کاری داره انجام میده(راهنمای خود دلفیه)


    // ParamStr(0) : returns the path and file name of the executing program (for example, C:\TEST\MYPROG.EXE).

    // ExtractFilePath(ParamStr(0)) : Returns the drive and directory portions of a file name.


    روی سیستم چک کردم. دستور WinExec نسخه جدید رو اجرا میکنه اما فایل قبلی رو پاک نمیکنه!(البته در صورت اجرای مجدد برنامه کدحذف اجرا میشه، اما چرا دفعه اول اجرا نمیشه رو نمیدونم(احتمال بر میگرده به تابع WinExec)

    دستور ShellExecute رو تست کردم و بدرستی کار کرد.


    ShellExecute(Handle, 'open', PWideChar(ParamStr(0)), '', '', SW_SHOW);


    یه نمونه برنامه رو براتون آپلود میکنم که خودتونم روی سیستم چک کنید
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله hp1361 : شنبه 02 بهمن 1395 در 07:58 صبح

  13. #13
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    با سلام
    جسارتا در نمونه ارائه شده فقط یک خط جهت حذف نسخه قدیم برنامه موجود است که من در برنامه خودم طبق پست شماره 11 استفاده نمودم. در صورت امکان نمونه را بررسی بفرمائید. متشکرم

  14. #14
    کاربر دائمی آواتار hamid-nic
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    اصفهان
    پست
    813

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    هم راه حل آقای پاکدل و هم راه حلی که بالا گذاشتم جواب میده
    نیاز به مطالعه و بررسی داره
    در ضمن قرار نیست از دیتابیس فایل بروز رسانی را بگیره !

  15. #15
    کاربر دائمی
    تاریخ عضویت
    دی 1387
    محل زندگی
    اهواز
    پست
    924

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    نقل قول نوشته شده توسط hamid-nic مشاهده تاپیک
    هم راه حل آقای پاکدل و هم راه حلی که بالا گذاشتم جواب میده
    نیاز به مطالعه و بررسی داره
    در ضمن قرار نیست از دیتابیس فایل بروز رسانی را بگیره !
    باسلام
    روش برنامه های من جهت بروزآوری اینطوره(قطعا راههای دیگری هست که من نمیدانم) که نسخه جدید برنامه را در یک فیلد از یک جدول قرار میدهم و در فیلد دیگری تاریخ این نسخه که در حقیقت همان شماره ویرایش جدید برنامه هست هم ثبت میکنم. حالا هر کاربر به محض اجرای برنامه، بخشی از کدهای برنامه به آن جدول مراچعه (طبق پست شماره یک) و تاریخ نسخه فعلی برنامه را با آن تاریخ مقایسه و اگر مغایر بود با باز شدن فرم دیگر از کاربر میخواهد نسبت به بروزآوری برنامه اقدام نماید. در صورت فشردن دکمه بروزآوری نسخه جدید از برنامه از آن جدول در کنار برنامه قرار میگیرد. البته قبل از آن نسبت به تغییر نام برنامه فعلی به Old.exe اقدام میشود. سپس در ادامه کار برنامه خاتمه میبابد. حال کاربر میبایست نسبت به اجرای مجدد برنامه اقدام نماید.مشکل وقتی پیش می آید که اشتباها کاربر همان نسخه Old.exe را اجرا نموده و پروسه تکرار میشود. البته به کاربران گوشزد میشود که به محض بروزآوری و قبل از اجرای مجدد برنامه نسبت به حذف Old.exe اقدام نمایند. ولی در عمل بعضی از کاربران فراموش کرده و وارد فرایند دوباره کاری میشوند. پس با این روش نیاز به مراجعه دیتابیس جهت اخذ نسخه جدید برنامه میباشد.
    در همین جا از زحمات جنابعالی و به خصوص جناب آقای پاکدل که مصرانه پیگر حل این مسئله می باشند کمال تشکر را دارم.

  16. #16
    کاربر دائمی آواتار hp1361
    تاریخ عضویت
    دی 1384
    محل زندگی
    تهران
    پست
    750

    نقل قول: نصب نسخه حدید برنامه روی ماشین کاربران

    نقل قول نوشته شده توسط khoshblagh مشاهده تاپیک
    باسلام
    روش برنامه های من جهت بروزآوری اینطوره(قطعا راههای دیگری هست که من نمیدانم) که نسخه جدید برنامه را در یک فیلد از یک جدول قرار میدهم و در فیلد دیگری تاریخ این نسخه که در حقیقت همان شماره ویرایش جدید برنامه هست هم ثبت میکنم. حالا هر کاربر به محض اجرای برنامه، بخشی از کدهای برنامه به آن جدول مراچعه (طبق پست شماره یک) و تاریخ نسخه فعلی برنامه را با آن تاریخ مقایسه و اگر مغایر بود با باز شدن فرم دیگر از کاربر میخواهد نسبت به بروزآوری برنامه اقدام نماید. در صورت فشردن دکمه بروزآوری نسخه جدید از برنامه از آن جدول در کنار برنامه قرار میگیرد. البته قبل از آن نسبت به تغییر نام برنامه فعلی به Old.exe اقدام میشود. سپس در ادامه کار برنامه خاتمه میبابد. حال کاربر میبایست نسبت به اجرای مجدد برنامه اقدام نماید.مشکل وقتی پیش می آید که اشتباها کاربر همان نسخه Old.exe را اجرا نموده و پروسه تکرار میشود. البته به کاربران گوشزد میشود که به محض بروزآوری و قبل از اجرای مجدد برنامه نسبت به حذف Old.exe اقدام نمایند. ولی در عمل بعضی از کاربران فراموش کرده و وارد فرایند دوباره کاری میشوند. پس با این روش نیاز به مراجعه دیتابیس جهت اخذ نسخه جدید برنامه میباشد.
    در همین جا از زحمات جنابعالی و به خصوص جناب آقای پاکدل که مصرانه پیگر حل این مسئله می باشند کمال تشکر را دارم.
    سلام مجدد

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

    بطور کلی قاعدتا فرآیند به این شکل خواهد بود

    1- بررسی وجود نسخه جدید(حالا میتونه خودش خودکار چک بشه و یا کاربر بر روی دکمه یا منویی چیزی کلیک کنه)
    2-دریافت نسخه جدیدو ذخیره آن در سیستم کاربر
    3-حذف نسخه قدیم
    4-اجرای نسخه جدید

    مورد اول و دوم که کاملا دست شما بازه و هرجور مایلید میتونید پیاده سازی کنید.
    برای مورد سوم، چون بعد از دریافت نسخه جدید و اجرای آن، حتما رویداد OnCreate اجرا خواهد شد، لذا عملیات حذف رو در این رویداد اجرا می کنیم تا مطمئن بشیم فایل قبلی حذف شده. دلیل اینکه اینکار رو در بعد از مورد دوم انجام ندادیم(یعنی در ادامه کدهای دریافت نسخه جدید) این است که هنوز پروسه مربوط به فایل اگزه در حال اجراست و سیستم اجازه حذفش رو نخواهد داد.

    برای مورد چهارم هم که دو تابع ShellExecute و CreateProccess پیشنهاد میشه که در کدها من ShellExecute روقرار دادم.

    موفق باشیم

تاپیک های مشابه

  1. نصب و اجرای برنامه روی گوشی
    نوشته شده توسط Mrs.Net در بخش Android Studio
    پاسخ: 1
    آخرین پست: یک شنبه 17 شهریور 1392, 22:29 عصر
  2. حرفه ای: مشکل وجود اسم پايگاه داده قديمي موقع نصب نسخه جديد برنامه
    نوشته شده توسط Itist82 در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 02 بهمن 1390, 15:31 عصر
  3. تشخيص نصب بودن يك برنامه روي سيستم كاربر
    نوشته شده توسط ahesteh در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 0
    آخرین پست: سه شنبه 14 مهر 1388, 07:30 صبح
  4. تشخيص نصب بودن يك برنامه روي سيستم كاربر
    نوشته شده توسط ahesteh در بخش برنامه نویسی مبتنی بر Microsoft .Net Framework
    پاسخ: 0
    آخرین پست: سه شنبه 14 مهر 1388, 07:28 صبح
  5. نصب نسخه جدید برنامه از طریق شبکه
    نوشته شده توسط mahdi939 در بخش برنامه نویسی در Delphi
    پاسخ: 3
    آخرین پست: دوشنبه 09 آبان 1384, 09:42 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •