چطوری میشه از برنامه های نوشته شده توسط .net بدون framework استفاده کرد
چطوری میشه از برنامه های نوشته شده توسط .net بدون framework استفاده کرد
سلام
اگه با C++.NET بنویسی میشه. اما با VB.NET و C# بعید میدونم.نوشته شده توسط alirezador
در پناه حق موفق باشید و پرتوان
آخرین ویرایش به وسیله Hamedm : یک شنبه 06 فروردین 1385 در 18:39 عصر
بدون دات نت که نمیشه ؛ اما مسئله رو اینطور ببینیم که آیا میشه DLL های مورد نیاز برنامه (اونایی رو که در رفرنس برنامه اضافه شده اند) رو هم همراه برنامه کپی کرد و برنامه نوشته شده تحت دات نت رو راه انداخت ؟ به احتمال قریب به یقین پاسخ منفیه ؛ چون فقط اون DLL ها نیستن و بعضی DLLهای دیگه دات رو هم باید بذاریم .نوشته شده توسط alirezador
پس
1- اون DLLهای دیگه (و یا فایلهای غیر DLL ایی ) کدومها هستن ؟
2- فقط با یک کپی ساده مشکل حل میشه ؟ یا باید اونا رو هم بایک برنامه مثل Reasm.exe باید رجیستر کرد ؟
در صورتی که این مسئله رو بتونیم حل کنیم میشه یک برنامه نصاب فریم ورک نوشت .
یک مسئله جداگانه :
یک برنامه نوشتم که نصب بودن یا نبودن فریم ورک رو چک میکنه و کاربر نهایی میتونه با انتخاب از لیست اقدام به نصب یا نصب مجدد این فریم ورک بکنه ( بصورت Silent) یعنی بدون نمایش هیچ صفحه ایی ؛ خودش نیازی هم به دات نت نداره ؛ نیازی به فایل راه انداز دیگه نداره ؛ دوست داشتم در اختیار بقیه هم بذارم که متاسفانه حجمش 38 مگ هست .
یک روز قراری بذاریم بدیم دست چند نفر که بتونید بین همه پخشش کنید.
البته حجم خودش خیلی کمه این فریم ورکها هستند که حجمش رو زیاد کردن.
اگر راه اندازهای دیگه ایی نظیر ADO و. . . هم نیازه بگید تا اضافه کنم.
سلامنوشته شده توسط Hamedm
ممکن بگید چطوری می شه این کار رو کرد؟؟؟
سلام
Win32 رو انتخاب کن.نوشته شده توسط mamadgmail
در پناه حق موفق باشید و پرتوان
آیا در ویندوز ویستاهم نیازی به نسب کردن دات نت فریم ورک است؟
آقای زواری میشه لطف کنید یه جایی upload کنید تا ماهم بتونیم دانلود کنیم.(درضمن فریم ورک 1.1 هم داره؟) شما لطف دارید ماهم سواستفاده میکنیم
اگه امکان ADO هم اضافه بشه که خیلی عالیه.
اینهایی که اینجا میگید از اون مطلبی که تو این پست گفتم داره دور میشه.
فکر کنم بشه با کپی کردن DLL ها مشکل رو حل کرد
آن لحظه که تنها اعتبار کسی که مساله ای را مطرح کرده است، شما را در اشتباه بودن ایده هایتان قانع کرد،
آن لحظه،
لحظه وداع شما با دنیای خلاقیت و پیشرفت خواهد بود. . .
برنولی
دوستان اگر قضیه کپی کردن dll ها باشه که او را install shield خیلی خوب حل میکنه ولی این مسئله که نیاز به install shield هم نباشه محمه
فریم ورک 1.1 رو هم داره ؛ اما نمیتونم جایی آپلود کنم چون زمان زیادی میبره ؛ یک روز با هم قرار میذاریم که هم دیگه رو ببینیم و هم من اینا رو به دستتون برسونم
آخه آقای زواری من یک برنامه نوشتم واسه یک نفر یک چیزه خیلی ساده وقتی که گفت چند مگابایت شد بهش گفتم کلا 50 mb طرف فکر کرد من چیزی حالیم نیست این قضیه framework نصب کردن را باید یک جوری حل کرد
با سلام
همانطور که میدونید دات نت فریم ورک 2 بر روی ویندوز xp سرویس پک 2 نصب میشه و اگر سویس پک 2 نداشته باشه نصب نمیشه .
با توجه به گفته آقای حامد که برنامه های نوشته شده با ++vc نیازی به نصب فریم ورک نداره سوالی که برام پیش اومد اینه که برنامه های نوشته شده با ++vc رومیشه بر روی ویندوزهای بودن سرویس پک 2 و یا مثلا ویندوز 98 نصب کرد و برنامه رو اجرا کرد ؟
من فکر میکن چیزی که آقا حامد میگن احتمال داره خیلی از امکانات دات نت را از ما بگیره چون تا اونجایی که من میدونم win32 برنامه هایی شبیه vb.6 را شامل میشه
بله برنامه نویسی win32 با vC++.net همون برنامه نویسی ++ vc هست که درمحیط vs.net مینویسید و نه اینکه نتونید امکانات دات نت رو داشته باشید بلکه به اون راحتی که با vb.net or C#.net کار میکنید نیست و شما مستقیما باید از dll ها برای امکانات دات نت استفاده کنید.
ولی حداقل یک برنامه low level تحویلتون میده که دیگه به این راحتی برنامه های دات نت قابل دیکد شدن نیست. و رو هر سیستمی قابل اجراست
ما که نمیخواهیم مسئله رو پاک کنیم و بریم سراغ ++C ؛ من میگم که از دات نت استفاده کنیم اما یک برنامه بیاد و این فریم ورک رو چک کنه اگر نبود نصبش کنه .
این برنامه هم نوشته شده ؛ زیاد هم سخت نبود چندتا چک کردن رجیستری و در نهایت صدا زدن فایل نصب فریم ورک با چند سوئیچ.
به نظر من از بحث داریم منحرف میشیم ؛ اینجا مسئله کپی کردن فایلهای فریم ورک واستفاده از اونا بدون نصب فریم ورک بود
با سلام خدمت دوستان عزیز
راستش من یه راهی پیدا کرده بودم برای دات نت 1.1 که قبل از نصب برنامه چک میکرد دات نت نصبه یا نه ؟
کاملا هم درست بود .
حالا اگه دوستان اجازه بدهند میخواهم توضیحش رو بدم تا شاید بشه برای دات نت 2 هم یه کاریش کرد .
ابتدا دو فایل Setup.exe,setting.ini را دانلود کنید . (Setup.rar)
دانلود فایل های ضمیمه
و کنار فایل های setup برنامه کپی کنید (فایل Setup.exe را Replace نمایید)
و سپس دات نت فریم ورک 1.1 را هم کنار اینها کپی کنید (dotnetfx.exe)
حالا هر وقت که فایل setup.exe را اجرا نمایید اگر دات نت 1.1 نصب باشه Setup برنامه اجرا میشه و اگر هم
نصب نباشه setup فریم ورک دات نت اجرا میشه و پس از نصب اون setup برنامه اجرا میشه .
امیدوارم مفید باشه و بشه یجوری در دات نت 2 هم استفاده کرد .
دوست عزیز من فکر میکنم به راحتی میشه اینو تعمیم داد اینطور که من متوجه شدم شما تنظیمات رجیستری رو برای فریم ورک 1.1 چک میکنید خوب این کار رو برای فریم ورک2 انجامش بدین
Xenocode 2006 این کار رو انجام میده !چطوری میشه از برنامه های نوشته شده توسط .net بدون framework استفاده کرد
Run anywhere: Native x86 executable generation allows your .NET application to run anywhere, with or without the Framework. (Windows 9x and NT4 targets not supported.)
http://www.xenocode.com/Products/Postbuild/
دوست من xenocode کرکش موجود نیست بحث این xenocode تو یک تاپیک دیگه هست اگه خواستی آدرسش را بهت میدم
سلام این xenocode که لینکش رو دادن باید چیز جالبی باشه
that the Xenocode system supports 1.0, 1.1, and 2.0 applications.
حجمش 22مگ هستش. ولی باز من هم سوال آقا/خانم Mehrafrooz رو دارم
توی این سایت هم چیزی پیدا نکردم مسئله سرویس پک 2 چی می شه در مورد دات نت 2
البته منظورم راجب به برنامه های win32 نیستش منظورم Windows Application ها هستن
خوش باشید.
اقا محمد قضیه xenocoder خودش تو یک تاپیک دیگه مونده و همه توش گیر کردن چون هیچ کس کرک نداره پس به درد نمی خوره اگه کرک این نرم افزار را داری به ما هم بدهXenocode 2006 این کار رو انجام میده !
آقای زواری حجم فریم ورک خیلی زیاده و من مطمئنم که هزاران فایل داره که اصلا در برنامه مابه کار نرفته و بطبع فریم ورک برای برنامه ما شاید مثلا از 10 فایل استفاده میکنه که بیش از یکی دو مگابایت بیشتر نیست واسه این مسئله که یک برنامه بیاد چک بکنه بطبع فکر میکنم خیلی راحت این مسئله حل بشه ولی راه خوبی نیست خوب به جای اون دیگه فریم ورک را به طرف میدیم که نصب بکنهمن میگم که از دات نت استفاده کنیم اما یک برنامه بیاد و این فریم ورک رو چک کنه اگر نبود نصبش کنه .
با سلامنوشته شده توسط taherbaghal
من این رو خوب نمی بینم. به این دلیل که فریم ورک 2 از فریم روک 1.1 هم پشتیبانی میکنه و دستورات اون رو اجرا میکنه. به عبارتی اگر ما برنامه رو با فریم ورک 1.1 نوشته باشم و این برنامه تحت فریم ورک 2 هم اجرا میشه. ولی اگر ما برنامه ای بنویسم که چک کنه که آیا فقط ورژن 1.1 نصب شده است یا خیر کار اشتباه است. چون ممکن است که فریم ورک 2 روی سیستم نصب باشد و برنامه ما فقط دنبال 1.1 بگردد. و درنتیجه دچار اشتباه میشویم.
برنامه های زیادی رو دیدم که چون فریم ورک 1.1 روی سیستمم نصب نبود ستاپ نکردند و میخواستند این رو نصب کنم در حالی که فریم ورک 2 روی سیستم نصب بود.
حالا یه سوال: اگر فردا فرسم ورک فرضا" 3 بیاید چی میشه؟؟؟ آیا این برنامه کار میکند؟؟
در پناه حق موفق و کامروا باشید
بله برای XenoCode یکاریش میکنم .نوشته شده توسط alirezador
منم با شما موافقم و بحث اصلی این تاپیک هم اینه که بتونیم بدون نصب فریم ورک با تشخیص یکسری Dllهای عمومی فریم ورک و یکسری DLLهایی که در برنامه استفاده شده و نصب اونا برنامه رو راه بیاندازیم .
ولی در کل اگر این بحث هم به نتیجه نرسه و نشه که این کار رو کرد میشه با کمک این برنامه مشکل نبود فریم ورک رو تا حد زیادی که کاربر نهایی با اون درگیر نشه حل کرد.
من دقیق متوجه این قسمت نشدم ؛ یعنی آقای کاویانی میفرمایند که با وجود فریم ورک 2 برنامه هایی که با فریم ورک 1.1 نوشته شدن هم میتونن اجرا بشن یعنی برای اجرای این برنامه ها نیازی به فریم ورک 1.1 نیست ؟ اگر اینطوره مطمئن هستید ؟؟نوشته شده توسط M.kavyani
واینکه ما چه نسخه ایی رو چک کنیم خوبه ؟
برای چک کردن نصب فریم ورک علاوه بر وجود فولدرهایی که قبلا در تاپیک های دیگه بحث شده میتوانید از مقادیر رجیستری زیر هم کمک بگیرید
برای فریم ورک دو
آدرس SOFTWARE\Microsoft\NET Framework Setup\NDP\v2.0.50727
فیلد Install
نوع REG_DWORD
مقدار 1
برای فریم ورک یک
آدرس SOFTWARE\Microsoft\NET Framework Setup\NDP\v1.1.4322
فیلد Install
نوع REG_DWORD
مقدار 1
که البته با توجه به Revision فریم ورک ممکنه که مقدار آخر اعداد ریز در آدرس تغییر کند
در مورد XenoCode ایی که با نسخه 2005 در اکثر سایتهای هک کرک برای دانلود موجوده باید بگم که این نسخه از XenoCOde نسخه نهایی VS2005 رو پشتیبانی نمیکنه و نسخه جدید با اسم XenoCode PostBuild ارائه شده
بله اجرا میشن (طبیعیه که ورژن جدید ورژن قدیمی رو هم ساپورت کنه) ولی یه مشکل مسخره داره و اون اینکه installer هایی که با 1.1 درست شدند با 2 اجرا نمیشن و حتما باید 1.1 داشته باشن!!من دقیق متوجه این قسمت نشدم ؛ یعنی آقای کاویانی میفرمایند که با وجود فریم ورک 2 برنامه هایی که با فریم ورک 1.1 نوشته شدن هم میتونن اجرا بشن یعنی برای اجرای این برنامه ها نیازی به فریم ورک 1.1 نیست ؟ اگر اینطوره مطمئن هستید ؟؟
آهان یعنی اگر برنامه نصاب رو در نظر نگیریم و فایلهای اجرایی رو داشته باشیم ( به تعبیری کپی دستی کنیم ) برنامه ایی که با دات نت 1.1 نوشته شده بدون دات نت 1.1 اجرا میشه ؟؟؟؟نوشته شده توسط once4ever
مطمئن هستید شما ؟
این مسئله برای کامپوننتها هم صادقه ؟ یعنی کامپوننتهایی که با دات نت 1.1 هستند و برای اون نوشته شدن رو اگر در برنامه امون استفاده کنیم و برنامه رو با دات نت 2 کامپایل کنیم برای اجرا نیازی به دات نت 1.1 جهت اون کامپوننتها نیست ؟
اگر اینطور باشه :kaf:
اگه دقیقا همنام باشند (درتمام جزییات) قاعدتا نباید مشکلی داشته باشه. چون درنهایت فقط چندتا dll هستند.نوشته شده توسط بابک زواری
من فکر نکنم کار بکنه چون اگر قرار بود کار بکنه پس چرا vs2005 برنامه های vs2003 را یک بار تبدیل میکنه بعد بازشون میکنه
شاید در بعضی از دستورات هم کار بکنه امتحان نکردم ولی احتمال زیاد میدم که در اکثر اونها کار نکنه
بد بختی ما اینه که واسه خودمون یک زبان برنامه نویسی نساختیم
با سلامنوشته شده توسط بابک زواری
بله دقیقا" همینی بود که شما برداشت کرده اید. بار ها و بار ها چک کرده ام و به هیچ مشکلی بر نخورده ام. در مورد کامپوننت ها هم جاهایی دیده ام که برای فریم ورک 2 سری جدید رو ارائه کرده اند ولی من با اون قدیمی ها هم مشکل نداشتم.
*
* به نظر من اگر بخواهد فریم ورک بعدی فریم ورک قبلی رو ساپورت نکنه باید قابلت هایی برایش در نظر گرفته شود تا یه هو این ارتباط قطه نشه و گرنه به علت وجود ارتباط بیشتر با فریم ورک قبلی علاقه کمتری به فریم ورک جدید نشان داده میشود. به عبارتی مایکروسافت فروش نخواهد داشت. چون خلی از برنامه ها باید مجددا" نوشته شوند و یا اینکه مجددا" کامپایل شوند که هزینه بر خواهد بود**
آقای کاویانی نتیجه گیری صحبتتون را لطفا بگید
با سلامنوشته شده توسط alirezador
چشم. حتما". چون احساس میکردم معنی رو رسوندم ادامه ندادم.
من حرفم اینه که اگر فریم ورک بعدی از فریم ورک قبلی حمایت نکند مشتری نخواهد داشت و یه هزینه ای باید پرداخت شود که این هزینه عموما" بر دوش مشتریان و استفاده کنند گان است که اگر این هزینه بالا و غیر قابل قبول باشد هرگز مشتری سراغ آن نمیرود. عموما" دو تا هزینه است یکی هزینه خرید نرم افزار جدید است . و دیگری هزینه تبدیل برنامه ها به سری جدید. البته نرم افزار هایی که در سطح کلان تولید می شوند. امیدوارم منظورم رو رسونده باشم. اگر نقصی دارد بفرمایید تا تکمیلش کنم.
در پناه حق موفق و کامروا باشید
محسن درست میگه، من هم تست کردم، با دات نت فریم ورک 2 تمامی برنامه هایی که روی نسخه های قبلی دات نت فریم ورک نوشته شدن اجرا میشن، هم 1 و هم 1.1. الان دات نت فریم ورک 2 فقط دارم.
خوب پس فعلا ما تمرکز رو روی دات نت 2 بذاریم ؛ من میگم وجود چه فایلهایی برای اجرای یک برنامه که در دات نت نوشته شده لازمه ؛ غیر از DLLهایی که به رفرنس اضافه شدن و با اونا کاری نداریم اون DLL های عمومی رو کسی لیستش رو داره ؟
آقای زواری یک برنامه ای بود که وقتی تغییرات رو سیستم میدادیم و بعد reset میکردیم دوباره به حالت اول بر میگردوند حتی اگر برنامه ای را نصب میکردیم
فکر میکنید این جور برنامه ها می فهمن که چه فایلهایی کجا ذخیره میشن ؟
اگر ما بفهمیم که framework چه تغییراتی در سیستم میده یک مقدار از مشکلاتمون حل میشه
ایا منظورت همون برنامه System restore است که همراه ویندوز است؟؟نوشته شده توسط alirezador
خوب هم فایلهایی کپی میشه و هم مقادیری در رجیستری ریخته میشه ؛
یعنی هر دو باید در بیاریم .
ولی اگر یک رفرنس از فایلهای فریم ورک رو گیر بیارم نصف راه رو رفتیم .
خوب فکر میکنین بهترین راه واسه این مسئله چیه
آقا من تست کردم قبلا این رو کار نمی کنه برنامه هایی رو که با دات نت 1.1 نوشته شده حتی اگر 2.2 نصب باشه Run نمی شن در ضمن من با خود برنامه اجرایی برنامه تست کردم نه فایل setup.نوشته شده توسط once4ever
در ضمن راجب XenoCode می خواستم بگم اگر این تایپیک به نتیجه نرسید آیا بین برنامه نویس های اینجا کسی نیست که بتونه یک جوری اینو کرک کنه و یا حداقل راجبش بحث کنیم با هم به یک نتیجه ای برسیم (البته می دونم توی این فروم کسی حق نداره کرک بذاره و نمی دونم که آیا اصلا می شه که راجب کرک کردن یک برنامه بحث کرد یا نه ولی اینو می دونم که اگه من حتی بخوام این برنامه رو بخرم جدای از مسئله پولش هیچ راه پرداختی ندارم)
فرک کنم همه بودنید که فریم ورک .NET فقط شامل یه سری DLL نیست که چند تا کلاس توش باشه. مهمترین قسمت فریم ورک CLR اه که مسئوله اجرای برنامه هاییه که تحت .NET نوشته می شن. تا CLR در کامپیوتر مقصد نباشه، برنامه های نوشته شده با .NET نمی تونن اجرا بشن. چون برنامه های .NET به کد IL تبدیل میشن نه به Native پس قبل از اجرا به JIT نیاز دارن تا بتونه اونها رو به کد Native تبدیل کنه.
برای اینکه بفهمیم در یه برنامه ای که با .NET نوشته شده از چه DLL هایی استفاده شده می تونیم namespace هایی که در برنامه از اون استفاده شده رو توی MSDN پیدا کنیم و ببینیم که این Namespace در چه فایل اسمبلی قرار گرفته. بعدش اوون فایل اسمبلی رو توی آدرس زیر پیدا کنیم البته از اسم namespace هم میشه فهمید که در چه اسمبلی قرار داره(البته برای دسترسی به این فولدر ها باید از Command استفاده کنید چون خود ویندوز اجازه نمیده که به این فولدر ها دسترسی داشته باشید و میگه که انها وجود ندارند).
C:\Windows\Assembly
مثلا برنامه ای که به این صورت تعریف شده باشه:
using System;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
از DLLهای زیر استفاده کرده:
System.Dll در آدرس
C:\WINDOWS\assembly\GAC_MSIL\System\2.0.0.0__b77a5 c561934e089
System.Drawing.Dll در آدرس
C:\WINDOWS\assembly\GAC_MSIL\System.Drawing\2.0.0. 0__b03f5f7f11d50a3a
System.Windows.Forms در آدرس
C:\WINDOWS\assembly\GAC_MSIL\System.Windows.Forms\ 2.0.0.0__b77a5c561934e089
System.Data در آدرس
C:\WINDOWS\assembly\GAC_32\System.Data\2.0.0.0__b7 7a5c561934e089
System.Text هم در آدرس مربوط به System.dll است.
تمام کلاسهایی که در این DLL ها وجود دارن به صورت IL هستن و قبل از اجرا شدن باید با استفاده از JIT به کد NAtive تبدیل بشن. البته میشه کاری کرد که به JIT احتیاجی نداشته باشن و اون هم اینکه که با ابزاری مثل ngen.exe اوون ها رو به کد native تبدیل کرده و توکامپیوتر save کنیم. این جوری وقتی CLR ببینه که کد native اوونها وجود داره دیگه نمیره از کد IL اونها استفاده کنه.
مشکل دیگه ای که وقتی بخواهیم برنامه بدون نصب شدن فریم ورک اجرا بشه به وجود می یاد اینه که باید ساختار فایل exe ی برنامه رو هم یه تغییراتی توش بدیم.
فایل exe ای که به وسیله ی کامپایلر C# برای یه برنامه ایجاد میشه، ساختارش شبیه فایل exe عادی است. اما در ابتدای اون فایل یعنی توی بخش .text یه دستور اسمبلی به صورت زیر اضافه می شه:
JMP _CorExeMain
این متد توی فایل MSCorEE.dll توی آدرس system32 است. پس یه ریفرنس به این فایل هم توی بخش .idata اضافه می شه. وقتی ویندوز بخواد این فایل رو اجرا کنه میره فایل mscoree.dll رو لود می کنه که متد CorExeMain رو کال کنه، این متد هم اگر تا حالا CLR اجرا نشده باشه، اوون رو اجرا می کنه تا CLR بیاد و کنترل برنامه رو بدست بگیره و فایل رو اجرا کنه.
خوب، پس برای اینکه یه برنامه رو بخواهیم بدون .NET اجرا کنیم باید کاری کنیم که به CLR نیازی نداشته باشه، بعد هم فایل رو به صورتی تغییر بدیم که دیگه نخواد متد _CorExeMain رو کال کنه. البته فکر کنم با تبدیل فایل با ngen.exe به کد native این قسمت درست بشه.
پس اول باید اون رو به کد native تبدیل کنیم که دیگه JIT نخواد. بعدش هم ساختار فایلی که کامپایلر میسازه رو به صورتی تغییر بدیم که یه ریفرنس از dll هایی که توش از اونها استفاده کردیم به ابتدای فایل اضافه بشه. (البته روش این یکی رو هیچی راجع بهش نمی دونم. اگه کسی از دوستان می دونه بگه. چون من فقط یه کم ساختار فایلهای .net رو بلدم و از ساختار exe های عادی چیزی نمی دونم)
تازه با همه ی این تفاصیل، اگر هم بتونیم این کار رو بکنیم، یعنی CLR رو کامل کنار زدیم پس از تمام امکاناتی که داره هم مثل GC، SideBySide Execution و ... نمی تونیم استفاده کنیم.
به خاطر همین فکر نکنم درست باشه کاری کنیم که یه برنامه بدون .NET اجرا بشه (البته اگر شدنی باشه).
موفق باشید.