PDA

View Full Version : سوال: آپدیت برنامه بدون از دست رفتن اطلاعات



zayens
سه شنبه 10 اردیبهشت 1392, 12:40 عصر
سلام

یه برنامه نوشتم (نیمه حسابداری) با سی شارپ و sql
برای دوتا مشتری نصب کردم
الان یه سری از فرمهامو تغییر دادم و چندتا جدول هم اضافه کردم به دیتابیسم و حالا میخوام به بهانه ی آپدیت کردن برنامه، براشون این برنامه جدیده را نصب کنم
اما نمیدونم چه جوری!
یه بار بردم نصب کنم ویندوز ارور داد که این برنامه قبلا نصب شده و نمیشه روی ورژن قبلیش نصب بشه!
روش آپدیت بدون اینکه اطلاعات قبلی مشتریهام بپره چه جوریه؟
درضمن گزینه ی *کلیک وانس* برای من کارایی نداره چون برای ساخت فایل نصب برنامه،برنامه را پابلیش نمیکنم بلکه از اینستالر خود ویژوال (ستاپ پروجکت) استفاده میکنم
لطفا راهنمایی کنید
.
.
اگه بدونین فعلا برای آپدیت چکار میکنم خندتون میگیره :لبخند:
از دیتابیس مشتری بکاپ میگیرم. بکاپو میارم خونه با sql جدولاشو ویرایش میکنم بعدش برنامه مشتری را پاک میکنم و براش جدیده را نصب میکنم و دیتابیس ویرایش شده را توی برنامه جدیده ریستور میکنم!
چکار کنم خب بلد نیستم دیگه! :لبخند:
.
.

AmirGhasemi
سه شنبه 10 اردیبهشت 1392, 12:48 عصر
خب برنامه اش بپره كه مهم نيست
مهم فقط از بين نرفتن اطلاعات ديتابيس است
اصلا كلا نرم افزار قبلي راپاك كن نرم افزار جديد را به جاش نصب كن
اما در مورد ديتابيس اگر تغييرات اساسي در جداول قبلي ندادي يك Script از ديتابيس جديد بساز يعني فقط جداولي كه جديدا اضافه كردي ازشون اسكريپت بساز و نه اون قبلي ها
اينجوري فقط جداول جديد به پروژه اضافه ميشن و جداول قبلي دست نمي خورن

Arash_janusV3
سه شنبه 10 اردیبهشت 1392, 13:25 عصر
نرم افزار SQLDeltaV4 را دانلود کنید
فکر کنم نسخه 5 هم باشه
این نرم افزار دیتابیس مبدا و مقصد را از شما می گیرد به عنوان مثال
مبدا می شه دیتابیس اصلی شما که به روز شده هم هست و مقصد می شه همون دیتابیسی که مخصوص
مشتری هستش و تفاوت این رو به شما نمایش می ده البته با Script.
خوب حالا شما می تونید هم مستقیم در همون برنامه تغییرات را اعمال کنید
و یا هم اینکه Script ی که به شما داده را ذخیره کنید و اون را در سیستم مشتری اجرا کنید

zayens
سه شنبه 10 اردیبهشت 1392, 15:57 عصر
خب برنامه اش بپره كه مهم نيست
مهم فقط از بين نرفتن اطلاعات ديتابيس است
اصلا كلا نرم افزار قبلي راپاك كن نرم افزار جديد را به جاش نصب كن


همه شما بارها انواع نرم افزارها را آپدیت کرده اید. آیا برای آپدیت ، ورژن قبلی را کلا پاک میکنین؟!!!



اما در مورد ديتابيس اگر تغييرات اساسي در جداول قبلي ندادي يك Script از ديتابيس جديد بساز يعني فقط جداولي كه جديدا اضافه كردي ازشون اسكريپت بساز و نه اون قبلي ها
اينجوري فقط جداول جديد به پروژه اضافه ميشن و جداول قبلي دست نمي خورن

مشکل منم دقیقا همینه یعنی نمیدونم چجوری اینکار را بکنم
البته اسکریپ بلد بنویسم مثل create table و alter و ... اما نمیدونم چجوری باید فایل exe ازش تولید کنم


