با سلام
چطوری می شه تشخیص داد Framework روی یک سیستم نصب هست تا زمانی که برنامه اجرا می شه در صورت نصب نبودن Framework یک پیغام مناسب به کاربر داده بشه؟
Printable View
با سلام
چطوری می شه تشخیص داد Framework روی یک سیستم نصب هست تا زمانی که برنامه اجرا می شه در صورت نصب نبودن Framework یک پیغام مناسب به کاربر داده بشه؟
سلام
1- اگه با خود دات نت کد مینویسی ساده ترین راهش اینه که ببینی برنامه خودت بالا میاد یا نه :-) آخه اگه فریم ورک نصب نباشه, برنامه خودتم کار نمیکنه که حالا بخوای چک کنی نصب هست یا نه
2- ولی مثلا میتونه یه نیمچه کد با vb6 بنویسی و رجیستری رو چک کنی، چون وقتی نصب باشه، اونجا نوشته میشه (یه سرچ تو رجیستری بزن متوجه میشی)
نیلوفر ممنوننقل قول:
نوشته شده توسط niloufar
اما با چه کدی میتونیم بفهمیم برنامه مون داره اجرا میشه یا نه؟
بعدشم این که اگه کد بالا رو بنویسیم حتما یه جواب برمیگردونه : برنامه داره اجرا میشه. چون اگه اجرا نشه که این کد عمل نمیکنه!
فکر کنم با روش مشابه ابتکار شما بشه اون مشکل رو هم حل کرد: وقتی برنامه اجرا میشه تو یه جایی (مثلا همون Registery) یه تغییری بدیم بعد یه برنامه با وی بی بنویسیم و اون قسمت Registery رو چک کنه.
سلام
تنها راهش یه نیمچه برنامه نویسی با VB6 است
نه به نظرم راه بهتری هم باید باشه. VB6 مرده. پس متوسل شدن به یک مرده منطقی نیست اون هم در مورد یک مجموعه مثل VS2005
سلامنقل قول:
نوشته شده توسط SYSMAN
همین مجموعه بزرگ (2005) که خودم هم دیدید در پست هام خیلی طرفداریشو میکنم، یه ضعف خیلی بزرگ داره و اون اینکه بدون DotNet Framework کار نمیکنه
البته اگه یکی بتونه یه راهی پیدا کنه که بتونه این Framework رو هم در داخل برنامه ریسورس کنه (که بعید نیست ولی راه خوبی نیست که چند ده مگابایت به ریسورس اضافه کنیم) خوب احتمالا دیگه نیازی بهش نیست
ولی اصلا دنبال این نباشید که بدون وجود Framework (نه نصبی نه ریسورسی) برنامه هاتون کار کنه و بدون این Framework فقط دنبال برنامه های کوتاه VB6ای باشید.
سلامنقل قول:
نوشته شده توسط niloufar
این اصلا ضعف نیست. یک طرفه به موضوع نگاه نکنید.
در پناه حق موفق باشید و پرتوان
با عرض ادب خدمت اساتید VB.NET !!!
به استحضار می رساند که با استفاده از خاصیت Version کلاس Environment به راحتی قادر به، به دست آوردن نسخه ی NET Framework. بر روی سیستم خود هستید.
این متد، کلاسی از نوع Version را برگشت می دهد که دارای تعدادی متد و خاصیت جهت آگاهی از نسخه ی دات نت فریمورک نصب شده بر روی سیستم است.
مثال:
Dim objVersion As Version
objVersion = System.Environment.Version
MessageBox.Show(objVersion.ToString)
می تونید مشخصه های Major، Minor، Build را نیز با استفاده از خواص این کلاس به دست آورید.
موفق باشید.
جناب آقای راد،
مشکل اینجاست که اصلاً برنامه روی سیستم عاملی که dotnetframework نداره اجرا نمیشه که بخواهیم با این روش ورژن آن را چک کنیم.
روش شما برای زمانی مناسبه که بدونیم dotnetframework هست اما نمیدونیم کدوم ورژن اون.
جناب آقای SYSMAN،
جواب شما اینجا هست:
http://www.codeproject.com/dotnet/DetectDotNet.asp
it's an unmanaged C++ class with zero dependency on anything .NET related
سلام
1- آقای محمدی، شما دو طرفه نگاه کنید و به ما هم بگویید چرا این یک ضعف نیست. چرا به این دلفی بنده خدا که بدون هیچگونه ستاپ کردنی برنامش کار میکنه، نمیگیم قدرت؟
2- آقای راد، بنده که شما را به عنوان یکی از بهترینهای برنامه نویسی قبول دارم. دیگه لازم نبود که چهارتا بچه مثل ما را مسخره کنید و با گذاشتن کلی علامت تعجب جلوی "با عرض ادب خدمت اساتید VB.NET" اینو ثابت کنید :-) ولی الحق که حق دارید.
3- اما آقای راد، اصلا وقتی برنامه اجرا نمیشه، به چه درد میخوره که ما بدونیم ورژن فریم ورک چنده؟
آقای صابر:
من اون zip رو دانلود کردم ولی ظاهرا به زبان C++ بود که من هم نصب ندارم که امتحانش کنم. ولی اگر خودتون تستش کردید، میشه بفرمایید بالاخره چطور بدون نصب فریم ورک، این برنامه کار میکنه. در واقع این نیاز به هیچ یک از کلاسهای فریم ورک نداره؟
خانم نیلوفر،نقل قول:
نوشته شده توسط niloufar
این فایلها هیچ وابستگی به dotnetframework ندارن.
من تا حالا با unmanaged code توی visual studio کار نکردم.
فقط با جستجو دیدم که انگار میشه این کدها رو با visual studio 2003 و 2005 کامپایل کرد.
کسی که میدونه چطور؟
یادآوری
فایل رو از اینجا داونلود کنید: http://www.codeproject.com/dotnet/DetectDotNet.asp
سلام به همگی
دوست عزیز Behrouz_Rad . این کدی که شما فرمودید رو باید کجا نوشت . ؟
خودتان هم عرض کردید که بدون دات نت فریم ورک هیچ برنامه با این نسخه اجرا نخواهد شد .
در ضمن خدمت دوستانی هم که راه حل VB6 را پیشنهاد کردند یه سوال دارم . مگر برنامه های VB6 هم بدون پکیج و اون چند فایل اصلی اجرا میشن . اونها هم که خودشون نیازمند یه تعداد فایل Base هستند . ؟ اگر جواب بدین ممنون میشم .
سلامنقل قول:
نوشته شده توسط habedijoo
1- حقیقتش منم هنوز نوفهمیدم که این کدها چه جوری بدون DotNetFramework کار میکنن، جناب آقای راد اگه لطف کنید توضیح بدید ممنون میشم اگه توضیح بدید (راستی آقای راد جدی من اون قبلی رو فقط به صرف مزاح گفتم. تازه از :-) اینا هم که جلوش گذاشته بودم. ولی راستی راستی بنده شما را به عنوان یکی از بهترینا قبول دارم)
2- جناب عابدی جو، برنامه های VB6 فقط به دوتا dll برای کار نیاز دارن که میتونید اونا را (بجای شاخه سیستم) از کنار خود برنامه بخونید.
3- جدی جدی چه طور میشه برنامه تحت دات نت بدون فریم ورک کار کنه؟
کد های unmanaged نوشته شده در VC++.Net چه 2003 و چه 2005 هردو درصورتیکه در مد Unmanaged کامپایل شند میتونن بدون نیاز به وجود Framework روی سیستم کلاینت اجرا بشند (دلیلش هم واضحه ، استفاده از کد unmanaged یعنی عدم بهره گیری از قابلیت های CLR runtime )
بنابراین تکه برنامه ای که راجع بهش صحبت شد با استفاده از این قابلیت اجرا میشه.
متشکرم آقای فرهاد،
بله، میدونیم که اجرا میشه، اما نمیدونیم چطور؟!
آیا باید آنها را به صورت dll در آورد و به عنوان refrence به پروژه اجرا کرد؟
چطور آنها را dll کنیم؟
خیر ،در هر صورت اگر هم بشه به عنوان یک Unmanaged assembly اون رو به پروژه اضافه کرد چیزی که اول اجرا میشه برنامه Managed شماست که درصورت نبود فریم ورک اجرا نخواهد شد.
درصورتی میتونید از کلاسی که در مقاله فوق قرار داره استفاده کنید که برنامه اصلی هم Unmanaged باشه، (همان نمونه ای که در خود مقاله ذکر شده ، مثلا استفاده از این کد در برنامه های Installer جهت تشخیص وجود فریم ورک و ...)
بنابراین درصورتیکه برنامه اصلی "مدیریت شده" است ؛ راهی که عموما استفاده میشود اجرای تکه برنامه detector در ابتدا و سپس اجرای برنامه اصلی از طریق همان detector در صورت وجود فریم ورک میباشد.
سلام
1- این نوع کامپایل که فرمودید (Unmanaged) فقط تو C++ کار میکنه؟
2- دقیقا چه نوع کارهایی را میشه تو این روش کامپایل برنامه نویسی کرد؟
3- آقای راد، چرا پستتونو پاک کرده اید، آیا مشکلی داشت؟
حق با شماست، اگر به عنوان refrence (و یا به قول شما unmanaged assembly) به پروژه اضافه بشه، اول پروژهی managed اجرا میشه که به داتنت نیاز داره اجرا میشه.نقل قول:
نوشته شده توسط Farhad.B.S
پس باید اینکار رو کرد:
یک برنامه کوچک unmanaged بنویسیم که با استفاده از کلاسی که توی اون مقاله قابل دانلود هست، تشخیص بده که مثلاً آیا داتنت ورژن ۲ نصب هست و یا خیر.
اگر نصب بود، پروژه اجرا بشه و اگر نصب نبود، dotnetframework نصب بشه.
درسته؟
حالا یک سوال پیش میاد، با استفاده از VS 2005 چطور میتونیم یک پروژه unmanaged رو کامپایل و اجرا کنیم؟
حق با شماست، اگر به عنوان refrence (و یا به قول شما unmanaged assembly) به پروژه اضافه بشه، اول پروژهی managed اجرا میشه که به داتنت نیاز داره اجرا میشه.نقل قول:
نوشته شده توسط Farhad.B.S
پس باید اینکار رو کرد:
یک برنامه کوچک unmanaged بنویسیم که با استفاده از کلاسی که توی اون مقاله قابل دانلود هست، تشخیص بده که مثلاً آیا داتنت ورژن ۲ نصب هست و یا خیر.
اگر نصب بود، پروژه اجرا بشه و اگر نصب نبود، dotnetframework نصب بشه.
درسته؟
حالا یک سوال پیش میاد، با استفاده از VS 2005 چطور میتونیم یک پروژه unmanaged رو کامپایل و اجرا کنیم؟
1.بلهنقل قول:
1- این نوع کامپایل که فرمودید (Unmanaged) فقط تو C++ کار میکنه؟
2- دقیقا چه نوع کارهایی را میشه تو این روش کامپایل برنامه نویسی کرد؟
2.استفاده از کتابخانه های MFC و ATL و Win32
1.بله همینطوره.نقل قول:
اگر نصب بود، پروژه اجرا بشه و اگر نصب نبود، dotnetframework نصب بشه.
درسته؟
حالا یک سوال پیش میاد، با استفاده از VS 2005 چطور میتونیم یک پروژه unmanaged رو کامپایل و اجرا کنیم؟
2.همونطور که در بالا عرض کردم این امکان فقط در کامپایلر VC++.Net وجود داره.
همینطور ابزارهایی وجود دارند که کد های IL تولید شده توسط کامپایلر های VB.Net ، CShrap و ... رو میتونن به کد native سیستم عامل تبدیل کنند، بنابراین میتونید با استفاده از این ابزارها یک فایل اجرایی مستقل (با همون شرایطی که در پست اول بهش اشاره کردم) ایجاد کنید.
در برداشت منظور دوستمون اشتباه کردم.نقل قول:
آقای راد، چرا پستتونو پاک کرده اید، آیا مشکلی داشت؟
پاسخ فرهاد جان درسته.
موفق باشید.نقل قول:
راهی که عموما استفاده میشود اجرای تکه برنامه detector در ابتدا و سپس اجرای برنامه اصلی از طریق همان detector در صورت وجود فریم ورک میباشد.
سلام به همه دوستان
دوستان همه فرمایشات درست . میشه یک نفر یه مثال شسته رفته بزار تا قضیه سر وتهش به هم بیاد .
ممنونم از همه
یعنی یک برنامه باشه که اول وجود دات نت رو چک کنه و در صورت نبود اونو نصب کنه و بعد برنامه شما رو اجرا کنه تمام این دعواها و بحثها تموم میشه ؟؟؟؟؟
اگر اینطوره یک هفته به من وقت بدید براتون بنویسم و اگر هم غیر از اینه که هیچ .
بله همینه :)نقل قول:
نوشته شده توسط بابک زواری
اما بحث اینجاست که با چه زبانی باید نوشته بشه؟
اگر با unmanaged cpp، چطور باید توی vs 2005 کامپایل بشه؟
تو سایت میکروسافت نوشته :
Determine which versions of the .NET Framework are installed on a computer
The easiest way to determine which versions of the .NET Framework are installed on a computer is to locate the %systemroot%\Microsoft.NET\Framework folder. You can paste the listed address for the Framework folder into a Windows Explorer address bar to navigate to the Framework folder. The three released versions of the .NET Framework are contained in the following folders:
•v1.0.3705
•v1.1.4322
•v2.0.50727
من برای خودم اینطور کار کردم که برنامه ایی رو با C یا Delphi مینویسم که SPlash برنامه اصلی است اگر فریم ورک نبود که اتوماتیک اونو نصب میکنه ولی اگر بود برنامه ایی رو که با دات نت نوشتم رو اجرا میکنه .
Determine which versions of the .NET Framework are installed on a computer
The easiest way to determine which versions of the .NET Framework are installed on a computer is to locate the %systemroot%\Microsoft.NET\Framework folder. You can paste the listed address for the Framework folder into a Windows Explorer address bar to navigate to the Framework folder. The three released versions of the .NET Framework are contained in the following folders: •v1.0.3705•v1.1.4322•v2.0.50727
سلام بابک جان
آقا ما منتظر مثالت هستیم . دستت درد نکنه .
به هر حال این مساله که با vb.net نمیشه فهمید که Frame work روی کامپیوتر نصبه یا نه خودش یک ضعف خیلی بده
سلام به همگی دوستان
چرا این بحث به این مهمی نیمه کاره رها شد . من نمیدونم .
به هر حال این لینک رو ببینید . http://www.kbalertz.com/Feedback_914135.aspx
خوب راه حلی پیدا نشد جز راه حل استاد زواری؟
اینم یک راه حل نه زیاد جالب
ساده ترین روش برای دونستن اینکه .NET در یک کامپیوتر نصب هست یا نه اینه که وجود فایل MSCorEE.dll رو در دایرکتوری %WinDir%\System32 بررسی کنیم. در صورت وجود این فایل میشه فهمید که در اوون سیستم .NET Framework وجود داره.
اما اگر به دلایلی بخواهیم از نصب بودن نسخه ی خاصی از .NET مطمین بشیم می تونیم کلید زیر رو در رجیستری بررسی کنیم:
HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\.NETFramewor k\Policy
قبلا یک سری مطلب در بخش مقالات سایت در مورد ارتباط فایل MSCorEE.dll با اجرای برنامه های تحت .NET نوشته بودم که متاسفانه همه پاک شدن.
به نظر این راه بهتری هست باز هم باید تست بشه ببینم چه طوری جواب می دهد.
یه راه دیگه هم هست اونم اینکه وقتی داریم برنامه رو با Install Shield . pakage میکنیم فریم ورک رو هم توش بزاریم و هنگام نصب فریم ورک رو هم نصب کنه
خب اگه قبلاً Framework نصب بوده باشه چی؟نقل قول:
یه راه دیگه هم هست اونم اینکه وقتی داریم برنامه رو با Install Shield . pakage میکنیم فریم ورک رو هم توش بزاریم و هنگام نصب فریم ورک رو هم نصب کنه
ضمناً انقدر به Framework حمله نکنین. این حرف شما که نمیشه دید Framework نصب شده یا نه درسته. اما Framework باعث میشه که توی برنامه های بزرگ حجم برنامه گاهی تا صدها مگابایت پایین بیاد. چون شما دیگه لازم نیست که همه کامپوننتها یا کتابخانه هایی رو که استفاده کردین توی resource برنامه قرار بدین.
ببینید اگه همزمان با نصب برنامه فریمورک رو نصب کنیم دیگه مطمئن هستیم نصبه و نیازی به نصب نداره و اگر توی پکیج باشه با ریمو کردن هم ریمو میشه ولی برای مواقعی که فریم ورک رو یه نرم افزار دیگه نصب کرده باشه فکر کنم همون چک کردن رجیستری توی اسپلش بهترین راه باشه
اصلاٌ راهی هست که بشه یهنرم افزار دیگه حالا فریم ورک نبود آفیس مثلاٌ رو همزمان با برنامه نصب کرد چون من این سوال رونوشته بودم ولی هیچ کس جوابی نداد
اگر قبلا framework نصب شده باشه instal shield از کنارش می گذره یعنی اگه نصب باشه که هیچ و اگه نصب نباشه نصبش می کنه
بله منم همینو میگم فقط یه مشکل هست که چطورمیشه برنامه روبا InstallShield توری پکیج کرد که همزمان با نصب برنامه فریمورک و هم نصب کنه
اگر این حل بشه خیلی خوبه
سلام .
با VB6 یا ++C یا هر زبان دیگه ای که پایه اش net framework نیست بگذارید از از آدرس زیر در رجیستری :HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\.NETFramewo rk
مقدار InstallRoot را بگیره ، اگر وجود داشت که یعنی نصبه(البته بازم می تونه نباشه) و اگر هم نبود که نصب نیست .
موفق باشید .