PDA

View Full Version : آپدیت کردن خودکار برنامه



tanha70
دوشنبه 18 خرداد 1394, 18:58 عصر
سلام

دوستان به صورت خلاصه میگم

اگر بخوایم یه امکانی در برنامه داشته باشیم که هربار با باز شدن برنامه چک بشه اگر نسخه جدید اومده باشه خودشو به صورت اتوماتیک آپدیت کنه به چه صورت میتونم پیاده سازیش کنم.
به صورت خلاصه بگین کافیه...


ممنون...

ebrahim.rayatparvar
دوشنبه 18 خرداد 1394, 19:28 عصر
سلام مهندس جان
خیلی خلاصه :
1 - http://www.codeproject.com/Articles/265751/Application-Auto-update-via-Online-Files-in-Csharp
2 - http://wyday.com/wybuild/help/automatic-updates/

Javad_raouf
دوشنبه 18 خرداد 1394, 19:35 عصر
در درجه اول مسلما یک host لازم دارید
یک پروژه WebSerivce ایجاد کنید و توش توابعی بزارید که برنامه با استفاده از اونا بفهمه نسخه جدید چیه و تفاوت نسخه جدید با نسخه ای که نصب داره چیه
بعد توی برنامه به وب سرویس متصل می شید و با استفاده توابع موجود بررسی می کنید که آیا آپدیت اومده یا نه و اگر اومده لینک دانلودش رو می گیرید
لینک دانلود معمولا شامل فایل exe نرم افزار و فایل های جدید(در صورت افزوده شدن فایل هایی مثل DLL و ...) است که به صورت یک فایل Zip آماده دانلود است
با دستورات دانلود این فایل ها رو دانلود کرده و جایگزینه فایل های برنامه می کنید
ولی مشکلی که هست اینه که برنامه تا وقتی بازه نمی تونه فایل خودشو جایگذاری کنه:متفکر:
برای این کار می تونید از یک برنامه کمکی دیگه که خودتون نوشتید استفاده کنید ولی خود من از فایل های با پسوند Bat استفاده کردم:چشمک:

خلاصه و کلیدی

sabz12
دوشنبه 18 خرداد 1394, 20:19 عصر
بحث جالب اگر برنامه تحت ويندوز باشه و برنامه را هم به مشتري داده باشيم و حالا كه به مرور زمان كامل ترش كرديم و بخواهيم يك فايل ابديت براش بنويسيم چكار ميشه كرد؟؟شايد هم بايد قبلش پيش بيني ابديت را مي كرديم؟؟؟:متفکر:

ebrahim.rayatparvar
دوشنبه 18 خرداد 1394, 20:33 عصر
سلام مهندس جان
موضوع همینه که از اول برنامه رو طوری طراحی کنیم که اگه ارتقا دادیم به راحتی آپدیت بشه و نیاز به نصب دوباره نرم افزار نباشه

Delphi7_love
سه شنبه 19 خرداد 1394, 07:23 صبح
.............

Javad_raouf
سه شنبه 19 خرداد 1394, 08:43 صبح
بحث جالب اگر برنامه تحت ويندوز باشه و برنامه را هم به مشتري داده باشيم و حالا كه به مرور زمان كامل ترش كرديم و بخواهيم يك فايل ابديت براش بنويسيم چكار ميشه كرد؟؟شايد هم بايد قبلش پيش بيني ابديت را مي كرديم؟؟؟:متفکر:


سلام مهندس جان
موضوع همینه که از اول برنامه رو طوری طراحی کنیم که اگه ارتقا دادیم به راحتی آپدیت بشه و نیاز به نصب دوباره نرم افزار نباشه
اگر منظور شما اینه که توی برنامه باید کدهایی رو جهت آپدیت از اول قرار بدیم تا بتونه نسخه جدید خودشو دانلود کنه و جایگذاری کنی فرمایشتون دقیقا صحیح است وگرنه وقتی کدی برای اپدیتش ننوشتیم مسلما نمی تونه خودشو آپدیت کنه
ولی اگر منظورتون اینه که یک جوری برنامه رو بنویسیم که نیازی نباشه فایل Exe اصلی جایگزین بشه این یکم هندیه:لبخند:
چون فقط برنامه هایی مثل آنتی ویروس که فقط نیاز به آپدیت دیتابیس دارن می تونن این کار رو بکنن ولی برنامه من و شما که هر روز یک چیز جدید به ذهنمون میرسه و کدش رو میخوایم عوض کنیم مجبوریم Exe رو هم جایگزین کنیم
البته ما هم می تونیم برنامه رو به بخش های مختلف تبدیل کنیم و هر DLL که تغییر دادیم فقط جایگزین کنیم که اینم یکم هندیه:افسرده:

h.gheidrlou
سه شنبه 11 خرداد 1395, 15:44 عصر
سلام دوستان دقیقا مشکل من همینه که من یه برنامه exeنوشتم روی سیستم های مختلف تحت ویندوز کار میکنه و هر بار که نسخه جدید میدم کاربران در شعب مختلف مجبورند فایل exeجدید را دانلود کنند و فایل قبلی را حذف کنند -برنامه من بدون دیتا بیس و dllهستش
لطفا راهنمایی کیند چه کدی بنویسم که هر وقت نسخه جدید میزارم به کاربر هشدار بده و با درج کلیدی روی نسخه قدیمی با زدن اون دکمه باعث بشه که برنامه بسته بشه و نسخه جدید جایگزین بشه

ronix3
سه شنبه 11 خرداد 1395, 18:29 عصر
می تونید هاست خریداری کنید یا مثله من بدون هزینه این کارو کنید :لبخند:
من یک وبلاگ ساختم و یه پیج به هر برنامه اختصاص دادم و هر وقت ورژن جدیدی می ساختم ورژن برنامه جدید و لینک دانلود برنامه (که روی آپلود سنتر های رایگان آپلود شده بود) رو به ورژن های قبلی تو ی پیج اضافه می کردم اینطوری کاربر می تونست به صورت دستی ورژن مورد نظر رو دانلود کنه یا برنامه خودکار ورژن خودش رو با ورژن های روی پیج مقایسه می کرد و جدیدترین ورژن رو در مسیری ک خودش بود دانلود می کرد

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

h.gheidrlou
سه شنبه 11 خرداد 1395, 21:17 عصر
دوست عزیز درخصوص قسمت اول صحبت شما درحال حاضر من همینکارو میکنم یعنی نسخه جدید که میزارم کاربر مقایسه میکنه اگه نسخه جدید بارگذاری شده بود که دانلود وجایگزین فایل قبلی میکنه و فایل قبی را پاک میکنه
ولی من مجهولاتم درخصوص قسمت دوم هستش که میخوام اتومات به محض تغییر ورژن با باز شده برنامه ، اگر نسخه جدید بارگذاری شده بود به کاربر اطلاع بده و با زدن کلید به روزرسانی ، فایل جدید اپلود و ازحالت زیپ خارج و جایگزین فایل جدید بشه
طفا راهنمایی کنید

Javad_raouf
چهارشنبه 12 خرداد 1395, 09:03 صبح
سلام
تشخیص نسخه جدید:
برای اینکه بفهمیم نسخه جدید اومده یا نه بهترین راه وب سرویس هست اگر نمی دونید وب سرویس چیه وب سرویس یک جورایی یک DLL اینترنتی هست یعنی یک سری توابع روی سرور اینترنتی خود دارید و از طریق برنامه اونا رو فراخونی می کنید و بهشون ورودی میدید و خروجی میگیرید.
باید یک تابع تعریف کنید که ورژن جاری نرم افزار رو بگیره و مثلا اگر نسخه جدیدی اومده لینک دانلودش رو بده
حالا اینکه چطوری وب سرویس بنویسید هم توی سایت مطالب زیاده فقط باید یک هاست و دامنه داشته باشید

دانلود فایل آپدیت:
برای دانلود فایل هم باید از System.Net.WebClient استفاده کنید که کار باهاش خیلی آسونه

System.Net.WebClient donwloader;


donwloader.DownloadFile("URL Of File In Net", "Address To Save In Local");

جایگزین فایل جدید با فایل های قدیمی برنامه:
برای این کار همونطور که یکی از دوستان گفتن می تونید از برنامه واسط استفاده کنید ولی من از فایل Bat استفاده کردم یعنی توی برنامم بعد از دانلود آپدیت یک فایل Bat تولید می کنم که کارش Extract کردن و جایگزین کرن فایل های جدید با فایل های قدیمی است و سپس برنامه رو می بندم و فایل Bat رو اجرا می کنم.

Javad_raouf
چهارشنبه 12 خرداد 1395, 09:07 صبح
اما اگر می خواین بدون هزینه هاست و دامنه این کار رو انجام بدید با یک کار غیر اصولی ولی کاربردی دیگه هم می تونید این کار رو بکنید

باید یک File Server رایگان پیدا کنید که برای دانلود فایل هاتون لینک مستقیم به شما بده
بعد کافی توی File Server دو تا فایل آپلود کنید
اولی آخرین نسخه نرم افزارتون
دومی یک فایل txt که داخلش فقط یک عدده که نشان دهنده آخرین نسخه منتشر شده از نرم افزار هست

حالا برنامتون هر دفعه که اجرا میشه فایل TXt رو دانلود می کنه و عدد داخلش رو با نسخه خودش مقایسه می کنه اگر عدد بزرگتر بود می فهمه که نسخه جدید اومده و فایل دوم رو دانلود می کنه