نرم افزار SQLDeltaV4 را دانلود کنید

این نرم افزار تفاوت این رو به شما نمایش می ده البته با Script.
خوب حالا شما می تونید هم مستقیم در همون برنامه تغییرات را اعمال کنید
و یا هم اینکه Script ی که به شما داده را ذخیره کنید و اون را در سیستم مشتری اجرا کنید

ممنون
همونطور که گفتم خود اسکریپت را بلدم فقط نمیدونم چجوری باید درسش کرد
چیزی که به ذهنم میرسه اینه که توی خود برنامه بذارم و چک کنه که اگر فلان جدول وجود نداره بسازدش مثل if not exists و...
اما این کار هم شدنی نیست چون روش آپدیت را هنوز بلد نیستم و درین صورت بازم مجبورم برنامه مشتریمو با هر اطلاعاتی داره پاک کنم و
این را نصب کنم

Arash_janusV3
سه شنبه 10 اردیبهشت 1392, 19:57 عصر
خوب شما باید تغییرات احتمالی را exe بنویسید
بله همونطور که گفتید باید کنترل کنید که آیا چنین تغییری وجود داره یا خیر
و سپس یک اسکریپت اجرا کنید
اما برای کنترل کردن تغییرات عجله نکنید این کار را بعد از مراحل پایانی و یا تکمیل شدن پروژه انجام بدید بهتره
بهترین راه استفاده از همون نرم افزار هستش

zayens
چهارشنبه 11 اردیبهشت 1392, 00:04 صبح
خوب شما باید تغییرات احتمالی را exe بنویسید
بله همونطور که گفتید باید کنترل کنید که آیا چنین تغییری وجود داره یا خیر
و سپس یک اسکریپت اجرا کنید
اما برای کنترل کردن تغییرات عجله نکنید این کار را بعد از مراحل پایانی و یا تکمیل شدن پروژه انجام بدید بهتره
بهترین راه استفاده از همون نرم افزار هستش

ممنون ولی مثل اینکه باز داریم از جواب دور میشیم
همه این کارایی که شما فرمودین مربوط به دیتابیسه
.
خود برنامه را چکار کنم؟ یه راهی هم واسه اون پیشنهاد بدین

zayens
پنج شنبه 12 اردیبهشت 1392, 13:07 عصر
هیشکی هیچ نظری نداره؟
ینی هیچکس نمیدونه آپدیت چه جوریه؟!! :متعجب:

کامبیز اسدزاده
پنج شنبه 12 اردیبهشت 1392, 13:39 عصر
:قهقهه: شما ببخشید :ي

برای آپدیت برنامه چند گزینه لازمه ...



