PDA

View Full Version : قابلیت به روز رسانی خودکار برای برنامه های Windows Form Application



cprogram
سه شنبه 25 مهر 1396, 18:49 عصر
سلام دوستان.
بهترین راه برای افزودن قابلیت آپدیت آنلاین به برنامه های نوشته شده با سی شارپ چی هست؟
اینها برامون مهمه:
راحتی پیاده سازی
راحتی استفاده برای کاربر
چک کردن خودکار آپدیت توسط برنامه و دانلود و نصب خودکار آپدیت
قابل اطمینان بودن و پایدار بودن
ضمنا برنامه یه بخش تنظیمات داره که میخواهیم بعد از بروز رسانی تنظیمات قبلی حفظ بشه.

هم چنین برای نصب برنامه در سیستم های جدید هم میخواهیم به روش مناسب آخرین بروزرسانی در دسترس باشه. و برنامه نصبی هم با InstallShield آماده میشه.

danialafshari
چهارشنبه 26 مهر 1396, 02:34 صبح
با سلام
یک روش به صورتی هست که خورد مایکروسافت درون visual studio قرار داده و اینکه از زبانه Publish تنظیمات Project > Properties می تونید اینکارو انجام بدیدو به این صورت که پس از بستن نرم افزار وجود آپدیت رو بررسی می کنه، که آموزشش رو قرار دادم
روش بعد هم اینه که برنامه تون رو بصورت dll بسازید و در هنگام ورود به آدرسی که شما درش قرار میدید وصل میشه
موفق باشید

رامین مرادی
چهارشنبه 26 مهر 1396, 08:09 صبح
با سلام
یک روش به صورتی هست که خورد مایکروسافت درون visual studio قرار داده و اینکه از زبانه Publish تنظیمات Project > Properties می تونید اینکارو انجام بدیدو به این صورت که پس از بستن نرم افزار وجود آپدیت رو بررسی می کنه، که آموزشش رو قرار دادم
روش بعد هم اینه که برنامه تون رو بصورت dll بسازید و در هنگام ورود به آدرسی که شما درش قرار میدید وصل میشه
موفق باشید

تو روش دوم مثلا کلاسهارو میشه بروزرسانی کرذد .اما اگه نیاز بود فرمها بروزرسانی بشه چی؟
یا کلا روند روش دوم رو در صورت امکان اینجا کامل توضیح بدید که چیکار کنیم؟

cprogram
چهارشنبه 26 مهر 1396, 09:11 صبح
در روش اول همه کلاس ها و فرم ها بروز رسانی میشه؟ برنامه من یه بخش تنظیمات داره که میخوام بعد بروز رسانی تغییر نکنه و تنظیمات قبلی حفظ بشه.
اگر بروزرسانی موفقیت آمیز نبود، کاربر باید چیکار کنه؟

برای سیستم مشتریان جدید فایل نصبی باید به صورت مجزا تهیه بشه؟ فایل نصبی باید در حین نصب dll های لازم رو رجیستر کنه و یه فایل exe دیگه رو نصب کنه.

336699
چهارشنبه 26 مهر 1396, 09:40 صبح
سلام دوستان.
بهترین راه برای افزودن قابلیت آپدیت آنلاین به برنامه های نوشته شده با سی شارپ چی هست؟
اینها برامون مهمه:
راحتی پیاده سازی
راحتی استفاده برای کاربر
چک کردن خودکار آپدیت توسط برنامه و دانلود و نصب خودکار آپدیت
قابل اطمینان بودن و پایدار بودن
ضمنا برنامه یه بخش تنظیمات داره که میخواهیم بعد از بروز رسانی تنظیمات قبلی حفظ بشه.

هم چنین برای نصب برنامه در سیستم های جدید هم میخواهیم به روش مناسب آخرین بروزرسانی در دسترس باشه. و برنامه نصبی هم با InstallShield آماده میشه.

قبل از هرچیز ، لازمه که شما یک دامین اختصاصی و یک هاست داشته باشین (از آپلود سنترهای عمومی نمیشه در این زمینه استفاده کرد)

اگه یه سر به فولدر نصب برنامه ها در ویندوز زده باشین ، میبینید که برنامه های حرفه ای ، یه فایل Updater دارن که مستقل از برنامه اصلی هستش (استفاده از Publish مایکروسافت توصیه نمیشه)

