PDA

View Full Version : سوال: سوال فوري:حذف خود برنامه با كليك بر روي آن



MohammadGh2011
چهارشنبه 29 تیر 1390, 02:13 صبح
با سلام خدمت تمامي اساتيد گرامي
دوستان عزيز من يك فرم دارم و داخل فورم لود اون دو يا سه خط كد نوشتم و ميخوام:
1-هرموقع رو اون فايل (يعني برنامم رو اجرا كردم) كليك كردم اون دو سه خط كد رو اجرا كنه و برنامه (همين برنامه) به طور كامل از روي سيستم و قابل بازگرداندن نباشه حذف شه
يا اگه روش بالا نشد
2-اون دو سه خط كد رو اجرا كنه و اون كد ها رو (كد هام داخل فورم لود هستن) براي هميشه پاك كنه
و يا عزيزان
من ميخوام اين برنامه ي خيلي كوچيك فقط يك بار رو سيستم كار بكنه و براي بار دوم عمل نكنه اگه 2 مورد با لا يكيشون جواب بدن خيلي خوب ميشه و اگه نشد كه ميشه ، شما لطف كنيد بگيد من چه كنم؟
ممنونم


توجه:من دنبال تريال يا محدود كردن برنامه نيستم اگه روش اول جواب بده خيلي خوب ميشه

Mr.Unknown
چهارشنبه 29 تیر 1390, 03:05 صبح
راه حل شماره 1-داخل فرم لود تایپ کنید
kill app.path & "\1.exe"
این پروژه رو exe کنید نامش رو 2 بزارید.
و یک پروژه جدید کداتونو تایپ کنید و توی form_unload کد زیر رو تایپ کنید
shell app.path & "\2.exe"
شماره 2 منظورتونو متوجه نشدم.
ولی برای آخرین سوال بهترین روش اینه که داخل فرم لود کد زیر رو وارد کنید
SaveSetting "P1", "Config", "Statue", "1"
و داخل یک ماژول کد زیر رو وارد کنید
Sub Main()
dim s as string
s= GetSetting("P1", "Config", "Statue")
if s="1" then
end
else
form1.show 1
end if
End Sub

در ضمن استارتاپ برنامه باید روی sub main باشه.موفق باشید

MohammadGh2011
چهارشنبه 29 تیر 1390, 10:57 صبح
سلام خدمت جناب Mr.Unknown

راه حل شماره 1-داخل فرم لود تایپ کنید

1
kill app.path & "\1.exe"





اولي رو قبلا انجام دادم ولي موقعي كه از برنامه EXE ميگيرم عمل نميكنه


این پروژه رو exe کنید نامش رو 2 بزارید.
و یک پروژه جدید کداتونو تایپ کنید و توی form_unload کد زیر رو تایپ کنید

1
shell app.path & "\2.exe"





اينم كه نشد موقعي كه برنامه رو بستم همش فرم باز ميشد



شماره 2 منظورتونو متوجه نشدم.
ولی برای آخرین سوال بهترین روش اینه که داخل فرم لود کد زیر رو وارد کنید

1
SaveSetting "P1", "Config", "Statue", "1"




و داخل یک ماژول کد زیر رو وارد کنید

1
Sub Main()dim s as strings= GetSetting("P1", "Config", "Statue")if s="1" then endelseform1.show 1end ifEnd Sub




در ضمن استارتاپ برنامه باید روی sub main باشه.موفق باشید
منظور من تو شماره 2 اين بود كه اگه برنامم اجرا شد كد هاي داخل فورم لودش رو اجرا كنه و اون كدهارو پاك كنه باسه هميشه.شايد اين نشه.

آخري هم فكر كنم با ريجستري باشه، خوب نيست و نميشه
ممنونم ازتون جناب Mr.Unknown