شما برای همچین برنامه ای باید یک سرور UptIme داشته باشید. با پینگ مناسب....
استفاده از یک کلاس Update برای بررسی نسخه ها و بروز رسانی های جدید بر اساس شناسای (شماره بیلد) و یا امکانات جدید.(این کلاس باید طوری طراحی بشه که هربار برنامه اجراء میشود و یا به صورت دستی بررسی کنه به سرور متصل بشه و فایل جدید رو از روی نسخه و ورژن بخونه و نسخه فایل موجود روی سرور رو به برنامه ارسال کنه در صورت عدم هماهنگی ورژن ها یه Notify نمایش بده)
استفاده از توابع NETWORK STREAM و یا هر توابعی که بتونید ازش فایل آپدیت رو از سرور دریافت نمایید.
استفاده از Threading یا Background Process برای اعمال وظیفه و انجام عملیات بروز رسانی مثل (دریافت /// کپی نمودن در پوشه ای به نام مثلا ///TEMP و در نهایت STOP Process و جایگزینی فایل هایی مانند / DLL , EXE و ...)

zayens
پنج شنبه 12 اردیبهشت 1392, 13:50 عصر
:قهقهه: شما ببخشید :ي

برای آپدیت برنامه چند گزینه لازمه ...



شما برای همچین برنامه ای باید یک سرور UptIme داشته باشید. با پینگ مناسب....
استفاده از یک کلاس Update برای بررسی نسخه ها و بروز رسانی های جدید بر اساس شناسای (شماره بیلد) و یا امکانات جدید.(این کلاس باید طوری طراحی بشه که هربار برنامه اجراء میشود و یا به صورت دستی بررسی کنه به سرور متصل بشه و فایل جدید رو از روی نسخه و ورژن بخونه و نسخه فایل موجود روی سرور رو به برنامه ارسال کنه در صورت عدم هماهنگی ورژن ها یه Notify نمایش بده)
استفاده از توابع NETWORK STREAM و یا هر توابعی که بتونید ازش فایل آپدیت رو از سرور دریافت نمایید.
استفاده از Threading یا Background Process برای اعمال وظیفه و انجام عملیات بروز رسانی مثل (دریافت /// کپی نمودن در پوشه ای به نام مثلا ///TEMP و در نهایت STOP Process و جایگزینی فایل هایی مانند / DLL , EXE و ...)


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

شاید چون من موقع سوال به جای کلمه ی مشتری از client استفاده کردم این سوء تفاهم پیش اومده که جناب why.darkness ذهنشون سراغ سرور و کلاینت رفته

کامبیز اسدزاده
پنج شنبه 12 اردیبهشت 1392, 13:52 عصر
خب دوست من شما میخوای برنامه رو OFFLINE آپدیت کنی ؟ :متعجب: این دیگه چه صیغه ای هست !!! فکر کنم روشی میخوای مثل آپدیت آنتی ویروس ها که فقط ویروس های شناسای شده رو آپدیت میکنه در حالت آفلاین درسته ؟

کامبیز اسدزاده
پنج شنبه 12 اردیبهشت 1392, 14:01 عصر
برای این حالت شما نیاز به گزینه ۲ و ۴ توضیحات بنده دارید.
ما بقی موارد فقط برای دریافت اطلاعات از روی سرور بود ... حالا که برنامه شما رو سرور نیست و رو کلاینت به صورت آفلاین هست و قراره شما برید حضوری خودتوت آپدیتش کنید فقط ۲ موردی که گفتم میتونه کمکتون کنه.

۱.استفاده از کلاس برای تشخیص فایل ها / DLL ها / EXE و هر چیزی که تو برنامه هستش
۲.یک کلاسی هم برای کپی و جایگزینی فایل های جدید

هیمن دو مورد کافیه برای این کار لازم نیست خیلی پیچیده باشه / شما این دو Class رو در نظر بگیری و بر اساس ساختار برنامت درست و مدیریت شده بنویسیش مطمئنان جواب میدهد.

zayens
سه شنبه 17 اردیبهشت 1392, 15:32 عصر
1.استفاده از کلاس برای تشخیص فایل ها / DLL ها / EXE و هر چیزی که تو برنامه هستش
۲.یک کلاسی هم برای کپی و جایگزینی فایل های جدید


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

FastCode
سه شنبه 17 اردیبهشت 1392, 15:49 عصر
فکر میکنم مشکل شما زبان اینگلیسی باشه.
اون پیغام خطا نمیگه که نمیتونه دوباره نصب کنه.
میگه باید برنامه رو از همونجایی آپدیت کنید که دفعه اول نصب کردید.

patrick5053
جمعه 27 اردیبهشت 1392, 12:48 عصر
شما باید در نصب اولیه برنامه رو طوری نصب کنید که پیشنیازهای برنامه مثل dll ها و یا هر چیز دیگه ای که لازمه همراه برنامه نصب بشه.
خوب تا اینجا برنامه نصب شده.
حالا برای آپدیت فقط لازمه فایل اجرایی برنامه با فایل اجرایی آپدیت شده جایگزین بشه.
فقط لازمه در برنامت یه گزینه آپدیت بزاری و توسط اون یه برنامه ساده یک فرمی رو که به برنامت ربطی نداره اجرا کنی و توسط اون مسیر فایل آپدیت رو بگیری بعد با دستور برنامه نویسی برنامه در حال اجرات رو ببندی و فایل exe برنامت روپاک کنی و فایل exe جدید رو در محل نصب کپی کنی.