بنابر این شما باید یه پروژه جدید (مستقل از برنامه اصلی) ایجاد کنید.
بعد شما یک فایل txt یا xml یا json که شامل اطلاعات نرم افزار (ورژن و ...) میباشد رو داخل سایت خودتون قرار میدین.
وظیفه این برنامه Updater اینه که لینک مورد نظر (آدرس فایل ) رو چک میکنه و اطلاعات دریافتی رو با نسخه فعلی مقایسه میکنه و در صورتی که آپدیت جدید موجود باشه فایل مورد نظر رو دانلود میکنه و پس از دانلود با فایل اصلی جایگزین میکنه ( این فایل میتونه هرچیزی باشه exe یا dll یا ...) حتی فایل exe اصلی برنامه رو هم میشه جایگزین کرد.

رامین مرادی
چهارشنبه 26 مهر 1396, 09:48 صبح
قبل از هرچیز ، لازمه که شما یک دامین اختصاصی و یک هاست داشته باشین (از آپلود سنترهای عمومی نمیشه در این زمینه استفاده کرد)

اگه یه سر به فولدر نصب برنامه ها در ویندوز زده باشین ، میبینید که برنامه های حرفه ای ، یه فایل Updater دارن که مستقل از برنامه اصلی هستش (استفاده از Publish مایکروسافت توصیه نمیشه)

بنابر این شما باید یه پروژه جدید (مستقل از برنامه اصلی) ایجاد کنید.
بعد شما یک فایل txt یا xml یا json که شامل اطلاعات نرم افزار (ورژن و ...) میباشد رو داخل سایت خودتون قرار میدین.
وظیفه این برنامه Updater اینه که لینک مورد نظر (آدرس فایل ) رو چک میکنه و اطلاعات دریافتی رو با نسخه فعلی مقایسه میکنه و در صورتی که آپدیت جدید موجود باشه فایل مورد نظر رو دانلود میکنه و پس از دانلود با فایل اصلی جایگزین میکنه ( این فایل میتونه هرچیزی باشه exe یا dll یا ...) حتی فایل exe اصلی برنامه رو هم میشه جایگزین کرد.

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

cprogram
چهارشنبه 26 مهر 1396, 11:38 صبح
قبل از هرچیز ، لازمه که شما یک دامین اختصاصی و یک هاست داشته باشین (از آپلود سنترهای عمومی نمیشه در این زمینه استفاده کرد)

اگه یه سر به فولدر نصب برنامه ها در ویندوز زده باشین ، میبینید که برنامه های حرفه ای ، یه فایل Updater دارن که مستقل از برنامه اصلی هستش (استفاده از Publish مایکروسافت توصیه نمیشه)

بنابر این شما باید یه پروژه جدید (مستقل از برنامه اصلی) ایجاد کنید.
بعد شما یک فایل txt یا xml یا json که شامل اطلاعات نرم افزار (ورژن و ...) میباشد رو داخل سایت خودتون قرار میدین.
وظیفه این برنامه Updater اینه که لینک مورد نظر (آدرس فایل ) رو چک میکنه و اطلاعات دریافتی رو با نسخه فعلی مقایسه میکنه و در صورتی که آپدیت جدید موجود باشه فایل مورد نظر رو دانلود میکنه و پس از دانلود با فایل اصلی جایگزین میکنه ( این فایل میتونه هرچیزی باشه exe یا dll یا ...) حتی فایل exe اصلی برنامه رو هم میشه جایگزین کرد.

فکر کنم روش خوبی باشه. در مورد فایل تکست یا xml، این فایل باید دستی تنظیم بشه یا نه به روشی مانند Publish میشه اتوماتش کرد؟

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

برای اینکه Updater بتونه بفهمه که کدوم قسمت ها نیاز به بروز رسانی دارند، ورژن بخش های مختلف برنامه باید در اون فایل txt یا xml نوشته بشه؟
برای بروز رساتی خود Updater چیکار باید کرد؟
اگر برنامه بروز رسانی شده به هر دلیلی اجرا نشه، بهترین روش برای مقابله با این ایراد چی هست؟ نگه داشتن فایل های آخرین ورژن پایدار؟

رامین مرادی
چهارشنبه 26 مهر 1396, 11:48 صبح
فکر کنم روش خوبی باشه. در مورد فایل تکست یا xml، این فایل باید دستی تنظیم بشه یا نه به روشی مانند Publish میشه اتوماتش کرد؟

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

