صفحه 1 از 3 123 آخرینآخرین
نمایش نتایج: از شماره 1 تا 10 , از مجموع 22

موضوع: روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

  1. #1
    مدیر انجمن کامپیوتر
    همديگر را دوست داشته باشيم و بهم احترام بگذاريم
    تاریخ عضویت
    Mar 2012
    محل سکونت
    زیر سایه شما
    نوشته ها
    801
    تشکر تشکر کرده 
    3,495
    تشکر تشکر شده 
    3,460
    تشکر شده در
    796 پست
    حالت من : ShadOsarhal
    قدرت امتیاز دهی
    13719
    Array

    روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    سلام

    همونطور که شما دوستان ميدونيد برنامه‌هاي پرتابل يا قابل حمل مزيتهاي بسياري دارند. اگه شما گاهي و بسته به مورد احتياج به نرم‌افزاري داريد بهتر است که بصورت پرتابل داشته باشيد.

    روشهاي زيادي براي پرتابل سازي نرم افزارها وجود دارد:
    1- پرتابل سازي با نرم افزارهاي ويژه مانند VMware ThinApp و Spoon Studio
    2- پرتابل سازي دستي به کمک کد نويسي و استفاده از برنامه‌هايي مانند AutoIT و NSIS و حتي WinRAR

    اما هميشه کساني هستند که ابتکارات جالب بخرج ميدهند و به دليل تسلط کامل به برنامه‌نويسي و اصطلاحاً کد نويسي، روشهاي جديدي و خاصي براي توليد برنامه‌هاي پرتابل بوجود مياورند!

    تقريباً ماه پيش برنامه‌اي دانلود کردم که ويژگي خاصي داشت. يک فايل نصبي بهمراه دو فايل بچ (با فرمت cmd) که با استفاده از فايلها، فايل نصبي به دو روش 1- نصب سايلنت و اکتيو 2- نصب بصورت پرتابل خروجي ميداد. فايل نصبي مشترک و کم حجم بود!
    اون برنامه‌رو طي تاپيکي معرفي کردم و از جناب مهندس شيرين‌زبان، استاد خودم خواستم بررسي و روش ساخت چنين فايلهايي مشخص کنند.

    http://ariadl.ir/thread170360.html

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

    استاد، سپاس
    دوستدار هميشگي شما "eDvArDo"

    7n1wj1mlvxoxejezfhye

    دلِ هر ايراني كه براي ايران نمي‌تپد، بهتراست نتپد! (پروفسور حسابي)

    آيا پاسخ سوالي را بدانم بهتر است، يا اينكه ندانسته از دنيا بروم؟! (ابوريحان بيروني)

    پس از سالها جهد و تلاش در كسب علم و معرفت، دانستم كه هيچ ندانستم! (علامه حسن زاده آملي)

  2. 9 کاربر مقابل از eDvArDo عزیز به خاطر این پست مفید تشکر کرده اند.


  3. #2
    مدیر سایت
    دوستتان دارم
    تاریخ عضویت
    Jan 2012
    محل سکونت
    تهران
    نوشته ها
    2,286
    تشکر تشکر کرده 
    4,798
    تشکر تشکر شده 
    13,155
    تشکر شده در
    2,296 پست
    قدرت امتیاز دهی
    45307
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    حدود یک ماه پیش دوست بسیار ارجمند و با ارزشم (eDvArDo) طی پیامی برنامه ای را معرفی کرده و در مورد آن
    سوالاتی مطرح فرمودند .
    من با خود برنامه کاری ندارم ولی نکته ای در این رابطه بشدت من را به فکر فرو برد.و آن این بود که کاربری برنامه ای
    را بازسازی کرده و سپس تغییراتی در آن داده بود که که محاسن مختلفی داشت.

    اولا"حجم برنامه بازسازی شده توسط ایشان کمتر از حجم برنامه اصلی بود. ثانیا" کار بر مورد بحث کاری کرده بود که
    بتوان به سه طریق مختلف از آن استفاده کرد:
    1. با اجرای فایل اصلی ، برنامه بصورت عادی نصب شده و اکتیو هم میشود.
    2. در کنار فایل مورد بحث یک فایل Batch قرار داده بود که با اجرای آن برنامه بصورت مخفی و اکتیو شده نصب می شود.
    3. و نیز فایل Batch دیگری هم گذاشته که با اجرای آن ، نوع پرتابل برنامه که قابل استفاده و اکتیو شده می باشد
    ایجاد می شود.

    اینکه او چگونه کاری کرده بود که برنامه نصب بتواند بفهمد که ما چه نوع نصبی میخواهیم ، و بر اساس خواسته ما
    اجرا شود برایم سوال بزرگی بود.
    و پیدا کردن جواب سوال واقعا" مشکل بود و روز های زیادی طول کشید.
    با تجزیه و تحلیل فایل مورد بحث نتوانستم به نتیجه برسم ، چون اولا" ضد ویروسم فایل مورد بحث را ویروس شناسائی
    میکرد و ثانیا" فایل مورد بحث توسط یک کاربر روسی و به زبان روسی طراحی شده بود و من نمیتوانستم از آن سر
    در بیاورم.
    لذا تا مدت ها بعد فقط توانسته بودم بفهمم که این برنامه توسط NSIS کامپایل شده است.
    بیشتر که تحقیق کردم به یک سایت روسی رسیدم که که در آنجا تعداد دیگری از برنامه های باز سازی شده توسط
    کاربر مورد بحث وجود داشت. چند صد مگا بایت هدر داده و اکثریت برنامه های بازسازی شده توسط ایشان را دانلود
    کردم که شاید نکته اصلی را در یکی از آن ها متوجه شوم.
    ولی بیفایده بود. تنها سرنخ بدست آمده همان بود که گفتم یعنی فقط فهمیدم که برنامه توسط NSIS کامپایل شده
    است.
    و در انتها بخودم گفتم که حالا که کاربری توانسته این کار را توسط NSIS انجام دهد ، پس نکته در خود برنامه NSIS
    بوده و من باید آن را کشف کنم و جواب خیلی ساده بود.
    ===============
    =========
    تا به امروز با انواع متنوعی از Setup ساز ها آشنا شده ام که یکی از آن ها برنامه رایگان NSIS هست و به شدت عقیده
    دارم که در آینده ، یکه تاز میدان Setup ساز ها ، برنامه رایگان NSIS خواهد بود.
    این برنامه خیلی بیشتر از یک Setup ساز ساده بوده و یک کاربر با یاد گیری زبان اسکریپتی آن ، واقعا" میتواند هر کاری
    انجام دهد.
    همه Setup ساز های مطرح ،یک سری قابلیت ها دارند که از اول معلوم بوده و توسط سازنده اعلام شده است. و این
    برنامه ها فقط میتوانند در محدوده همین قابلیت ها عمل کنند.
    ولی برنامه NSIS اینگونه نیست. چون در صورت استفاده عادی مثل بقیه Setup ساز ها عمل کرده ولی اگر کاربری زبان
    اسکریپی آن را یاد بگیرد ، میتواند قابلیت های متنوع دیگری به آن اضافه نماید.

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

    [SIGPIC][/SIGPIC]

  4. 9 کاربر مقابل از Magsoud عزیز به خاطر این پست مفید تشکر کرده اند.


  5. #3
    مدیر سایت
    دوستتان دارم
    تاریخ عضویت
    Jan 2012
    محل سکونت
    تهران
    نوشته ها
    2,286
    تشکر تشکر کرده 
    4,798
    تشکر تشکر شده 
    13,155
    تشکر شده در
    2,296 پست
    قدرت امتیاز دهی
    45307
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    کاری که ما میخواهیم انجام بدهیم این است که:

    مرحله اول: برنامه ای را انتخاب کنیم و تغییراتی درآن ایجاد نمائیم و آن را دوباره از نو بسازیم. ولی طوری که بعد از
    ساخت مجدد ، اولا" حتی الامکان حجمش کمتر شده باشد و ثانیا" بعد از اجرا نیاز به اکتیو کردن نداشته و خودش
    اکتیو شده باشد.

    مرحله دوم : نوع پرتابل برنامه را درست کنیم که این هم اکتیو شده باشد.

    مرحله نهائی : فایل های حاصل از دو مرحله اول و دوم را طوری با هم مخلوط کرده و از کلشان یک فایل نصبی جدید
    بسازیم که به شرح زیر عمل کند:
    1. اگر خود فایل Setup ساخته شده ، بطور عادی اجرا شود برنامه بطور عادی نصب شده و اتوماتیک اکتیو شود.
    2. اگر توسط یک فایل Batch (با سویچ S) ، فایل Setup ساخته شده را اجرا کنیم ، برنامه بطور مخفی نصب و اکتیو
    شود.
    3. اگر توسط یک فایل Batch دیگر (با سویچ P) ، فایل Setup ساخته شده را اجرا کنیم ، بجای نصب نوع پرتابل برنامه
    ساخته شده و آماده استفاده شود.

    در این آموزش میخواهیم که اعمال بالا را با استفاده از برنامه NSIS انجام دهیم. لذا برای درک مطالبی که توضیح داده
    خواهد شد ، ضرورت دارد که کاربر با برنامه NSIS آشنا بوده و حداقل اطلاعات مقدماتی را در رابطه با این برنامه داشته
    باشد.
    چون اگر بخواهیم که تمام نکات را از صفر شروع و توضیح دهیم ، مدت زمان چند ماهه لازم خواهد بود که از حوصله
    حقیر (بعلت مریضی و سن بالا) خارج است. و از طرف دیگر خود بنده هم برنامه NSIS را بطور کامل وارد نبوده و فقط
    به اندازه رفع نیاز هایم بلدم.

    من برای این آموزش برنامه CCleaner Pro 5.02.5101 را انتخاب کرده و نمونه فایل ساخته شده این برنامه، با مشخصات
    گفته شده در بالا را با حجم 2.51 مگابایت در لینک زیر قرار دادم.

    CCleaner.rar

    آن را دانلود و تست فرمائید تا کاملا" با نوع کار آشنا شوید.
    در ادامه چگونگی ساخت فایل موجود در لینک بالا را صحبت خواهیم کرد.

    [SIGPIC][/SIGPIC]

  6. 8 کاربر مقابل از Magsoud عزیز به خاطر این پست مفید تشکر کرده اند.


  7. #4
    مدیر سایت
    دوستتان دارم
    تاریخ عضویت
    Jan 2012
    محل سکونت
    تهران
    نوشته ها
    2,286
    تشکر تشکر کرده 
    4,798
    تشکر تشکر شده 
    13,155
    تشکر شده در
    2,296 پست
    قدرت امتیاز دهی
    45307
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    مرحله اول: تهیه فایل های مورد نیاز
    ===================

    در اولین قدم لازم است که برنامه CCleaner Pro 5.02.5101 را که در اکثر سایت های ایرانی و خارجی موجود است
    دانلود نموده و سپس آن را بطور عادی نصب و اکتیو کنید.
    تمام فایل های برنامه درون پوشه ای بنام CCleaner داخل پوشه Program Files قرار گرفته اند.
    یک کپی از پوشه CCleaner برداشته و جائی مثلا" در روت درایو D ذخیره کنید.
    حالا دیگر نیازی به برنامه نصب شده نداشته و میتوانید آن را حذف نمائید.

    ساختار برنامه CCleaner خیلی ساده است ، طوری که اگر ما پوشه D:\CCleaner را به هر کامپیوتر دیگری کپی کرده
    و سپس فایل CCleaner.exe را از داخل آن اجرا کنیم ، خواهیم دید که برنامه کامل کار کرده و اکتیو هم هست.

    اکنون پوشه D:\CCleaner را باز کنید. درون آن پوشه دیگری بنام Lang خواهید دید. این پوشه حاوی زبان های مختلفی
    هست که برنامه میتواند با آن ها کار کند.ما فقط به زبان انگلیسی برنامه نیاز داریم. لذا وارد پوشه Lang شده و تمام
    فایل های داخل آن بغیر از فایل lang-1065.dll را حذف کنید.
    با این کار حجم برنامه حدود 2.5 مگا بایت کمتر خواهد شد.

    تا اینجای کار ما اکثریت فایل های اولیه مورد نیاز برای ساخت پروژه را در اختیار داریم.لذا به مرحله دوم کار می رویم.

    مرحله دوم: ساخت نوع پرتابل برنامه (به روش PortableApps.com)
    ===================================

    در رابطه با ساخت برنامه های پرتابل بروش PortableApps.com قبلا" در همین انجمن ، در لینک زیر توضیح داده ام:

    ساخت نرم افزارهاي پرتابل به شيوه PortableApps.com با "PortableApps.com Launcher 2.2"

    مطابق روش توضیح داده شده در لینک بالا با استفاده از فایل های موجود در پوشه D:\CCleaner نوع پرتابل برنامه
    CCleaner Pro 5.02.5101 را درست نمائید.

    مرحله سوم: ساخت فایل اصلی برابر نیاز های گفته شده در اول بحث
    =======================================

    تازه به جائی رسیدیم که بنده بتوانم دادن پاسخ به سوال دوست ارجمندم (eDvArDo) را شروع بکنم.
    در این مرحله ما تمام فایل های مورد نیاز پروژه مورد بحث را داریم .
    اگر مطابق شروح داده شده عمل کرده باشید ، در حال حاظر باید محتوای زیر را داشته باشید:

    1. پوشه D:\CCleaner که دارای محتوای زیر است:

    کد:
    D:\CCleaner\branding.dll
    D:\CCleaner\CCleaner.dat
    D:\CCleaner\CCleaner.exe
    D:\CCleaner\uninst.exe
    D:\CCleaner\Lang\lang-1065.dll
    2. اگر نمونه پرتابل برنامه را در پوشه فرضا" D:\Portable CCleaner 5.02 درست کرده باشید. در حال حاظر این پوشه
    دارای محتوای زیر است:

    کد:
    D:\Portable CCleaner 5.02\Portable CCleaner502.exe
    D:\Portable CCleaner 5.02\Appdata\branding.dll
    D:\Portable CCleaner 5.02\Appdata\CCleaner.dat
    D:\Portable CCleaner 5.02\Appdata\CCleaner.exe
    D:\Portable CCleaner 5.02\Appdata\Lang\lang-1065.dll
    اگر دقت بفرمائید می بینید که فایل های داخل پوشه های D:\CCleaner و D:\Portable CCleaner 5.02 دقیقا" مثل
    هم هستند و فقط فرق های زیر را دارند:

    1. فایل uninst.exe در پوشه D:\CCleaner موجود ولی در پوشه D:\Portable CCleaner 5.02 وجود ندارد.
    2. فایل Portable CCleaner502.exe در پوشه D:\CCleaner وجود نداشته ولی در پوشه D:\Portable CCleaner 5.02
    وجود دارد.
    3. نام پوشه ها متفاوت هستند.

    اینکه نام پوشه ها متفاوت هستند مهم نیست چون در رابطه با این مسئله با کد نویسی NSIS مشکل را حل خواهیم
    کرد.
    و در کل برای پروژه مورد بحث، نیاز به همه فایل های داخل پوشه D:\CCleaner بعلاوه فایل Portable CCleaner502.exe
    (که در پوشه پرتابل قرار دارد) داریم.
    بنابر این اکنون که همه نیاز های اولیه آماده هستند ، مرحله آخر کارمان را در جلسه بعد انجام می دهیم.

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

    در جوانی سالمی ولی در پیری هر ماه هزینه های دوا و دکتر رهایت نمیکنند
    وووووووووووووووووووووو

    پس بر من ایراد نگیرید که چرا مطالبم را تکه تکه و بمرور می نویسم و یکدفعه تمام نمی کنم.


    [SIGPIC][/SIGPIC]

  8. 9 کاربر مقابل از Magsoud عزیز به خاطر این پست مفید تشکر کرده اند.


  9. #5
    مدیر سایت
    دوستتان دارم
    تاریخ عضویت
    Jan 2012
    محل سکونت
    تهران
    نوشته ها
    2,286
    تشکر تشکر کرده 
    4,798
    تشکر تشکر شده 
    13,155
    تشکر شده در
    2,296 پست
    قدرت امتیاز دهی
    45307
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    در اول بحث گفتیم که میخواهیم یک برنامه را دوباره باز سازی کنیم بطوریکه سه مشخصه زیر را داشته باشد:

    1. اگر فایل ساخته شده را بطور نرمال اجرا کنیم ، برنامه بصورت عادی نصب و اکتیو شود.
    2. اگر فایل ساخته شده را با دستور S/ اجرا کنیم ، برنامه بصورت مخفی نصب و اکتیو شود.
    3. اگر فایل ساخته شده را با دستور P/ اجرا کنیم ، نوع پرتابل و اکتیو شده به ما تحویل داده شود.

    توضیح : مشخصه دوم یعنی اجرای فایل نهائی با سویچ S/ نیاز به کد نویسی نداشته و هر فایل اجرائی ساخته شده
    با برنامه NSIS ذاتا" این ویژگی را دارد

    خوب ، بیائید کد نویسی با NSIS را شروع کنیم.
    1. در روت درایو D پوشه ای بنام 00 درست کرده و سپس داخل پوشه D:\00 نیز پوشه دیگری بنام Files درست نمائید.
    2. کلیه محتویات پوشه D:\CCleaner را به درون پوشه D:\00\Files کپی کنید.
    3. فایل D:\Portable CCleaner 5.02\Portable CCleaner502.exe را هم به درون پوشه D:\00\Files کپی کنید.
    4. یک آیکن برای فایل نهائی که ساخته خواهد شد تهیه و آن را با نام فرضا" mcs.ico درون پوشه D:\00 بگذارید.

    اگر درست عمل کرده باشید ، باید محتوای زیر را در روت درایو D داشته باشید:

    کد:
    D:\00\mcs.ico
    D:\00\Files\branding.dll
    D:\00\Files\CCleaner.dat
    D:\00\Files\CCleaner.exe
    D:\00\Files\Portable CCleaner502.exe
    D:\00\Files\uninst.exe
    D:\00\Files\Lang\lang-1065.dll
    =============
    گفتیم که اولین خاصیت فایل نهائی باید این باشد که با اجرای آن ، برنامه CCleaner بطور عادی نصب شود.
    پس می آئیم و اول کد های مربوط به نصب عادی برنامه CCleaner را می نویسیم:

    برنامه notepad را باز کرده و کد های زیر را در آن تایپ نموده و سپس آن را با نام CCleaner.nsi درون پوشه D:\00
    ذخیره کنید:

    کد:
    Outfile "CCleaner pro 5.02.exe"
    
    !include "MUI.nsh"
    
    !define MUI_ICON "mcs.ico"
    
    !insertmacro MUI_PAGE_WELCOME
    !insertmacro MUI_PAGE_INSTFILES
    !insertmacro MUI_PAGE_FINISH
    !insertmacro MUI_LANGUAGE "English"
    
    InstallDir "$PROGRAMFILES\CCleaner"
    InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
    ShowInstDetails show
    ShowUnInstDetails show
    
    section 
    
      SetOutPath "$PROGRAMFILES\CCleaner"
         WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CCleaner.exe" "" "%ProgramFiles%\CCleaner\CCleaner.exe"
         WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "DisplayIcon" "%ProgramFiles%\CCleaner\CCleaner.exe"
         WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "DisplayName" "CCleaner 5.02.5101"
         WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "DisplayVersion" "5.02.5101"
         WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "UninstallString" "%ProgramFiles%\CCleaner\uninst.exe"
    
      File "Files\branding.dll"
      File "Files\CCleaner.dat"
      File "Files\CCleaner.exe"
      File "Files\uninst.exe"
      CreateDirectory "$SMPROGRAMS\CCleaner"
      CreateShortCut "$SMPROGRAMS\CCleaner\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
      CreateShortCut "$SMPROGRAMS\CCleaner\Uninstall.lnk" "$PROGRAMFILES\CCleaner\uninst.exe"
      CreateShortCut "$DESKTOP\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
      CreateShortCut "$QUICKLAUNCH\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
    
      SetOutPath "$PROGRAMFILES\CCleaner\Lang"
      File "Files\Lang\lang-1065.dll"
    
    sectionend
    کد های بالا برای دوستانی که با برنامه NSIS تجربیاتی دارند ، واضح است ولی بهر حال مختصری توضیح می دهم:

    _ در سطر اول کد به برنامه میگوییم که فایل نهائی را با نام CCleaner pro 5.02.exe درست کند.
    _ با کد های سطور بعد تا عبارت section ، به NSIS میگویم که چه پنجره هائی به کاربری که میخواهد فایل نهائی را
    اجرا کند ، نشان دهد و نیز میگوئیم که فایل ها را باید در پوشه ای بنامCCleaner درون پوشه Program Files قرار دهد.

    _ با کد های مابین دو واژه section و sectionend به NSIS میگوییم که در حین نصب ،کدام فایل ها را باید در کجا ها
    قرار داده و چه شورت کات هائی بسازد و وو............

    این یک کد بسیار ساده است و من در آن ساده ترین روش را استفاده کرده ام.

    حال اگر روی فایل D:\00\CCleaner.nsi کلیک راست کرده و گزینه Compile NSIS script را انتخاب کنید چند لحظه بعد
    اگر اشکالی نباشد فایلی بنام CCleaner pro 5.02.exe در داخل پوشه D:\00 درست خواهد شد که اگر آن را اجرا کنید
    برنامه CCleaner بطور عادی نصب خواهد شد.

    تا اینجا شرط اول نیاز ما برآورده شد.برای اینکه شروط دیگر هم برآورده شوند لازم است که فایل D:\00\CCleaner.nsi
    را با notepad باز کرده و کد های موجود در داخل آن را تغییر دهیم.
    ولی قبل از گفتن کد ها ، لازم میدانم که مطالبی را شرح دهم تا راحت تر بتوانید کار کد هائی که خواهیم گفت را
    متوجه شوید.

    ما نیاز داریم که در داخل کد هایمان اعمال شرطی انجام دهیم.
    یعنی باید بطریقی یه فایلمان بگوییم که اگر حالت x بود کار فلان را انجام بده و اگر حالت y بود کار بهمان را بکن.

    در بحث این تاپیک ، ما میخواهیم که برنامه بتواند دستور داده شده توسط ما را شناسائی کرده و برحسب آن اجرا شود.
    ما برای اینکار باید از دستورات شرطی و توابع موجود در NSIS استفاده کنیم.
    اولین لازمه استفاده از این ویژگی ها این است که در سطور اول کدمان دو سطر زیر را اضافه کنیم:

    کد:
    !include LogicLib.nsh
    !include FileFunc.nsh
    دستوری بنام GetOptions وجود دارد که کارش دریافت اطلاعات موجود در دستورات خط فرمان است.ما از این دستور
    در کد هایمان بهره خواهیم برد.
    این فرمان با ترکیبی که عرض خواهم کرد ،میتواند بفهمد که آیا عبارت مورد نظر ما در خط فرمان وجود دارد یا نه.ولی
    کاری برای ما انجام نمیدهد.
    پس چگونه از این دستور استفاده کنیم؟
    ما اول می آئیم و یک متغیر به NSIS معرفی میکنیم. وقتی متغیری را معرفی کردیم ، NSIS جائی را در حافظه کامپیوتر
    مخصوص این متغیر درست میکند.
    ما میخواهیم که فایل نهائی اگر ببیند دستوری با پارامتر P/ اجرا شده کار بخصوصی را انجام دهد. برای این منظور اول
    به کد هایمان متغیری بنام فرضا" PP (یا هر عبارت دلخواه) معرفی می کنیم. این معرفی با عبارت Var انجام میشود
    لذا برای معرفی متغیر PP کد زیر را وارد می کنیم:

    کد:
    Var PP
    شاید بگویید برای چه باید متغیر معرفی کنیم؟
    عجله نکنید. قضیه این است که ما میخواهیم به دستور GetOptions بگوئیم که فرضا" اگر دید داخل دستورات خط فرمان
    پارامتر P/ قرار دارد آن را به ما خبر دهد.او برای اینکار فقط میتواند از متغیر های ذاتی برنامه NSIS استفاده کند.
    این متغیر ها از پیش تعریف شده هستند.
    لذا ما در کد هایمان به دستور GetOptions می گوئیم که فرضا" اگر دید پارامتر P در خط فرمان وجود دارد عدد 1 را داخل
    متغیر ذاتی فرضا" 0 ذخیره کند.

    و بعد با استفاده از کد های دیگر به برنامه میگوئیم که اطلاعات موجود در متغیر ذاتی 0 را در داخل متغیری که ما معرفی
    کردیم (یعنی متغیر PP) قرار دهد.

    حال که به اینجا رسیدیم میتوانیم آخرین مرحله کارمان را انجام دهیم یعنی به برنامه بگوئیم اگر داخل متغیر PP عدد 1
    بود برنامه را بصورت پرتابل ارایه کند و اگر 1 نبود بطور عادی نصب کند.

    میدانم مطلب مقداری گیج کننده شد. بهمین خاطر مقداری در مورد مطالبی که گفته شد فکر کنید و در جلسه بعد
    کد نهائی را عرض میکنم.

    [SIGPIC][/SIGPIC]

  10. 8 کاربر مقابل از Magsoud عزیز به خاطر این پست مفید تشکر کرده اند.


  11. #6
    مدیر سایت
    دوستتان دارم
    تاریخ عضویت
    Jan 2012
    محل سکونت
    تهران
    نوشته ها
    2,286
    تشکر تشکر کرده 
    4,798
    تشکر تشکر شده 
    13,155
    تشکر شده در
    2,296 پست
    قدرت امتیاز دهی
    45307
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    قبل از گفتن کد کامل لازم میدانم که کد هائی را که مشاهده خواهید کرد مختصرا" توضیح دهم.

    __ با نوشتن کد Var PP به برنامه میگویم که اطاقکی را در حافظه کامپیوتر بنام آقای PP اجاره کند.

    __ با نوشتن کد زیر به برنامه میگویم که خط فرمان را نگاه کند و ببیند که در آن پارامتر p/ وجود دارد یا نه و نتیجه را
    در متغیر ذاتی 0 $ قرار دهد:

    کد:
    ${GetOptions} $CMDLINE "/p" $0
    __ با کد های زیر به برنامه میگویم که اگر محتوای متغیر ذاتی 0 $ ، بودن پارامتر p/ را نشان می دهد ، به اطاقک
    اجاره شده آقای PP رفته و عدد 1 را در آن جا بگذارد ولی اگر محتوای متغیر ذاتی 0 $ ، نبودن پارامتر p/ را نشان
    می دهد ، در اطاقک PP رفته و عدد 0 را قرار دهد:

    کد:
    ${IfNot} ${Errors}
        StrCpy $PP 1
    ${Else}
        StrCpy $PP 0
    ${EndIf}
    __ و با مابقی کد های بعدی به برنامه میگویم که اگر داخل اطاقک PP حاوی عدد 0 بود ، عمل نصب معمولی را انجام
    داده و گرنه نوع پرتابل برنامه را ارایه کند.

    در نهایت فایل D:\00\CCleaner.nsi را با notepad باز کرده و کد های موجود در داخل آن را بصورت زیر باید تغییر دهید:

    کد:
    !define PRODUCT_NAME "CCleaner"
    !define PRODUCT_VERSION "502"
    
    !include "MUI.nsh"
    !include LogicLib.nsh
    !include FileFunc.nsh
    
    !define MUI_ABORTWARNING
    !define MUI_ICON "mcs.ico"
    
    !insertmacro MUI_PAGE_WELCOME
    !insertmacro MUI_PAGE_INSTFILES
    !insertmacro MUI_PAGE_FINISH
    !insertmacro MUI_LANGUAGE "English"
    
    Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
    Outfile "CCleaner pro 5.02.exe"
    InstallDir "$PROGRAMFILES\CCleaner"
    InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
    ShowInstDetails show
    ShowUnInstDetails show
    requestexecutionlevel user
    
    Var PP
    
    section 
    ${GetOptions} $CMDLINE "/p" $0
    
    ${IfNot} ${Errors}
        StrCpy $PP 1
    ${Else}
        StrCpy $PP 0
    ${EndIf}
    
    ${If} $PP = 0
    
      SetOutPath "$PROGRAMFILES\CCleaner"
    WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\CCleaner.exe" "" "%ProgramFiles%\CCleaner\CCleaner.exe"
    WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "DisplayIcon" "%ProgramFiles%\CCleaner\CCleaner.exe"
    WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "DisplayName" "CCleaner 5.02.5101"
    WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "DisplayVersion" "5.02.5101"
    WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\CCleaner" "UninstallString" "%ProgramFiles%\CCleaner\uninst.exe"
    
      File "Files\branding.dll"
      File "Files\CCleaner.dat"
      File "Files\CCleaner.exe"
      File "Files\uninst.exe"
      CreateDirectory "$SMPROGRAMS\CCleaner"
      CreateShortCut "$SMPROGRAMS\CCleaner\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
      CreateShortCut "$SMPROGRAMS\CCleaner\Uninstall.lnk" "$PROGRAMFILES\CCleaner\uninst.exe"
      CreateShortCut "$DESKTOP\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
      CreateShortCut "$QUICKLAUNCH\CCleaner.lnk" "$PROGRAMFILES\CCleaner\CCleaner.exe"
    
      SetOutPath "$PROGRAMFILES\CCleaner\Lang"
      File "Files\Lang\lang-1065.dll"
    ${Else}
      SetOutPath "$EXEDIR\CCleanerPortable"
      File "Files\Portable CCleaner502.exe"
      SetOutPath "$EXEDIR\CCleanerPortable\Appdata"
      File "Files\branding.dll"
      File "Files\CCleaner.dat"
      File "Files\CCleaner.exe"
      SetOutPath "$EXEDIR\CCleanerPortable\Appdata\Lang"
      File "Files\Lang\lang-1065.dll"
    
    ${EndIf}
    
    sectionend
    با کامپایل کردن این فایل فایل حاصل برابر میل شما عمل خواهد کرد.
    موفق باشید.

    [SIGPIC][/SIGPIC]

  12. 7 کاربر مقابل از Magsoud عزیز به خاطر این پست مفید تشکر کرده اند.


  13. #7
    مدیر انجمن کامپیوتر
    همديگر را دوست داشته باشيم و بهم احترام بگذاريم
    تاریخ عضویت
    Mar 2012
    محل سکونت
    زیر سایه شما
    نوشته ها
    801
    تشکر تشکر کرده 
    3,495
    تشکر تشکر شده 
    3,460
    تشکر شده در
    796 پست
    حالت من : ShadOsarhal
    قدرت امتیاز دهی
    13719
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    سلام

    استاد عزيز، جناب مهندس شيرين‌زبان

    از زحمات شما بسيار سپاسگزارم. اميدوارم لايق محبتهاي شما باشيم. اميدوارم خداوند به شما عمري باعزت، سلامتي و شادي عنايت بفرمايد.

    بنظر ميرسد که هرچه برنامه‌اي داراي فايلهاي بيشتري بعد از نصب باشد، اين کدنويسي طولاني‌تر و اگر برنامه مورد نظر ميبايست با سريال اکتيو بشود، پيچيدگي کدنويسي هم بيشتر خواهد شد!

    ساختار برنامه CCleaner خیلی ساده است ، طوری که اگر ما پوشه D:\CCleaner را به هر کامپیوتر دیگری کپی کرده و سپس فایل CCleaner.exe را از داخل آن اجرا کنیم ، خواهیم دید که برنامه کامل کار کرده و اکتیو هم هست.
    بنده متوجه نشدم که آيا برنامه موردنظر شما رايگان بود يا نسخه CCleaner Technician Edition ويا CCleaner Business Edition؟! (چون دو ورژني که نام بردم فقط نياز به اکتيو کردن دارند)

    اي کاش برنامه اي ديگر که نياز به رجيست يا اکتيو کردن دارد، بصورت شرحي که در بالا داده‌ايد، قرار دهيد.

    سپاس، استاد
    دوستدار هميشگي شما "eDvArDo"

    7n1wj1mlvxoxejezfhye

    دلِ هر ايراني كه براي ايران نمي‌تپد، بهتراست نتپد! (پروفسور حسابي)

    آيا پاسخ سوالي را بدانم بهتر است، يا اينكه ندانسته از دنيا بروم؟! (ابوريحان بيروني)

    پس از سالها جهد و تلاش در كسب علم و معرفت، دانستم كه هيچ ندانستم! (علامه حسن زاده آملي)

  14. 6 کاربر مقابل از eDvArDo عزیز به خاطر این پست مفید تشکر کرده اند.


  15. #8
    مدیر سایت
    دوستتان دارم
    تاریخ عضویت
    Jan 2012
    محل سکونت
    تهران
    نوشته ها
    2,286
    تشکر تشکر کرده 
    4,798
    تشکر تشکر شده 
    13,155
    تشکر شده در
    2,296 پست
    قدرت امتیاز دهی
    45307
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    ادواردوی عزیز ، ضمن سپاسگزاری از محبتی که به حقیر دارید

    1. بله در این روش اگر برنامه مورد نظر فایل های بیشتری داشته و نیاز به سریال و غیره داشته باشد ، کار سخت تر می شود.
    2. جمله ای که در رابطه با برنامه CCleaner عرض کردم در رابطه با همه ورژن های برنامه صادق بوده ولی در این بحث نوع Pro
    مورد نظر بود.
    3. چشم سعی میکنم برنامه دیگری را هم توضیح دهم

    [SIGPIC][/SIGPIC]

  16. 7 کاربر مقابل از Magsoud عزیز به خاطر این پست مفید تشکر کرده اند.


  17. #9
    مدیر سایت
    دوستتان دارم
    تاریخ عضویت
    Jan 2012
    محل سکونت
    تهران
    نوشته ها
    2,286
    تشکر تشکر کرده 
    4,798
    تشکر تشکر شده 
    13,155
    تشکر شده در
    2,296 پست
    قدرت امتیاز دهی
    45307
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    سال ها پیش برنامه کم حجمی بنام Registry Crawler دانلود کردم و از همان زمان این برنامه یکی از برنامه های مورد
    علاقه ام بوده و خیلی از موارد به دردم خورده است.
    این برنامه که آخرین ورژن آن Registry Crawler 4.5 است یک برنامه پولی بود و می بایست کد میدادیم تا اکتیو شود.
    و برنامه بعد از وارد کردن کد، آن را در رجستری ذخیره می نمود.

    متاسفانه نمیدانم به چه علتی چند سال پیش تولید این نرم افزار متوقف شد.
    بعد از مشاهده درخواست دوست ارجمندم (eDvArDo) مبنی بر:

    اي کاش برنامه اي ديگر که نياز به رجيست يا اکتيو کردن دارد، بصورت شرحي که در بالا داده‌ايد، قرار دهيد.
    دنبال یک برنامه می گشتم که تصمیم گرفتم همین برنامه را به روش گفته شده در این تاپیک تبدیل کنم.
    فایل نهائی ساخته شده این برنامه را (با حجم 422 کیلو بایت) پیوست کردم تا امتحان فرمائید تا بعد توضیحات لازم را
    عرض کنم.

    تذکر:
    =========

    برنامه پیوست به روش گفته شده در این تاپیک درست شده ولی یک فرق دارد و آن این است که برای ایجاد برنامه
    پرتابل ، پارامتر P/ در خط فرمان جواب نخواهد داد.
    برای اینکه من آن را طوری تنظیم کرده ام که برای ساخت برنامه پرتابل باید بجای پارامتر P/ از پارامتر من درآوردی
    دیگری یعنی پارامتر "eDvArDo/" استفاده شود.
    لذا اگر فایل Portable.cmd را نگاه کنید خواهید دید که در آن دستور زیر استفاده شده است:


    کد:
    "Setup.exe" /S /eDvArDo
    این برنامه فقط با دستور بالا نوع پرتابل تحویل خواهد داد و اگر بخواهید آن را با پارامتر P/ استفاده کنید ، عوض ساخت
    برنامه پرتابل ، فقط برنامه را بطور مخفی نصب خواهد کرد.

    لطفا" برنامه را در هر سه حالت (اجرای تکی خود برنامه ، اجرا توسط Portable.cmd و توسط Silent.cmd) تست کنید.
    فایل های پیوست شده

    [SIGPIC][/SIGPIC]

  18. 6 کاربر مقابل از Magsoud عزیز به خاطر این پست مفید تشکر کرده اند.


  19. #10
    مدیر انجمن کامپیوتر
    همديگر را دوست داشته باشيم و بهم احترام بگذاريم
    تاریخ عضویت
    Mar 2012
    محل سکونت
    زیر سایه شما
    نوشته ها
    801
    تشکر تشکر کرده 
    3,495
    تشکر تشکر شده 
    3,460
    تشکر شده در
    796 پست
    حالت من : ShadOsarhal
    قدرت امتیاز دهی
    13719
    Array

    پیش فرض پاسخ : روشهاي نو و جالب در ساخت فايلهاي نصبي و پرتابل، بصورت ترکيبي [eDvArDo]

    سلام

    استاد عزيزم، جناب مهندس شيرين‌زبان، فايل پيوست را دانلود کردم. هر سه روش به راحتي کار کرد و بسيار جالب بود.

    اگه ميشد با دستوري اون پنجره سياه (command prompt Window) نمايش داده نميشد بهتر ميشد!

    منتظر مراحل کاريم.

    سپاس
    دوستدار هميشگي شما "eDvArDo"

    7n1wj1mlvxoxejezfhye

    دلِ هر ايراني كه براي ايران نمي‌تپد، بهتراست نتپد! (پروفسور حسابي)

    آيا پاسخ سوالي را بدانم بهتر است، يا اينكه ندانسته از دنيا بروم؟! (ابوريحان بيروني)

    پس از سالها جهد و تلاش در كسب علم و معرفت، دانستم كه هيچ ندانستم! (علامه حسن زاده آملي)

  20. 6 کاربر مقابل از eDvArDo عزیز به خاطر این پست مفید تشکر کرده اند.


صفحه 1 از 3 123 آخرینآخرین

برچسب ها برای این تاپیک

علاقه مندی ها (بوک مارک ها)

علاقه مندی ها (بوک مارک ها)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست در پست خود ضمیمه کنید
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  

http://www.worldup.ir/