--------------------------------
هر چند این روش هم جواب میده ولی توی این روش نسبت به وب سرویس دست و بالتون خیلی بسته است.

mehdi0020
یک شنبه 09 آبان 1395, 11:42 صبح
سلام ممنون از توضیحات کاملتون
این راه که گفتید لازمش وجود یک فضا در نت و دسترسی کاربرا به اینترنت هستش
آیا راهی برای انجام این کار در شبکه محلی وجود داره؟
بعضی از کاربرای من دسترسی به اینترنت ندارند ولی یک فضا شیر در شبکه هست.

mehdi0020
یک شنبه 09 آبان 1395, 11:49 صبح
سلام
تشخیص نسخه جدید:
برای اینکه بفهمیم نسخه جدید اومده یا نه بهترین راه وب سرویس هست اگر نمی دونید وب سرویس چیه وب سرویس یک جورایی یک DLL اینترنتی هست یعنی یک سری توابع روی سرور اینترنتی خود دارید و از طریق برنامه اونا رو فراخونی می کنید و بهشون ورودی میدید و خروجی میگیرید.
باید یک تابع تعریف کنید که ورژن جاری نرم افزار رو بگیره و مثلا اگر نسخه جدیدی اومده لینک دانلودش رو بده
حالا اینکه چطوری وب سرویس بنویسید هم توی سایت مطالب زیاده فقط باید یک هاست و دامنه داشته باشید

دانلود فایل آپدیت:
برای دانلود فایل هم باید از System.Net.WebClient استفاده کنید که کار باهاش خیلی آسونه

System.Net.WebClient donwloader;


donwloader.DownloadFile("URL Of File In Net", "Address To Save In Local");

جایگزین فایل جدید با فایل های قدیمی برنامه:
برای این کار همونطور که یکی از دوستان گفتن می تونید از برنامه واسط استفاده کنید ولی من از فایل Bat استفاده کردم یعنی توی برنامم بعد از دانلود آپدیت یک فایل Bat تولید می کنم که کارش Extract کردن و جایگزین کرن فایل های جدید با فایل های قدیمی است و سپس برنامه رو می بندم و فایل Bat رو اجرا می کنم.

سلام ممنون از توضیحات کاملتون
این راه که گفتید لازمش وجود یک فضا در نت و دسترسی کاربرا به اینترنت هستش
آیا راهی برای انجام این کار در شبکه محلی وجود داره؟
بعضی از کاربرای من دسترسی به اینترنت ندارند ولی یک فضا شیر در شبکه هست.

Javad_raouf
یک شنبه 09 آبان 1395, 13:09 عصر
فرق نمی کنه
بستر رو باید فراهم کنید
هم وب سرویس رو میشه روی شبکه محلی پیاده سازی کرد
هم FTP و...

mehdi0020
یک شنبه 09 آبان 1395, 14:03 عصر
فرق نمی کنه
بستر رو باید فراهم کنید
هم وب سرویس رو میشه روی شبکه محلی پیاده سازی کرد
هم FTP و...

من از این کد شما استفتده کردم
donwloader.DownloadFile("URL Of File In Net", "Address To Save In Local");
به جای URL Of File In Net چی باید بنویسم؟
\\pc1004375\Users\Public\update\Programming Technical Support
تو این آدرس فایل جدید آپدیت برنامه من هست اما خطا میده

mehdi0020
یک شنبه 09 آبان 1395, 14:04 عصر
من از این کد شما استفتده کردم
donwloader.DownloadFile("URL Of File In Net", "Address To Save In Local");
به جای URL Of File In Net چی باید بنویسم؟
\\pc1004375\Users\Public\update\Programming Technical Support
تو این آدرس فایل جدید آپدیت برنامه من هست اما خطا میده
pc1007375 همون فضای شیر هستش

YasserDivaR
یک شنبه 09 آبان 1395, 17:37 عصر
سلام

دوستان به صورت خلاصه میگم

اگر بخوایم یه امکانی در برنامه داشته باشیم که هربار با باز شدن برنامه چک بشه اگر نسخه جدید اومده باشه خودشو به صورت اتوماتیک آپدیت کنه به چه صورت میتونم پیاده سازیش کنم.
به صورت خلاصه بگین کافیه...


ممنون...

پیوست رو دان کنید

Javad_raouf
دوشنبه 10 آبان 1395, 13:50 عصر
من از این کد شما استفتده کردم
donwloader.DownloadFile("URL Of File In Net", "Address To Save In Local");
به جای URL Of File In Net چی باید بنویسم؟
\\pc1004375\Users\Public\update\Programming Technical Support
تو این آدرس فایل جدید آپدیت برنامه من هست اما خطا میده

اگر این آدرس توی Windows Explorer به راحتی داره باز میشه که نیازی به این دنگ و فنگ ها نداری
می تونی از متد
System.Io.File.Copy
استفاده کنی