برای اینکه Updater بتونه بفهمه که کدوم قسمت ها نیاز به بروز رسانی دارند، ورژن بخش های مختلف برنامه باید در اون فایل txt یا xml نوشته بشه؟
برای بروز رساتی خود Updater چیکار باید کرد؟
اگر برنامه بروز رسانی شده به هر دلیلی اجرا نشه، بهترین روش برای مقابله با این ایراد چی هست؟ نگه داشتن فایل های آخرین ورژن پایدار؟
فایل نصب یه مسیر جدید و فایلهای بروز رسانی در یک مسیر دیگه باشه.
فایل متنی هم کاری نداره که هر از گاهی یه بار ویرایش میهش(من روش کارم به این صورته که تاریخ بروزرسانی رو ثبت میکنم و تو برنامه مشتری تاریخ هارو چک میکنم.بعد آپدیت هم تاریخ مشتری رو هم بروز میکنم)
خودم فعلا کل برنامه رو بروزرسانی میکنم.
برای خود آپدیتر هم میتونی از خود برنامه کمک بگیری. مثلا موقع بسته شدن برنامه. البته همون کار اینبار برعکس.
میتونید قبل از جایگزینی فایلهای وجود رو در یک پوشه ذخیره کرده و بعد اقدام به بروزرسانی کنید. در صورت به وجود اومدن هر گونه ایراد فایلهای قبلی رو دوباره برگردونید

cprogram
چهارشنبه 26 مهر 1396, 12:21 عصر
فایل نصب یه مسیر جدید و فایلهای بروز رسانی در یک مسیر دیگه باشه.
فایل متنی هم کاری نداره که هر از گاهی یه بار ویرایش میهش(من روش کارم به این صورته که تاریخ بروزرسانی رو ثبت میکنم و تو برنامه مشتری تاریخ هارو چک میکنم.بعد آپدیت هم تاریخ مشتری رو هم بروز میکنم)
خودم فعلا کل برنامه رو بروزرسانی میکنم.
برای خود آپدیتر هم میتونی از خود برنامه کمک بگیری. مثلا موقع بسته شدن برنامه. البته همون کار اینبار برعکس.
میتونید قبل از جایگزینی فایلهای وجود رو در یک پوشه ذخیره کرده و بعد اقدام به بروزرسانی کنید. در صورت به وجود اومدن هر گونه ایراد فایلهای قبلی رو دوباره برگردونید

برای سرور که برنامه خاصی یا تنظیمات خاصی نیاز نیست؟ از چه پروتکل ارتباطی استفاده بشه بهتره؟ ftp و ...
برای اینکه بتونم خیلی سریع این قابلیت رو به برنامه ام اضافه کنم، آیا چیز آماده ای هست؟

رامین مرادی
چهارشنبه 26 مهر 1396, 12:41 عصر
برای سرور که برنامه خاصی یا تنظیمات خاصی نیاز نیست؟ از چه پروتکل ارتباطی استفاده بشه بهتره؟ ftp و ...
برای اینکه بتونم خیلی سریع این قابلیت رو به برنامه ام اضافه کنم، آیا چیز آماده ای هست؟

من داخل شبکه دومین استفاده میکنم. تنظیمی نیاز نیست. فقط باید اون پوشه رو همه سیستمها بتونن دسترسی داشته باشن.

cprogram
چهارشنبه 26 مهر 1396, 13:52 عصر
من داخل شبکه دومین استفاده میکنم. تنظیمی نیاز نیست. فقط باید اون پوشه رو همه سیستمها بتونن دسترسی داشته باشن.
برای اینکه سریع بتونم به برنامه خودم همچین قابلیتی اضافه کنم پروژه آماده ای هست که استفاده کنم یا نه؟
شما Updater رو خودتون نوشتید؟

رامین مرادی
چهارشنبه 26 مهر 1396, 14:05 عصر
برای اینکه سریع بتونم به برنامه خودم همچین قابلیتی اضافه کنم پروژه آماده ای هست که استفاده کنم یا نه؟
شما Updater رو خودتون نوشتید؟

پروژه آماده ای ندیدم. بله خودم نوشتم.

cprogram
چهارشنبه 26 مهر 1396, 15:56 عصر
پروژه آماده ای ندیدم. بله خودم نوشتم.
برای افزودن این قابلیت به برنامه من این ها رو توی نت دیدم.
نظرتون در مورد این ها چی هست؟
https://www.codeproject.com/Articles/731954/Simple-Auto-Update-Let-your-application-update-i
https://wyday.com/wybuild/help/automatic-updates/

cprogram
سه شنبه 02 آبان 1396, 15:04 عصر
دوستان نظری ندارند؟
راهی برای پیاده سازی سریع روش پیشنهادی آقای مرادی نیست؟

