چطور ميشه اين كار رو كرد؟؟؟؟
چطور ميشه اين كار رو كرد؟؟؟؟
قبلا زیاد بحث شده هیچ راهی نداره . الا اینکه برنامه رو به win32 تبدیل کنید .
كار كه نشد نداره...من يك برنامه تحت دات نت گرفتم، كه در كنار فايل exe فايل های dll دات نت فريم ورك بود. فقط اون هایی كه برنامه ازش استفاده می كرد. مثل System.dll و ...
من چون دات نت دارم اجرا ميشه، ولی كامپيوتر بی دات نت هنوز گيرم نيومده كه بخوام امتحان كنم. ولی بايد بدون دات نت هم اجرا بشه. مگر اينكه كسی كه اين كار رو كرده بايد ديوانه باشه
اگر برنامه رو Publish بکنین، میتونین بگین که فایل های فریم ورک رو بزاره تو برنامه نصبی.
جالبش اینجاست که علاوه بر فایل های فریم ورک ؛ فایل های کریستال ریپورت و SQL x86 رو هم میتونین بزارین(کریستال واسه گزارشه و SQL هم واسه کار با دیتابیس به صورت تکی هست).
واسه این کار میتونی یه install از new project که تو ی Other project هست شروع کنی.
من چند تا از برنامه هام واسه تست Publish كردم اما چيزي دستگيرم نشد چه سودي غير از مطالبي كه بالا گفتيد داره !؟
عيبش هم اين كه هر بار كه برامه رو ران مي كني چك مي كنه كانكشن و از اين حرفا...
مي شه راهنمايي كنيد چه سودي داره ؟
دوست عزيز واسه تست بدون فريم ورك زحمتش 3 دقيقه پاك كردن فريم ورك بعد كاري مي خواي تست كني بكن دوباره نصبش كني (من براي تست Setup برنامه انجام مي دم)
ببینید با انجام این کار فایلهای نصب دات نت فریم ورک و ... رو در پوشه برنامتون کپی می کنه نه اینکه DLL ها رو کپی کنه . و شما بازم نیازمند نصب این برنامه ها هستید فقط تنها خوبیش حمل پذیر بودنشه . تازه به فرض اینکه شما DLL ها رو هم کپی کنید با CLR می خواید چی کار کنید ؟ برنامه شما برای اجرا نیاز به CLR داره . چون درسته که شما فایل exe تولید کردید ولی برای اجراش نیاز به CLR داره . اگه می خوای دقیق تر این موضوع رو بفهمی برنامتو با IL Disassembler باز کن و می بینی که کد میانی تولید کرده نه کد اسمبلی بنابراین سیستم عاملت نمی تونه این کد رو متوجه بشه و فقط CLR می فهمه . حلا اگه برنامه ای پیدا کنی که این کد رو به اسمبلی تبدیل کنه اون موقع می تونی DLL هایی که گفتی رو در پوشه برنامت کپی کنی و شاید کار کنه (اونم باز مطمئن نیستم)
دقيقا مشكل همين جاست، كه دات نت فريم ورك مياد و كد IL رو به اسمبلی تبديل ميكنه. ولی يه شركت كه با .net برنامه می نويسه كه الكی نمياد dll هایي كه با نصب .net framework نصب مشن رو كنار برنامه قرار بده.ببینید با انجام این کار فایلهای نصب دات نت فریم ورک و ... رو در پوشه برنامتون کپی می کنه نه اینکه DLL ها رو کپی کنه . و شما بازم نیازمند نصب این برنامه ها هستید فقط تنها خوبیش حمل پذیر بودنشه . تازه به فرض اینکه شما DLL ها رو هم کپی کنید با CLR می خواید چی کار کنید ؟ برنامه شما برای اجرا نیاز به CLR داره . چون درسته که شما فایل exe تولید کردید ولی برای اجراش نیاز به CLR داره . اگه می خوای دقیق تر این موضوع رو بفهمی برنامتو با IL Disassembler باز کن و می بینی که کد میانی تولید کرده نه کد اسمبلی بنابراین سیستم عاملت نمی تونه این کد رو متوجه بشه و فقط CLR می فهمه . حلا اگه برنامه ای پیدا کنی که این کد رو به اسمبلی تبدیل کنه اون موقع می تونی DLL هایی که گفتی رو در پوشه برنامت کپی کنی و شاید کار کنه (اونم باز مطمئن نیستم)
راستی خود دات نت امكانی واسه اين نداره كه برنامه رو به صورت اسمبلی توليد كنه؟ البته ميدونم كه برنامه های زيادی برای اين كار هست. ولی اون وقت ميشه يه چيزی تو مايه های ++C. منظورم اينه كه ديگه رو همه ی كامپيوتر ها اجرا نميشه و ميدونم كه يكی از مهم ترين خواص دات نت اينه كه باعث ميشه تا تو همه كامپيوتر هایی كه دات نت دارن اجرا بشه. خلاصه بگم، برنامه ای هست كه فايل exe تحت دات نت رو به اسمبلی تبديل كنه؟ البته به صورتی كه تو همه كامپوتر ها يا حداقل بيشترشون اجرا بشه
درست کردن setupمن چند تا از برنامه هام واسه تست Publish كردم اما چيزي دستگيرم نشد چه سودي غير از مطالبي كه بالا گفتيد داره !؟
عيبش هم اين كه هر بار كه برامه رو ران مي كني چك مي كنه كانكشن و از اين حرفا...
مي شه راهنمايي كنيد چه سودي داره ؟
دیگه نیاز به نصب express برنامه ها نداره.فایل اسمبلی رو هم میزاره تو فایل نصبی.
dependency های برنامه رو هم نصب میکنه(.net رو یقین ندارم ولی فکر کنم بشه)
احتمالا طبق چیزی که گفتید برنامشون رو به اسمبلی تبدیل می کنن و DLL ها رو کنارش می گذارن . البته من نه این کار رو کردم و نه برنامشو رو می شناسم ولی اگر برنامه ای رو به اسمبلی تبدیل کنی دیگه کپی کردن اون DLL ها فایده ای نداره چون اگر شما به اون DLL ها Refrence بدی چون با .net نوشته شده باید .netframework رو هم نصب کنی که ...
خوب این کار خوبی نیست ، چون دات نت فریم ورک چیزای دیگری رو هم مثل garbage collection, verifiable code, reflection, security نسب می کنه .
اما با این وجود میشه : بهترین راه هم استفاده از Xenocode Virtual Application Studio 2009 است .
فكر كنم كه Xenocode برنامه رو به اسمبلی تبديل نميكنه. بلكه كد ميانی فايل اجرايی يا dll رو دست كاری ميكنه تا به دست آموردن كد واقعی برنامه سخت تر بشه. اين طور نيست؟
سلام
من شنیده بوم با برنامه نویسی Native یا یه همچین چیزایی میشه به نتیجه رسید !!!
{ البته شنیدن کی بود مانند دیدن }
کسی در این مورد اطلاعاتی داره ؟؟؟
خوب کسی که انگلیسیش خوبه تو سایت ماکروسافت اعلام کنه .
چیو اعلام کنه ؟خوب کسی که انگلیسیش خوبه تو سایت ماکروسافت اعلام کنه .
اگر منظورت از برنامه نویسی native اینه که برنامتون رو با زبانهای native بنویسید خوب مسلمه که با برنامه نویسی native میشه . ولی به شرطی اینکه تمام برنامتون رو با زبانهای native مثل Cpp بنویسی(که کار بسیار سختیه) . چون اگه دوباره داخل اون زبان بخوای به DLL های فریم ورک ارجاع بدی که ... بعدشم ما می خوایم برنامه رو تحت دات نت فریم ورک بنویسیم .
70 % برنامه ها با دات نت هستامروزه 70% برنامه ها با .net نوشته میشه که 50% اون ها بدون نصب دات نت فریم ورک کار می کنه . پس اون ها چی کار میکنن . مثل : دانلود منجر ها
میشه در این باره Reference بدی !
این سوال اینجا مطرح شده :
http://www.codeproject.com/script/Fo...82#xx2969425xx
اینم متنش (البته زیاد انشای خوبی نداره ولی طرف می فهمه چی میگی):
حالا تو هر سایتی دوست داشتی درجش کن .
subject : execute a .net App without installing FrameWork.
as you know while you publish a .net App you have to install
.netFrameWork on every system that you want to execute it .
so how can we do for execute a .net App without installing Framework.
سلام دوستان من
نرم افزارهای خوبی برای تبدیل Application های DotNet به native binary وجود داره که یکی از بهترین هاش Xenocode Postbuild هستش که میتونید نسخه Free اون را از سایتش دانلود کنید.
با استفاده از این نرم افزار نیازی دیگه به نصب FreamWork ندارید.
اینم کمی اطلاعات بیشتر در مورد نحوه کارکردش .
یا علی
اینم لینک جالبیه در این زمینه :
http://social.msdn.microsoft.com/For...-e50e99a9f2c9/
در تکمیل توضیحات دوستان :
با C++.Net میشه برنامه ای نوشت که نیازی به فریم ورک نداشته باشه.
دوست عزيز لينكتون خيلي جالب منون
اما من زبانم زياد خوب نيست طول مي كشه ترجمه كنم مي شه 2 سؤال دارم من راهنمايي كنيد:
1. با استفاده از اين برنامه DLL هايي كه خودمون مي نويسم چي مي شه (كامپونت يا كلاس)
آيا اون ها رو هم ترجمه مي كنه ؟ و رفرنس هاي فريم ورك رو هم اتچ مي كنه ؟
2. با استفاده از برنامه Free مشكلي براي برنامه ما به وجود نمي ياره يعني برنامه ما رو تريل چيزي نمي كنه برمبنا خودش ؟
منظورم اين كه يكمدرباره نحوه كارش توضيح بدين چون اين برنامه خيلي مفيد
سل آم.
از همه دوستانی كه من رو در اين زمينه همراهی كردن تشكر ميكنم. و
همون طور كه از اسم C++.Net مشخصه، برنامه هایی كه به اين زبان نوشته ميشن برای اجرا نياز به دات نت دارند.با C++.Net میشه برنامه ای نوشت که نیازی به فریم ورک نداشته باشه.
حرف شما كاملا درسته، ولی برنامه هایی مثل Xenocode فقط برنامه های دات نت رو به باينری تبديل ميكنند، نه چيز ديگه. اينطوری اون برنامه فقط روی اون CPU و ويندوزی كه تبديل انجام شده كار ميكنه، حسن دات نت همين جا مشخص ميشه. در واقع هر برنامه ای كه قراره به صورت باينری در بياد، فايل exe بعد از كامپايل فقط روی سيستمی اجرا ميشه كه اون برنامه روش كامپايل شده. برنامه های دات نت از كد ميانی تشكيل شدن كه، كار دات نت فريم ورك اينه كه اون كد رو به زبان باينری در بياره. يعنی يك كد IL روی سيستم كاربر كامپايل ميشه و به زبان باينری در مياد. پس چون رو سيستم كاربر كامپايل شده، برنامه در اون سيستم اجرا ميشه. حسن دات نت همينه، كه روی همه كامپيوتر هایی كه دات نت فريم ورك دارن اجرا ميشه. شركت هایی مثل Adobe يا Microsoft و ... كه برنامه هاشون رو با ++C مينويسن و كامپايل ميكنند، فقط روی سيستم خودشون كار ميكنه و برای رفع اين مشكل، از Setup استفاده كردن. هر كد مخصوص به هر كامپيوتر رو مينويسن و موقع نصب فايل های اون سيستم عامل و CPU نصب ميشه. البته امكان داره، برنامه هایی واسه خودشون درست كرده باشن كه اين كا رو انجام بده..بگذريم.نرم افزارهای خوبی برای تبدیل Application های DotNet به native binary وجود داره که یکی از بهترین هاش Xenocode Postbuild هستش که میتونید نسخه Free اون را از سایتش دانلود کنید.
با استفاده از این نرم افزار نیازی دیگه به نصب FreamWork ندارید.
با اين اوضاع من ميخوام برنامه ی تحت دات نت رو به باينری تبديل كنم، خوب اين يعنی فقط رو سيستم خودم اجرا ميشه، ولی من ميخوام طوری تبديل بشه كه روی سيستم همه اجرا بشه. در واقع مثل برنامه های شركت ها.
كسي نيست كه يه همچين برنامه ای داشته باشه؟
زمانیکه شما یک برنامه رو با سی ++ می نویسی هنگامی که قصد انتشار اون رو دارید یک setup می سازید و اون برنامه به علاوه دوتا فایل که Manifest برنامه شما هست و در درایو ویندوزتون قرار داره رو پکیج می کنی و همه می تونن نصبش کنن . اگر این چیزی که شما می گید واقعا صحت داشت یعنی ما به زمان داس برگشتیم و هنوز برای تولید برنامه هامون مجمو عه ای از سخت افزارها رو پشتیبانی می کنیم و بقیه رو نه . خصوصیت بارز ویندوز همینه که شما رو از سخت افزار جدا می کنه . البته بستگی به برنامه ای که مینویسید هم داره مثلا ماکروسافت برای ساخت سیستم عامل هنوز همون مشکلات رو داره و یا برنامه هایی که با سخت افزار های خاص تعامل دارن . در مورد ایم برنامه هایی که شما رو از نصب دات نت فریم ورک خلاص میکنه من هنوز تست نکردم ولی مسلما اون شرکت کلی وقت و سرمایه نمی گذاره که یک همچنین کاری بکنه .
خوب یعنی به نظر شما اون کدها نیاز به ترجمه ندارن ؟ یعنی ارجاعاتی که به فریم ورک داده شده نیاز نیست کامپایل بشه ؟! می تونی خودت تست کنی . یک برنامه سی ++ بنویس و توش یک DLL ی که با دات نت ساخته شده رو صدا بزن(البته نوشتنش ترفند داره) اگر روی سیستمی که دات نت فریم ورک روش نصب نیست اجرا کنی موقعی که به اون فایل کتابخانه ای ارجاع میدی RunTime Error می ده .
نه تنها ارجاعات به فریم ورک بلکه ارجاعات به بقیه لایبری ها و dll ها هم ممکنه پیش بیاد! ولی این دلیل نمیشه که dll وابسته به .NET باشه. اون RunTime Errorواسه اینه که ریفرنسی که ازش استفاده کردی موجود نیست. مثل وقتی که کد می نویسی و باید همه رفرنس هات رو دقیق مشخص کنی. برای اطلاعات بیشتر یه سرچ در مورد dynamic library و static library بکن.
dll = dynamic link library
من فکر می کنم منظور من رو درست متوجه نشدید .
در مورد اون مثال هم نه اتفاقا رفرنسش موجود بود . من این مساله رو تو حالتهای مختلف تست کردم یک بار دات نت فریم ورک رو نصب نکردم و برنامه رو اجرا کردم و خطا داد . بار بعدی نصب کردیم و هیچ مشکلی نداشت . اصلا چیزی که شما می گید با عقل جور درنمیاد . شما مفهوم dynamic lib رو اشتباه متوجه شدید : کتابخانه پیوند پویا (http://en.wikipedia.org/wiki/Library_(computing)#Dynamic_linking)
شما در حقیقت به یک کتابخانه ی پویا که می تونه کدش تغییر کنه و وابسته به برنامه اصلی نیست ارجاع میدید که کد کتابخانه های ایجاد شده به زبان دات نت IL هست خوب این IL رو کی به غیر از .netFrameWork می فهمه ؟ اگه کتابخانه شما با زبانهای natvie مثل سی++ نوشته بشه بله حرف شما درسته .
از کی تا حالا ویندوز اینقدر با هوش شده که کد دات نت رو خودش می فهمه ؟ خوب اگه اینجوریه شما دات نت فریم ورک رو پاک کنید و یک برنامه که با دات نت توشتید رو اجرا کنید حالا به قول شما مشکل رفرنس داره خیلی خوب رفنسهاش رو کنارش و یا تو پوشه ویندوز کپی کنید . کد IL توسط دات نت نوشته شده و فقط هم خودش اونو می فهمه . چیزی که شما می بینید اجرا میشه کد اسمبلیه که توسط CLR ترجمه میشه و به ویندوز می ده . ویندوز فقط اسمبلی میفهمه .
بی خیال قضیه . داستان چیز دیگری بود به اینجا کشیده شد.
بله این کار به طور مستقیم انجام پذیر نیست و توسط نرم افزارهای دیگه باید این کار انجام بشه . من یک بار این کار رو انجام دادم ولی نتیجه زیاد جالبی نداد . به این صورت که برنامه ای که نوشتید رو اجرا کنید تا به کد اسمبلی تبدیل بشه بعد با نرم افزارهایی که کد اسمبلی برنامه رو برمی گردونن مثل Win32 Disassembler کد اسمبلی اون رو در بیارین . و اون رو کامپایل کنید . من موفق نشدم این کار ور بکنم فکر کنم بدلیل فایلهای کتابخانه ای بود که به برنامه وصل بود ولی چند جا دیدم که به همین روش تبدیل می کردند . شما امتحان کنید شاید جواب داد.