مشاهده نسخه کامل
: کنسل کردن ستاپ در هنگام نصب برنامه
Payman_62
20-04-2010, 21:19
سلام.
من میخوام هنگام نصب برنامه شرط خاصی چک بشه و در صورتی که برقرار نبود نصب برنامه کنسل بشه. یه installer تو پروژم دارم که چک کردن داخلش داخل ایونت before_install انجام میشه. اما کنسل کردن نصب رو نمیتونم عملی کنم. در هر صورت برنامه نصب میشه. مگر این که عمدا یه اروری داخل برنامه ایجاد کنم که پیغام خطاش رو هنگام نصب نمایش میده و بعد عملیات نصب رو کنسل میکنه که جالب نیست.
متد rollback هم جواب نداد.
فایل msiexec میاد کلاس اینستالر رو مثل یه dll فراخوانی میکنه. حالا این کلاس اینستالر به هر طریقی کارش بدون ارور تموم بشه پیغام نصب با موفقیت نمایش داده میشه. حتی اگه بزنی application.exit هم میگه نصب با موفقیت انجام شد. حتی اگه متد install رو override کنی و base.install رو اجرا نکنی هم باز پیغام نصب با موفقیت نمایش داده میشه. در واقع msiexec کاری نداره اینستالر چی کار میکنه. فقط منتظره بسته بشه تا بگه نصب انجام شد. حالا چطور میتونم تحت شرایط خاصی عملیات نصب رو کنسل کنم؟
کسی میتونه راهنمایی کنه؟
به به.
سلام آقا پیمان خسته نباشید پادشاه.
البته اینو بگم واسم خیلی جالبه که شما این Install رو ساختین یا از Setup VS گرفتین.
اخه من ستاپ برنامه هام رو یا خودم دستی میسازم.
یا اینکه از ستاپ VS استفاده میکنم که Cancel درست کار میکنه.
اگه بگین چطوری این ستاپ که میگین رو ساختین ممنون میشم.برنامه خاصی داره.
البته معذرت میخوام که سوالتونو با سوال جواب دادم چون بعضی ها مثل من کارای شما رو تکرار میکنن و جواب رو براتون پیدا میکن.
ممنون و موفق باشید.
Payman_62
21-04-2010, 09:50
سلام.
متوجه منظورت نشدم. خود دات نت امکان ساخت ستاپ رو در اختیارت میذاره. کلاس اینستالر هم جز امکانات خود دات نت هست. من خودم چیزی نساختم.
فرمودی کنسل ستاپ vs درست کار میکنه. اما متد کنسل نداره. میشه بیشتر توضیح بدی.
سلام.
خوب من که با ستاب vs اصلاً کد نمینویسم که متدی بنویسم.البته یه ستاپ هم دستی میسازم ان شالله اگه وقتم اجازه بده.
ایشالله ایندفه اومدم براتون یه نمونه خود vs میزارم که همه چی داره.
موفق باشید.
یا علی.
سلام داداش پیمان.
اینم یک نمونه سمپل که اصلاً نیازی به کد نویسی نداره.
ویزارده ویزارد.من همیشه از این استفاده میکنم.
سوال، مشکل، موردی بود در خدمتم.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
موفق و سربلند باشید.
Payman_62
23-04-2010, 11:29
سلام.
ظاهرا متوجه سوالم نشدی. من گفتم میخوام هنگام نصب یه شرطی رو چک کنم و اگه برقرار نبود روند نصب برنامه کنسل شه.
شما یه ستاپ ساده گذاشتی که نه شرط چک میکنه نه نصب رو کنسل میکنه.
در ضمن چک کردن شرط نیاز به کدنویسی داره که داخل کلاس اینستالر انجام میشه.
سلام.
پیمان جان شما الان میتونی یه کد بنویسی توی ستاپ؟یا میخوای این کارو بکنی؟یا قبلاً یه کد دیگه نوشتی توش و میخوای اون کدی که الان میخوای بنویسی؟
شما یه ستاپ ساده گذاشتی که نه شرط چک میکنه نه نصب رو کنسل میکنه.
ولی ستاپی که من گذاشتم دکمه NEXT و CANCEL و BACK و انتخاب آدرس و .... داره...
همشم خوب کار میکنه.
فکر کنم کاری که میخوای انجام بدی امکان پذیر باشه ولی اگه بدونم تا حالا کسی این کارو کرده یا نه کارتونو ان شالله راه میندازم.
ولی اگه وقتم اجازه بده یک ستاپ فارسی سفارشی میدم بهت اون شرطی میخوای توش بنویس.
موفق باشید.
Payman_62
23-04-2010, 21:17
سلام.
بهار جان باز متوجه سوال نشدی. مشکل من ساخت ستاپ نیست. یه بار پست اول من رو با دقت بخون.
من دارم میگم میخوام یه شرطی رو داخل کلاس اینستالر چک کنم و اگه بر قرار نبود نصب کنسل شه. این کارها باید از طریق کد نویسی انجام بشه. نه کلیک رو کلید کنسل ستاپ.
میدونی منظور از کلاس اینستالر چیه؟
next و cancel که جز امکانات هر ستاپی هست.
کلید next و cancel برای کاربر قرار داده شده تا اگه خواست نصب کنه نکست رو بزنه و اگه نخواست کنسل رو بزنه.
سلام
سلام
الآن نمیتوانم امتحان کنم، ولی سعی میکنم به زودی تست کنم ...
چیزی که به ذهن من میرسد این است که ...
کد شرطتان را در همان متد Install مستقر کنید (چون این متد موقع نصب اجرا میشود)
گمانم همین کار را هم کرده اید؟
بعد کدی شبیه زیر را برای لغو عملیات تست کنید ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(همینطوری نوشتم و امتحان هم نکردم، ولی به نظرم این راه منطقی اش است، آزمایشی کنید، خودم هم انشاا... گوش شیطان کر فردا در فرصت بهتری امتحانی میکنم)
شب بخیر.
Payman_62
25-04-2010, 22:16
سلام.
h2 جان من مشابه این کد رو نوشته بودم. اول در before install چک کردم و رول بک جواب نداد. بعد هم خود متد اینستال رو override کردم و داخلش رول بک کردم. باز جواب نداد.
ارور میداد که پارامتر stateSaver برای رول بک قابل قبول نیست.
البته من پرنت و روت رو در نظر نگرفته بودم. فردا یه چک میکنم.
من چند راه را امتحان کردن به نظر میرسد اولین و بهترینش انداختن یک InstallerException باشد ولی با توجه به گفته های شما :
در محلی از متد Install که می خواهید نصب را لغو کنید از کد زیر استفاده کنید(بجای Setup1 از عنوان پنجره setup خود استفاده کنید)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنیدالبته این نظر من بود
موفق باشید
Payman_62
26-04-2010, 22:33
سلام
سلام
الآن نمیتوانم امتحان کنم، ولی سعی میکنم به زودی تست کنم ...
چیزی که به ذهن من میرسد این است که ...
کد شرطتان را در همان متد Install مستقر کنید (چون این متد موقع نصب اجرا میشود)
گمانم همین کار را هم کرده اید؟
بعد کدی شبیه زیر را برای لغو عملیات تست کنید ...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
(همینطوری نوشتم و امتحان هم نکردم، ولی به نظرم این راه منطقی اش است، آزمایشی کنید، خودم هم انشاا... گوش شیطان کر فردا در فرصت بهتری امتحانی میکنم)
شب بخیر.
سلام.
این روش هم جواب نداد. باز stateSaver مشکل داره.
خط اول رو به این صورت تغییر دادم تا ارور نده.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
Payman_62
01-05-2010, 09:01
سلام.
رول بک کردن روند نصب رو کنسل میکنه. اما یه اروری نمایش میده که جالب نیست.
یه روش اصولی باید داشته باشه.
جالبه تو سایت های خارجی هم چیزی پیدا نکردم.
سلام.
ببخشید میشه بگید این کدها رو کجا مینویسیید؟
شاید تونستم کمکتون کنم:46:.
سلام.
ببخشید میشه بگید این کدها رو کجا مینویسیید؟
شاید تونستم کمکتون کنم:46:.
سلام
یک پروژه از نوع ClassLibrary ایجاد کنید و یک کلاس داخل آن ایجاد کنید که از System.Configuration.Install.Installer
مشتق میشه و صفت RunInstaller(true) را هم به کلاس مورد نظر اضافه کنید حالا متد هایی از جمله Install و Uninstall و Rollback را بنابر کاری که می خواهید انجام دهند override
کنید و پروژه را کامپایل کنید تا dll مربوطه ایجاد شود.
نمونه ای از این عمل در msdn :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
پس از اون روی پروژه ی ستاپی که سختین راست کلیک کنید و گزینه Add Custome Action رو بزنید و dll ای که در بخش قبل ساختید به رویداد های Install و Rollback و ... Custome Action بشناسونید.
موفق باشید
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.