رامین مرادی
چهارشنبه 03 آبان 1396, 08:21 صبح
دوستان نظری ندارند؟
راهی برای پیاده سازی سریع روش پیشنهادی آقای مرادی نیست؟

میخواید تحت شبکه داخلی باشه یا اینترنت؟

danialafshari
جمعه 05 آبان 1396, 00:56 صبح
دوستان نظری ندارند؟
راهی برای پیاده سازی سریع روش پیشنهادی آقای مرادی نیست؟

شما یک برنامه به عنوان مثال Updater بساز و فایل exe رو بزار کنار برنامت
این برنامه از توی اینترنت یک فایل متنی رو می خونه(که روشش بارها توی سایت توضیح داده شده جستجو کنید) و بعد اگر ورژن اون فایل از ورژن برنامه بالاتر بود بیاد از روی یک سایت اونو دانلود کنه یا یکار راحت تر مثل برنامه تلگرام دسکتاپ لینک موقع بالا اومدن پیام آپدیت موجود است رو بده و با زدن دانلود بره توی صفحه دانلود.
البته اگر لینک بخواید بدید و خودش دانلود کنه نیازی به برنامه مجزا نیست و می تونید توی همون برنامه اصلی هم انجام بدید
بدست آوردن ورژن که از توی Properties تنظیم میشه:
متد:

public string AssemblyVersion
{
get
{
return System.Reflection.Assembly.GetExecutingAssembly(). GetName().Version.ToString();
}
}

استفاده:

string AppVer = String.Format("Version {0}", AssemblyVersion);

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

Mahmoud Zaad
جمعه 05 آبان 1396, 10:55 صبح
البته اگر لینک بخواید بدید و خودش دانلود کنه نیازی به برنامه مجزا نیست و می تونید توی همون برنامه اصلی هم انجام بدید

با سلام
این بخش رو یک مقدار توضیح میدید؟

حسین.کاظمی
سه شنبه 09 آبان 1396, 19:29 عصر
سلام
تو همین سایت یادم هست ینفر ی dll در این زمینه نوشته بود....
جست و جوش کنید

mostafa_bahar
چهارشنبه 10 بهمن 1397, 23:20 عصر
ر بعضی از سیستم ها جایگزین کردن با مشکل مواجه میشه
مخصوصا وقتی شبکه باشه و فایل اجرایی از روی شبکه اجرا بشه من این مشکل رو دارم و خیلی احتیاج به کمک دارم در این زمینه

رامین مرادی
پنج شنبه 11 بهمن 1397, 09:37 صبح
ر بعضی از سیستم ها جایگزین کردن با مشکل مواجه میشه
مخصوصا وقتی شبکه باشه و فایل اجرایی از روی شبکه اجرا بشه من این مشکل رو دارم و خیلی احتیاج به کمک دارم در این زمینه

خب وقتی فایلی درحال اجرا بشه امکان تغییر تو اون وجود نداره. برنامه شما باید رو تک تک سیستمها نصب باشه و هر کاربر برنامه خودشو اپئدیت کنه یا اینکه اپدیت برنام مرکزی زمانی اتفاق بی افته که هیچ سیستمی اون فایل رو اجرا نکرده باشه

barnamenevisjavan
شنبه 13 بهمن 1397, 18:34 عصر
سلام برای بروز رسانی برنامه میتونید به این روش استفاده کنید
اول یه فایل xml ایجاد کنید و اطلاعات زیر رو وارد کنید
<?xml version="1.0" encoding="utf-8"?>
<MoalemYar>
<AppVersion>
<version>2.2.5772.0</version>
<url>https://app.com/app.exe</url>
<changelog>
بهبود رابط کاربری
حل مشکلات
افزودن ویژگی های جدید
بهبود تجربه کاربری
</changelog>
</AppVersion>
</MoalemYar>

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

public static string UpdateServer = "https://app.com/Updater.xml";
public const string UpdateXmlTag = "MoalemYar"; //Defined in Xml file
public const string UpdateXmlChildTag = "AppVersion"; //Defined in Xml file
public const string UpdateVersionTag = "version"; //Defined in Xml file
public const string UpdateUrlTag = "url"; //Defined in Xml file
public const string UpdateChangeLogTag = "changelog";
private string newVersion = string.Empty;