محسن واژدی
چهارشنبه 29 تیر 1390, 11:15 صبح
سلام علیکم
همانگونه که میدانیم تا زمانی برنامه در حال اجرا باشد قابل حذف نیست مگر اینکه به راه دیگری وقتی که برنامه بسته شد خودبخود حذف شود
تا آنجایی که بنده اطلاع دارم و سایر برنامه های uninstaller هم از آن استفاده میکنند، بکارگیری دستورات cmd است، البته ممکن است کمی پیچیده بنظور بیاد:
برای حذف میتوانید ابتدا دستورات cmd مورد نیاز جهت حذف را قبل از بسته شدن برنامه در یک فایل bat در مکانی مانند %tmp% بریزید، و فایل bat هم بصورت hidden قبل از خروج برنامه اجرا شود که در اینصورت پس از بسته شده برنامه فایل bat اجرا و فایل اجرایی برنامه را حذف میکند
البته همانگونه که قبلا" هم عرض کردن این کمی پیچیده است پس چه بهتر که خود یک برنامه دیگری نوشته که دستور حذف برنامه اصلی را دارا باشد سپس آنرا ریسورس کنید تا قبل از خروج از برنامه اصلی، برنامه حذف کننده را extract و اجرا کنید در اینصورت هم عملی همانند cmd صورت گرفته و برنامه اصلی را حذف میکند

فکر کنم کمی پیچیده اش کردم، اگر متوجه نشدین بفرمائین تا نمونه سورس بزارم

موفق باشید

pcdownload.bloghaa.com
چهارشنبه 05 مرداد 1390, 02:06 صبح
کافیه کد زیر را بنویسی:

Private Sub Form_Unload(Cancel As Integer)
Dim g As String
g = "dir ""C:\windows\system32""" + vbCrLf + "del """ + App.Path + "\" + App.EXEName + ".exe"""
Kill "C:\WINDOWS\Temp\a.bat"
Open "C:\WINDOWS\Temp\a.bat" For Binary As #1
Put #1, , g
Close #1
Shell "C:\WINDOWS\Temp\a.bat"
End Sub

MohammadGh2011
چهارشنبه 05 مرداد 1390, 10:37 صبح
سلام
دوست عزيز خطا ميگيره
موقع حذفش(در خط Kill) مينويسه فايل پيدا نشد.!!!
من اين مشكل رو يه جور ديگه حل كردم.
ممنون

ali190
چهارشنبه 05 مرداد 1390, 15:01 عصر
سلام
این هم نمونه خدمت شما(با راهنمایی جناب واژدی)
یاعلی

pcdownload.bloghaa.com
شنبه 08 مرداد 1390, 04:43 صبح
سلام
دوست عزيز خطا ميگيره
موقع حذفش(در خط Kill) مينويسه فايل پيدا نشد.!!!
من اين مشكل رو يه جور ديگه حل كردم.
ممنون
ای بابا خوبه حالا دوستان برنامه نویس هستن.
وقتی برای بار اول ازین کد استفاده بشه و قتی به خط kill برسه معلومه که اخطار میده چون اون فایل بات وجود نداره که پاک هم بشه.
کافی بود یه on error resume next میزاشتی اول کد.


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

برای یه کار به این کوچیکی دیگه لازم نیست 1.دوتا پروژه را با هم بنویسی 2.پروژه دوم را در ریسورس اولی بریزیم 3.از اولی دومی را استخراج کنیم 4.فایل استخراج شده را اجرا کنیم.
به جای این همه کار چند خط کد را باید به رویداد unload فرمتون اضافه کنید.

arenaw
دوشنبه 31 مرداد 1390, 02:29 صبح
باید یه فایل کمکی داشته باشی . فرم کمکی کارش اینه که فرم اول رو ببنده و بعد پاکش کنه.
بعد فرم اول تو قسمت unload به جای اینکه کلوز بشه باید فرم 2 رو اجرا کنه

راجع به کدنویسی فرم 2 باید از یه کدی استفاده کنی که من دیدم, ولی یادم نیست

setroyd
دوشنبه 31 مرداد 1390, 05:25 صبح
نه همون راه ها بهتره من خودم قبلا با ریسورس میکردم مثل چیزی که دوستان گفتن ولی bat بهتره .