private string url = "";
private void CheckUpdate()
{
try
{
newVersion = string.Empty;
ChangeLog = string.Empty;
url = "";


XDocument doc = XDocument.Load(UpdateServer);
var items = doc
.Element(XName.Get(UpdateXmlTag))
.Elements(XName.Get(UpdateXmlChildTag));
var versionItem = items.Select(ele => ele.Element(XName.Get(UpdateVersionTag)).Value);
var urlItem = items.Select(ele => ele.Element(XName.Get(UpdateUrlTag)).Value);
var changelogItem = items.Select(ele => ele.Element(XName.Get(UpdateChangeLogTag)).Value);


newVersion = versionItem.FirstOrDefault();
url = urlItem.FirstOrDefault();
ChangeLog = changelogItem.FirstOrDefault();
CompareVersions();
}
catch (Exception)
{
}
}


private void CompareVersions()
{
if (IsVersionLater(newVersion, getAppVersion.ToString()))
{
txtNewVersion.Content = newVersion;
txtNewVersion.Foreground = new SolidColorBrush(Colors.Green);
txtNewVersion.Visibility = Visibility.Visible;
txtChangeLog.Visibility = Visibility.Visible;
txtChangeLog.Text = ChangeLog;
showNotification(Update_KEY, true, newVersion, url);
}
else
{
showNotification(Update_KEY, false);
txtNewVersion.Content = "شما از آخرین نسخه استفاده می کنید";
txtNewVersion.Visibility = Visibility.Visible;
}
}


public static bool IsVersionLater(string newVersion, string oldVersion)
{
// split into groups
string[] cur = newVersion.Split('.');
string[] cmp = oldVersion.Split('.');
// get max length and fill the shorter one with zeros
int len = Math.Max(cur.Length, cmp.Length);
int[] vs = new int[len];
int[] cs = new int[len];
Array.Clear(vs, 0, len);
Array.Clear(cs, 0, len);
int idx = 0;
// skip non digits
foreach (string n in cur)
{
if (!Int32.TryParse(n, out vs[idx]))
{
vs[idx] = -999; // mark for skip later
}
idx++;
}
idx = 0;
foreach (string n in cmp)
{
if (!Int32.TryParse(n, out cs[idx]))
{
cs[idx] = -999; // mark for skip later
}
idx++;
}
for (int i = 0; i < len; i++)
{
// skip non digits
if ((vs[i] == -999) || (cs[i] == -999))
{
continue;
}
if (vs[i] < cs[i])
{
return (false);
}
else if (vs[i] > cs[i])
{
return (true);
}
}
return (false);
}


private void btnCheckUpdate_Click(object sender, RoutedEventArgs e)
{
CheckUpdate();
}

Helpco
سه شنبه 16 بهمن 1397, 09:29 صبح
سلام برای بروز رسانی برنامه میتونید به این روش استفاده کنید
اول یه فایل xml ایجاد کنید و اطلاعات زیر رو وارد کنید
<?xml version="1.0" encoding="utf-8"?>
<MoalemYar>
<AppVersion>
<version>2.2.5772.0</version>
<url>https://app.com/app.exe</url>
<changelog>
بهبود رابط کاربری
حل مشکلات
افزودن ویژگی های جدید
بهبود تجربه کاربری
</changelog>
</AppVersion>
</MoalemYar>

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

public static string UpdateServer = "https://app.com/Updater.xml";
public const string UpdateXmlTag = "MoalemYar"; //Defined in Xml file
public const string UpdateXmlChildTag = "AppVersion"; //Defined in Xml file
public const string UpdateVersionTag = "version"; //Defined in Xml file
public const string UpdateUrlTag = "url"; //Defined in Xml file
public const string UpdateChangeLogTag = "changelog";
private string newVersion = string.Empty;


private string url = "";
private void CheckUpdate()
{
try
{
newVersion = string.Empty;
ChangeLog = string.Empty;
url = "";


XDocument doc = XDocument.Load(UpdateServer);
var items = doc
.Element(XName.Get(UpdateXmlTag))
.Elements(XName.Get(UpdateXmlChildTag));
var versionItem = items.Select(ele => ele.Element(XName.Get(UpdateVersionTag)).Value);
var urlItem = items.Select(ele => ele.Element(XName.Get(UpdateUrlTag)).Value);
var changelogItem = items.Select(ele => ele.Element(XName.Get(UpdateChangeLogTag)).Value);


newVersion = versionItem.FirstOrDefault();
url = urlItem.FirstOrDefault();
ChangeLog = changelogItem.FirstOrDefault();
CompareVersions();
}
catch (Exception)
{
}
}


private void CompareVersions()
{
if (IsVersionLater(newVersion, getAppVersion.ToString()))
{
txtNewVersion.Content = newVersion;
txtNewVersion.Foreground = new SolidColorBrush(Colors.Green);
txtNewVersion.Visibility = Visibility.Visible;
txtChangeLog.Visibility = Visibility.Visible;
txtChangeLog.Text = ChangeLog;
showNotification(Update_KEY, true, newVersion, url);
}
else
{
showNotification(Update_KEY, false);
txtNewVersion.Content = "شما از آخرین نسخه استفاده می کنید";
txtNewVersion.Visibility = Visibility.Visible;
}
}


public static bool IsVersionLater(string newVersion, string oldVersion)
{
// split into groups
string[] cur = newVersion.Split('.');
string[] cmp = oldVersion.Split('.');
// get max length and fill the shorter one with zeros
int len = Math.Max(cur.Length, cmp.Length);
int[] vs = new int[len];
int[] cs = new int[len];
Array.Clear(vs, 0, len);
Array.Clear(cs, 0, len);
int idx = 0;
// skip non digits
foreach (string n in cur)
{
if (!Int32.TryParse(n, out vs[idx]))
{
vs[idx] = -999; // mark for skip later
}
idx++;
}
idx = 0;
foreach (string n in cmp)
{
if (!Int32.TryParse(n, out cs[idx]))
{
cs[idx] = -999; // mark for skip later
}
idx++;
}
for (int i = 0; i < len; i++)
{
// skip non digits
if ((vs[i] == -999) || (cs[i] == -999))
{
continue;
}
if (vs[i] < cs[i])
{
return (false);
}
else if (vs[i] > cs[i])
{
return (true);
}
}
return (false);
}


private void btnCheckUpdate_Click(object sender, RoutedEventArgs e)
{
CheckUpdate();
}

امکان داره بصورت یک پروژه قرار بدید

barnamenevisjavan
سه شنبه 16 بهمن 1397, 18:50 عصر
امکان داره بصورت یک پروژه قرار بدید
براتون پیوست کردم

NasimBamdad
چهارشنبه 17 بهمن 1397, 00:44 صبح
خوب اگه بخوایم فایل های دیگه رو هم آپدیت کنیم چی ؟ مثلا عکسی . یا dll باید اضافه کنیم

barnamenevisjavan
چهارشنبه 17 بهمن 1397, 18:27 عصر
خوب اگه بخوایم فایل های دیگه رو هم آپدیت کنیم چی ؟ مثلا عکسی . یا dll باید اضافه کنیم
هر فایلی خواستین بزارین داخل زیپ بعدش که برنامه دانلود کرد خودش انزیپ و جایگزین کنه

NasimBamdad
چهارشنبه 17 بهمن 1397, 22:39 عصر
هر فایلی خواستین بزارین داخل زیپ بعدش که برنامه دانلود کرد خودش انزیپ و جایگزین کنه


خوب من تابعی برای آنزیپ و اینطور چیزا ندیدم

barnamenevisjavan
پنج شنبه 18 بهمن 1397, 10:37 صبح
خوب من تابعی برای آنزیپ و اینطور چیزا ندیدم
اونا دیگه کاری نداره خودتون میتونید انجام بدین من فقط نحوه چک کردن رو قرار دادم حالا اگه مشکل دارین بگین تا نسخه کامل بروزرسانی رو قرار بدم

barnamenevisjavan
پنج شنبه 18 بهمن 1397, 11:28 صبح
خوب من تابعی برای آنزیپ و اینطور چیزا ندیدم
این سورس رو دانلود کنید نسخه کامل هستش از برنامه خودتون اپدیت رو چک میکنید در صورت وجود نسخه جدید اپدیتر رو اجرا میکنه و شروع به دانلود میکنه بعدش فایل rar رو باز میکنه و...
برنامه رو بیلد و دمو رو اجرا کنید
http://s8.picofile.com/file/8351525700/AppUpdater.rar.html

booysusa
یک شنبه 21 بهمن 1397, 09:22 صبح
این سورس رو دانلود کنید نسخه کامل هستش از برنامه خودتون اپدیت رو چک میکنید در صورت وجود نسخه جدید اپدیتر رو اجرا میکنه و شروع به دانلود میکنه بعدش فایل rar رو باز میکنه و...
برنامه رو بیلد و دمو رو اجرا کنید
http://s8.picofile.com/file/8351525700/AppUpdater.rar.html

این خطا رو میده
http://s9.picofile.com/file/8351776434/021.PNG

barnamenevisjavan
یک شنبه 21 بهمن 1397, 14:04 عصر
این خطا رو میده
http://s9.picofile.com/file/8351776434/021.PNG
چک کردم مشکلی نداره اگر کدها یا لینک اپدیت رو تغییر دادین بگین تا بهتر راهنمایی کنم، خطایی که گرفته مربوط به ارگومان هستش، تو برنامه اصلی اپدیت رو چک میکنیم و در صورتی که موجود باشه برنامه اپدیتر رو اجرا میکنیم و لینک دانلود اپدیت جدید رو بهش پاس میدیم چک کنید ببینید لینک دانلود موجود هست یا ن شاید خالی هست بخاطر اون خطا میده

rahmatipoor
دوشنبه 22 بهمن 1397, 13:15 عصر
با سلام و تشکر از شما

دیتابیس رو چیکار میکنید

چون ممکنه هر کدوم از مشتریها نسخه های مختلفی از برنامه و دیتابیس داشته باشن

barnamenevisjavan
دوشنبه 22 بهمن 1397, 20:31 عصر
با سلام و تشکر از شما

دیتابیس رو چیکار میکنید

چون ممکنه هر کدوم از مشتریها نسخه های مختلفی از برنامه و دیتابیس داشته باشن
سلام دیتابیس رو هم با migration راحت میشه حلش کرد

NasimBamdad
سه شنبه 23 بهمن 1397, 19:12 عصر
چک کردم مشکلی نداره اگر کدها یا لینک اپدیت رو تغییر دادین بگین تا بهتر راهنمایی کنم، خطایی که گرفته مربوط به ارگومان هستش، تو برنامه اصلی اپدیت رو چک میکنیم و در صورتی که موجود باشه برنامه اپدیتر رو اجرا میکنیم و لینک دانلود اپدیت جدید رو بهش پاس میدیم چک کنید ببینید لینک دانلود موجود هست یا ن شاید خالی هست بخاطر اون خطا میده


برای منم خطا میده


System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'


همون آرگمان url = args[0];


فایل هم موجوده و ....

barnamenevisjavan
سه شنبه 23 بهمن 1397, 21:07 عصر
برای منم خطا میده


System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'


همون آرگمان url = args[0];


فایل هم موجوده و ....
به نظر من یا فایل xml مشکل داره یا فایل رو در جای مناسب اپلود نکردین
پروژتون رو قرار بدین بررسی کنم

NasimBamdad
سه شنبه 23 بهمن 1397, 21:40 عصر
پاک شود پاک شود پاک شود پاک شود

NasimBamdad
سه شنبه 23 بهمن 1397, 21:54 عصر
بالاخره موفق شدم.

مشکل این بود در فایل xmlاز https استفاده کرده بودم

عزیزان دقت کنید که ملاک رو پروژه کامپایل شده در پست بالا قرار ندادید و. اون رو اجرا نگیرید.

فایل dll رو بر اساس نیاز هاتون تغییر بدید و کامپایل و کنار پروژه قرار بدید.

NasimBamdad
سه شنبه 23 بهمن 1397, 22:41 عصر
1- اون آدرس فایل اجرایی نرم افزار رو چه طوری میشه از برنامه خودمون بهش پاس بدیم ؟ اینکه برای پروژه های زیاد صرفه جویی وقت مهمه


System.Diagnostics.Process.Start("WareHouse.exe");

NasimBamdad
چهارشنبه 24 بهمن 1397, 10:24 صبح
یه مشکل دیگه هم هست که بنده ورژن فایلم با ورژنی که در فایل xml تعیین شده یکی هست ، اما بازم پیغام آپدیت رو میده

barnamenevisjavan
چهارشنبه 24 بهمن 1397, 13:05 عصر
1- اون آدرس فایل اجرایی نرم افزار رو چه طوری میشه از برنامه خودمون بهش پاس بدیم ؟ اینکه برای پروژه های زیاد صرفه جویی وقت مهمه


System.Diagnostics.Process.Start("WareHouse.exe");



یه مشکل دیگه هم هست که بنده ورژن فایلم با ورژنی که در فایل xml تعیین شده یکی هست ، اما بازم پیغام آپدیت رو میده
برای پاس دادن ادرس فایل، مثل پاس دادن لینک عمل کنید، کافیه یه ارگومان دیگه اضافه کنید
System.Diagnostics.Process.Start("AppUpdater.exe",AppUpdater.Updater.url, "Harchi ke Hast");
و داخل اپدیتر برنامه هم به این صورت ارگومانو دریافت کنین
MessageBox.Show(args[1];)
کافیه اندیس args رو تغییر بدین
برای مورد اخر هم دقت کنید که باید ورژن برنامه بصورت 4 رقمی تعیین کنین
هم تو داخل برنامه
1.0.0.0 و هم داخل فایل کانفیگ 1.0.0.0 هیچ مشکلی نداره در صورتی که ورژن یکی باشه اپدیت دریافت نمیشه

NasimBamdad
چهارشنبه 24 بهمن 1397, 16:49 عصر
اینم نمونه عکسی که گذاشتم برای ورژن ها

NasimBamdad
چهارشنبه 24 بهمن 1397, 17:23 عصر
اینم کدی هست که بنده دارم استفاده می کنم طبق آموزش شما :


bool isExist = AppUpdater.Updater.CheckUpdate();
if (isExist)
{
DialogResult result = RadMessageBox.Show("New Update is Available,Version : " + AppUpdater.Updater.newVersion + "\n" + "What's New :" + "\n" + AppUpdater.Updater.ChangeLog, "New Update", MessageBoxButtons.YesNo, RadMessageIcon.Question);
if (result == DialogResult.Yes)
{
Process.Start("AppUpdater.exe", AppUpdater.Updater.url);
Application.Exit();
}
else if (result == DialogResult.No)
{
Application.Exit();
}
}


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

NasimBamdad
چهارشنبه 24 بهمن 1397, 17:48 عصر
مشکل رو پیدا کردم ،،


if (Updater.IsVersionLater(newVersion, Assembly.GetExecutingAssembly().GetName().Version. ToString()))


این خط میاد ورژن فایل dll رو با نرم افزار مقایسه می کنه . در صورتی که ورژن برنامه رو باید بهش پاس بدیم

آقای سازنده درسته ؟

barnamenevisjavan
چهارشنبه 24 بهمن 1397, 19:33 عصر
مشکل رو پیدا کردم ،،


if (Updater.IsVersionLater(newVersion, Assembly.GetExecutingAssembly().GetName().Version. ToString()))


این خط میاد ورژن فایل dll رو با نرم افزار مقایسه می کنه . در صورتی که ورژن برنامه رو باید بهش پاس بدیم

آقای سازنده درسته ؟
آخ آخ بله اول پروژه واحد بود بعد ک دوستان گفتن بصورت کتابخانه در بیارم فراموش کردم تا اصلاح کنم، کافیه این خط رو Assembly.GetExecutingAssembly().GetName().Version. ToString()
با نسخه اپ خودتون جایگزین کنید

NasimBamdad
جمعه 26 بهمن 1397, 14:24 عصر
متاسفانه کامپوننت Rar به خوبی کار نمیکنه و خیلی وقتا مشکل جایگزین کردن داره . در تست هایی که انجام شد همگی با موفقیت نبودند ، ،بر این اساس کامپوننت از اول طراحی و مبتنی بر کتابخانه Ionic.ZIP طراحی و به روز رسانی شد .

فعلا در حالت Stable به سر می بره . عزیزانی که مایل هستند ورژن کامل دریافت کنند اطلاع بدند

Helpco
شنبه 27 بهمن 1397, 12:04 عصر
ممکن سورس جدید برنامه بزارید؟

arezoo.nasiri
سه شنبه 27 اردیبهشت 1401, 16:57 عصر
قبل از هرچیز ، لازمه که شما یک دامین اختصاصی و یک هاست داشته باشین (از آپلود سنترهای عمومی نمیشه در این زمینه استفاده کرد)

اگه یه سر به فولدر نصب برنامه ها در ویندوز زده باشین ، میبینید که برنامه های حرفه ای ، یه فایل Updater دارن که مستقل از برنامه اصلی هستش (استفاده از Publish مایکروسافت توصیه نمیشه)

بنابر این شما باید یه پروژه جدید (مستقل از برنامه اصلی) ایجاد کنید.
بعد شما یک فایل txt یا xml یا json که شامل اطلاعات نرم افزار (ورژن و ...) میباشد رو داخل سایت خودتون قرار میدین.
وظیفه این برنامه Updater اینه که لینک مورد نظر (آدرس فایل ) رو چک میکنه و اطلاعات دریافتی رو با نسخه فعلی مقایسه میکنه و در صورتی که آپدیت جدید موجود باشه فایل مورد نظر رو دانلود میکنه و پس از دانلود با فایل اصلی جایگزین میکنه ( این فایل میتونه هرچیزی باشه exe یا dll یا ...) حتی فایل exe اصلی برنامه رو هم میشه جایگزین کرد.

شما آموزشی سراغ دارید که به طور کامل این موضوع رو پوشش بده؟