View Full Version : تشخیص نصب Framework روی سیستم
SYSMAN
یک شنبه 23 بهمن 1384, 18:01 عصر
با سلام
چطوری می شه تشخیص داد Framework روی یک سیستم نصب هست تا زمانی که برنامه اجرا می شه در صورت نصب نبودن Framework یک پیغام مناسب به کاربر داده بشه؟
niloufar
دوشنبه 24 بهمن 1384, 11:41 صبح
سلام
1- اگه با خود دات نت کد مینویسی ساده ترین راهش اینه که ببینی برنامه خودت بالا میاد یا نه :-) آخه اگه فریم ورک نصب نباشه, برنامه خودتم کار نمیکنه که حالا بخوای چک کنی نصب هست یا نه
2- ولی مثلا میتونه یه نیمچه کد با vb6 بنویسی و رجیستری رو چک کنی، چون وقتی نصب باشه، اونجا نوشته میشه (یه سرچ تو رجیستری بزن متوجه میشی)
vbapr2005
جمعه 28 بهمن 1384, 16:42 عصر
سلام
1- اگه با خود دات نت کد مینویسی ساده ترین راهش اینه که ببینی برنامه خودت بالا میاد یا نه :-) آخه اگه فریم ورک نصب نباشه, برنامه خودتم کار نمیکنه که حالا بخوای چک کنی نصب هست یا نه
2- ولی مثلا میتونه یه نیمچه کد با vb6 بنویسی و رجیستری رو چک کنی، چون وقتی نصب باشه، اونجا نوشته میشه (یه سرچ تو رجیستری بزن متوجه میشی)
نیلوفر ممنون
اما با چه کدی میتونیم بفهمیم برنامه مون داره اجرا میشه یا نه؟
بعدشم این که اگه کد بالا رو بنویسیم حتما یه جواب برمیگردونه : برنامه داره اجرا میشه. چون اگه اجرا نشه که این کد عمل نمیکنه!
فکر کنم با روش مشابه ابتکار شما بشه اون مشکل رو هم حل کرد: وقتی برنامه اجرا میشه تو یه جایی (مثلا همون Registery) یه تغییری بدیم بعد یه برنامه با وی بی بنویسیم و اون قسمت Registery رو چک کنه.
niloufar
شنبه 29 بهمن 1384, 12:26 عصر
سلام
تنها راهش یه نیمچه برنامه نویسی با VB6 است
SYSMAN
شنبه 29 بهمن 1384, 12:50 عصر
نه به نظرم راه بهتری هم باید باشه. VB6 مرده. پس متوسل شدن به یک مرده منطقی نیست اون هم در مورد یک مجموعه مثل VS2005
niloufar
شنبه 29 بهمن 1384, 13:38 عصر
نه به نظرم راه بهتری هم باید باشه. VB6 مرده. پس متوسل شدن به یک مرده منطقی نیست اون هم در مورد یک مجموعه مثل VS2005
سلام
همین مجموعه بزرگ (2005) که خودم هم دیدید در پست هام خیلی طرفداریشو میکنم، یه ضعف خیلی بزرگ داره و اون اینکه بدون DotNet Framework کار نمیکنه
البته اگه یکی بتونه یه راهی پیدا کنه که بتونه این Framework رو هم در داخل برنامه ریسورس کنه (که بعید نیست ولی راه خوبی نیست که چند ده مگابایت به ریسورس اضافه کنیم) خوب احتمالا دیگه نیازی بهش نیست
ولی اصلا دنبال این نباشید که بدون وجود Framework (نه نصبی نه ریسورسی) برنامه هاتون کار کنه و بدون این Framework فقط دنبال برنامه های کوتاه VB6ای باشید.
Hamedm
شنبه 29 بهمن 1384, 14:12 عصر
همین مجموعه بزرگ (2005) که خودم هم دیدید در پست هام خیلی طرفداریشو میکنم، یه ضعف خیلی بزرگ داره و اون اینکه بدون DotNet Framework کار نمیکنه
سلام
این اصلا ضعف نیست. یک طرفه به موضوع نگاه نکنید.
در پناه حق موفق باشید و پرتوان
Behrouz_Rad
شنبه 29 بهمن 1384, 16:44 عصر
با عرض ادب خدمت اساتید VB.NET !!!
به استحضار می رساند که با استفاده از خاصیت Version کلاس Environment به راحتی قادر به، به دست آوردن نسخه ی NET Framework. بر روی سیستم خود هستید.
این متد، کلاسی از نوع Version را برگشت می دهد که دارای تعدادی متد و خاصیت جهت آگاهی از نسخه ی دات نت فریمورک نصب شده بر روی سیستم است.
مثال:
Dim objVersion As Version
objVersion = System.Environment.Version
MessageBox.Show(objVersion.ToString)
می تونید مشخصه های Major، Minor، Build را نیز با استفاده از خواص این کلاس به دست آورید.
موفق باشید.
صابر
شنبه 29 بهمن 1384, 19:20 عصر
جناب آقای راد،
مشکل اینجاست که اصلاً برنامه روی سیستم عاملی که dotnetframework نداره اجرا نمیشه که بخواهیم با این روش ورژن آن را چک کنیم.
روش شما برای زمانی مناسبه که بدونیم dotnetframework هست اما نمیدونیم کدوم ورژن اون.
جناب آقای SYSMAN،
جواب شما اینجا هست:
http://www.codeproject.com/dotnet/DetectDotNet.asp
it's an unmanaged C++ class with zero dependency on anything .NET related
niloufar
شنبه 29 بهمن 1384, 19:42 عصر
سلام
1- آقای محمدی، شما دو طرفه نگاه کنید و به ما هم بگویید چرا این یک ضعف نیست. چرا به این دلفی بنده خدا که بدون هیچگونه ستاپ کردنی برنامش کار میکنه، نمیگیم قدرت؟
2- آقای راد، بنده که شما را به عنوان یکی از بهترینهای برنامه نویسی قبول دارم. دیگه لازم نبود که چهارتا بچه مثل ما را مسخره کنید و با گذاشتن کلی علامت تعجب جلوی "با عرض ادب خدمت اساتید VB.NET" اینو ثابت کنید :-) ولی الحق که حق دارید.
3- اما آقای راد، اصلا وقتی برنامه اجرا نمیشه، به چه درد میخوره که ما بدونیم ورژن فریم ورک چنده؟
niloufar
شنبه 29 بهمن 1384, 20:04 عصر
آقای صابر:
من اون zip رو دانلود کردم ولی ظاهرا به زبان C++ بود که من هم نصب ندارم که امتحانش کنم. ولی اگر خودتون تستش کردید، میشه بفرمایید بالاخره چطور بدون نصب فریم ورک، این برنامه کار میکنه. در واقع این نیاز به هیچ یک از کلاسهای فریم ورک نداره؟
صابر
یک شنبه 30 بهمن 1384, 01:33 صبح
آقای صابر:
من اون zip رو دانلود کردم ولی ظاهرا به زبان C++ بود که من هم نصب ندارم که امتحانش کنم. ولی اگر خودتون تستش کردید، میشه بفرمایید بالاخره چطور بدون نصب فریم ورک، این برنامه کار میکنه. در واقع این نیاز به هیچ یک از کلاسهای فریم ورک نداره؟
خانم نیلوفر،
این فایلها هیچ وابستگی به dotnetframework ندارن.
من تا حالا با unmanaged code توی visual studio کار نکردم.
فقط با جستجو دیدم که انگار میشه این کدها رو با visual studio 2003 و 2005 کامپایل کرد.
کسی که میدونه چطور؟
یادآوری
فایل رو از اینجا داونلود کنید: http://www.codeproject.com/dotnet/DetectDotNet.asp
habedijoo
یک شنبه 30 بهمن 1384, 09:40 صبح
سلام به همگی
دوست عزیز Behrouz_Rad . این کدی که شما فرمودید رو باید کجا نوشت . ؟
خودتان هم عرض کردید که بدون دات نت فریم ورک هیچ برنامه با این نسخه اجرا نخواهد شد .
در ضمن خدمت دوستانی هم که راه حل VB6 را پیشنهاد کردند یه سوال دارم . مگر برنامه های VB6 هم بدون پکیج و اون چند فایل اصلی اجرا میشن . اونها هم که خودشون نیازمند یه تعداد فایل Base هستند . ؟ اگر جواب بدین ممنون میشم .
niloufar
یک شنبه 30 بهمن 1384, 11:38 صبح
سلام به همگی
دوست عزیز Behrouz_Rad . این کدی که شما فرمودید رو باید کجا نوشت . ؟
خودتان هم عرض کردید که بدون دات نت فریم ورک هیچ برنامه با این نسخه اجرا نخواهد شد .
در ضمن خدمت دوستانی هم که راه حل VB6 را پیشنهاد کردند یه سوال دارم . مگر برنامه های VB6 هم بدون پکیج و اون چند فایل اصلی اجرا میشن . اونها هم که خودشون نیازمند یه تعداد فایل Base هستند . ؟ اگر جواب بدین ممنون میشم .
سلام
1- حقیقتش منم هنوز نوفهمیدم که این کدها چه جوری بدون DotNetFramework کار میکنن، جناب آقای راد اگه لطف کنید توضیح بدید ممنون میشم اگه توضیح بدید (راستی آقای راد جدی من اون قبلی رو فقط به صرف مزاح گفتم. تازه از :-) اینا هم که جلوش گذاشته بودم. ولی راستی راستی بنده شما را به عنوان یکی از بهترینا قبول دارم)
2- جناب عابدی جو، برنامه های VB6 فقط به دوتا dll برای کار نیاز دارن که میتونید اونا را (بجای شاخه سیستم) از کنار خود برنامه بخونید.
3- جدی جدی چه طور میشه برنامه تحت دات نت بدون فریم ورک کار کنه؟
Farhad.B.S
یک شنبه 30 بهمن 1384, 13:27 عصر
کد های unmanaged نوشته شده در VC++.Net چه 2003 و چه 2005 هردو درصورتیکه در مد Unmanaged کامپایل شند میتونن بدون نیاز به وجود Framework روی سیستم کلاینت اجرا بشند (دلیلش هم واضحه ، استفاده از کد unmanaged یعنی عدم بهره گیری از قابلیت های CLR runtime )
بنابراین تکه برنامه ای که راجع بهش صحبت شد با استفاده از این قابلیت اجرا میشه.
صابر
یک شنبه 30 بهمن 1384, 13:29 عصر
متشکرم آقای فرهاد،
بله، میدونیم که اجرا میشه، اما نمیدونیم چطور؟!
آیا باید آنها را به صورت dll در آورد و به عنوان refrence به پروژه اجرا کرد؟
چطور آنها را dll کنیم؟
Farhad.B.S
یک شنبه 30 بهمن 1384, 13:55 عصر
خیر ،در هر صورت اگر هم بشه به عنوان یک Unmanaged assembly اون رو به پروژه اضافه کرد چیزی که اول اجرا میشه برنامه Managed شماست که درصورت نبود فریم ورک اجرا نخواهد شد.
درصورتی میتونید از کلاسی که در مقاله فوق قرار داره استفاده کنید که برنامه اصلی هم Unmanaged باشه، (همان نمونه ای که در خود مقاله ذکر شده ، مثلا استفاده از این کد در برنامه های Installer جهت تشخیص وجود فریم ورک و ...)
بنابراین درصورتیکه برنامه اصلی "مدیریت شده" است ؛ راهی که عموما استفاده میشود اجرای تکه برنامه detector در ابتدا و سپس اجرای برنامه اصلی از طریق همان detector در صورت وجود فریم ورک میباشد.
niloufar
دوشنبه 01 اسفند 1384, 12:31 عصر
سلام
1- این نوع کامپایل که فرمودید (Unmanaged) فقط تو C++ کار میکنه؟
2- دقیقا چه نوع کارهایی را میشه تو این روش کامپایل برنامه نویسی کرد؟
3- آقای راد، چرا پستتونو پاک کرده اید، آیا مشکلی داشت؟
صابر
دوشنبه 01 اسفند 1384, 15:14 عصر
خیر ،در هر صورت اگر هم بشه به عنوان یک Unmanaged assembly اون رو به پروژه اضافه کرد چیزی که اول اجرا میشه برنامه Managed شماست که درصورت نبود فریم ورک اجرا نخواهد شد.
درصورتی میتونید از کلاسی که در مقاله فوق قرار داره استفاده کنید که برنامه اصلی هم Unmanaged باشه، (همان نمونه ای که در خود مقاله ذکر شده ، مثلا استفاده از این کد در برنامه های Installer جهت تشخیص وجود فریم ورک و ...)
بنابراین درصورتیکه برنامه اصلی "مدیریت شده" است ؛ راهی که عموما استفاده میشود اجرای تکه برنامه detector در ابتدا و سپس اجرای برنامه اصلی از طریق همان detector در صورت وجود فریم ورک میباشد.
حق با شماست، اگر به عنوان refrence (و یا به قول شما unmanaged assembly) به پروژه اضافه بشه، اول پروژهی managed اجرا میشه که به داتنت نیاز داره اجرا میشه.
پس باید اینکار رو کرد:
یک برنامه کوچک unmanaged بنویسیم که با استفاده از کلاسی که توی اون مقاله قابل دانلود هست، تشخیص بده که مثلاً آیا داتنت ورژن ۲ نصب هست و یا خیر.
اگر نصب بود، پروژه اجرا بشه و اگر نصب نبود، dotnetframework نصب بشه.
درسته؟
حالا یک سوال پیش میاد، با استفاده از VS 2005 چطور میتونیم یک پروژه unmanaged رو کامپایل و اجرا کنیم؟
صابر
دوشنبه 01 اسفند 1384, 15:17 عصر
خیر ،در هر صورت اگر هم بشه به عنوان یک Unmanaged assembly اون رو به پروژه اضافه کرد چیزی که اول اجرا میشه برنامه Managed شماست که درصورت نبود فریم ورک اجرا نخواهد شد.
درصورتی میتونید از کلاسی که در مقاله فوق قرار داره استفاده کنید که برنامه اصلی هم Unmanaged باشه، (همان نمونه ای که در خود مقاله ذکر شده ، مثلا استفاده از این کد در برنامه های Installer جهت تشخیص وجود فریم ورک و ...)
بنابراین درصورتیکه برنامه اصلی "مدیریت شده" است ؛ راهی که عموما استفاده میشود اجرای تکه برنامه detector در ابتدا و سپس اجرای برنامه اصلی از طریق همان detector در صورت وجود فریم ورک میباشد.
حق با شماست، اگر به عنوان refrence (و یا به قول شما unmanaged assembly) به پروژه اضافه بشه، اول پروژهی managed اجرا میشه که به داتنت نیاز داره اجرا میشه.
پس باید اینکار رو کرد:
یک برنامه کوچک unmanaged بنویسیم که با استفاده از کلاسی که توی اون مقاله قابل دانلود هست، تشخیص بده که مثلاً آیا داتنت ورژن ۲ نصب هست و یا خیر.
اگر نصب بود، پروژه اجرا بشه و اگر نصب نبود، dotnetframework نصب بشه.
درسته؟
حالا یک سوال پیش میاد، با استفاده از VS 2005 چطور میتونیم یک پروژه unmanaged رو کامپایل و اجرا کنیم؟
Farhad.B.S
دوشنبه 01 اسفند 1384, 16:10 عصر
1- این نوع کامپایل که فرمودید (Unmanaged) فقط تو C++ کار میکنه؟
2- دقیقا چه نوع کارهایی را میشه تو این روش کامپایل برنامه نویسی کرد؟
1.بله
2.استفاده از کتابخانه های MFC و ATL و Win32
اگر نصب بود، پروژه اجرا بشه و اگر نصب نبود، dotnetframework نصب بشه.
درسته؟
حالا یک سوال پیش میاد، با استفاده از VS 2005 چطور میتونیم یک پروژه unmanaged رو کامپایل و اجرا کنیم؟
1.بله همینطوره.
2.همونطور که در بالا عرض کردم این امکان فقط در کامپایلر VC++.Net وجود داره.
همینطور ابزارهایی وجود دارند که کد های IL تولید شده توسط کامپایلر های VB.Net ، CShrap و ... رو میتونن به کد native سیستم عامل تبدیل کنند، بنابراین میتونید با استفاده از این ابزارها یک فایل اجرایی مستقل (با همون شرایطی که در پست اول بهش اشاره کردم) ایجاد کنید.
Behrouz_Rad
دوشنبه 01 اسفند 1384, 17:03 عصر
آقای راد، چرا پستتونو پاک کرده اید، آیا مشکلی داشت؟
در برداشت منظور دوستمون اشتباه کردم.
پاسخ فرهاد جان درسته.
راهی که عموما استفاده میشود اجرای تکه برنامه detector در ابتدا و سپس اجرای برنامه اصلی از طریق همان detector در صورت وجود فریم ورک میباشد.
موفق باشید.
habedijoo
دوشنبه 01 اسفند 1384, 17:17 عصر
سلام به همه دوستان
دوستان همه فرمایشات درست . میشه یک نفر یه مثال شسته رفته بزار تا قضیه سر وتهش به هم بیاد .
ممنونم از همه
بابک زواری
سه شنبه 02 اسفند 1384, 19:43 عصر
یعنی یک برنامه باشه که اول وجود دات نت رو چک کنه و در صورت نبود اونو نصب کنه و بعد برنامه شما رو اجرا کنه تمام این دعواها و بحثها تموم میشه ؟؟؟؟؟
اگر اینطوره یک هفته به من وقت بدید براتون بنویسم و اگر هم غیر از اینه که هیچ .
صابر
سه شنبه 02 اسفند 1384, 19:56 عصر
یعنی یک برنامه باشه که اول وجود دات نت رو چک کنه و در صورت نبود اونو نصب کنه و بعد برنامه شما رو اجرا کنه تمام این دعواها و بحثها تموم میشه ؟؟؟؟؟
اگر اینطوره یک هفته به من وقت بدید براتون بنویسم و اگر هم غیر از اینه که هیچ .
بله همینه :)
اما بحث اینجاست که با چه زبانی باید نوشته بشه؟
اگر با unmanaged cpp، چطور باید توی vs 2005 کامپایل بشه؟
بابک زواری
سه شنبه 02 اسفند 1384, 21:58 عصر
تو سایت میکروسافت نوشته :
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 برنامه اصلی است اگر فریم ورک نبود که اتوماتیک اونو نصب میکنه ولی اگر بود برنامه ایی رو که با دات نت نوشتم رو اجرا میکنه .
بابک زواری
سه شنبه 02 اسفند 1384, 21:59 عصر
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
habedijoo
چهارشنبه 03 اسفند 1384, 08:33 صبح
سلام بابک جان
آقا ما منتظر مثالت هستیم . دستت درد نکنه .
احمد رایان
پنج شنبه 04 اسفند 1384, 07:59 صبح
به هر حال این مساله که با vb.net نمیشه فهمید که Frame work روی کامپیوتر نصبه یا نه خودش یک ضعف خیلی بده
habedijoo
شنبه 13 اسفند 1384, 10:30 صبح
سلام به همگی دوستان
چرا این بحث به این مهمی نیمه کاره رها شد . من نمیدونم .
به هر حال این لینک رو ببینید . http://www.kbalertz.com/Feedback_914135.aspx
hamed_bostan
شنبه 13 اسفند 1384, 17:07 عصر
خوب راه حلی پیدا نشد جز راه حل استاد زواری؟
بابک زواری
شنبه 13 اسفند 1384, 19:04 عصر
اینم یک راه حل نه زیاد جالب
omid_Ahmadi
شنبه 13 اسفند 1384, 22:36 عصر
ساده ترین روش برای دونستن اینکه .NET در یک کامپیوتر نصب هست یا نه اینه که وجود فایل MSCorEE.dll رو در دایرکتوری %WinDir%\System32 بررسی کنیم. در صورت وجود این فایل میشه فهمید که در اوون سیستم .NET Framework وجود داره.
اما اگر به دلایلی بخواهیم از نصب بودن نسخه ی خاصی از .NET مطمین بشیم می تونیم کلید زیر رو در رجیستری بررسی کنیم:
HKEY_LOCAL_MACHINE\SOFTWARE\microsoft\.NETFramewor k\Policy
قبلا یک سری مطلب در بخش مقالات سایت در مورد ارتباط فایل MSCorEE.dll با اجرای برنامه های تحت .NET نوشته بودم که متاسفانه همه پاک شدن.
SYSMAN
شنبه 13 اسفند 1384, 23:37 عصر
به نظر این راه بهتری هست باز هم باید تست بشه ببینم چه طوری جواب می دهد.
taherbaghal
دوشنبه 15 اسفند 1384, 11:56 صبح
یه راه دیگه هم هست اونم اینکه وقتی داریم برنامه رو با Install Shield . pakage میکنیم فریم ورک رو هم توش بزاریم و هنگام نصب فریم ورک رو هم نصب کنه
touraj
یک شنبه 21 اسفند 1384, 06:25 صبح
یه راه دیگه هم هست اونم اینکه وقتی داریم برنامه رو با Install Shield . pakage میکنیم فریم ورک رو هم توش بزاریم و هنگام نصب فریم ورک رو هم نصب کنه
خب اگه قبلاً Framework نصب بوده باشه چی؟
ضمناً انقدر به Framework حمله نکنین. این حرف شما که نمیشه دید Framework نصب شده یا نه درسته. اما Framework باعث میشه که توی برنامه های بزرگ حجم برنامه گاهی تا صدها مگابایت پایین بیاد. چون شما دیگه لازم نیست که همه کامپوننتها یا کتابخانه هایی رو که استفاده کردین توی resource برنامه قرار بدین.
taherbaghal
یک شنبه 21 اسفند 1384, 08:39 صبح
ببینید اگه همزمان با نصب برنامه فریمورک رو نصب کنیم دیگه مطمئن هستیم نصبه و نیازی به نصب نداره و اگر توی پکیج باشه با ریمو کردن هم ریمو میشه ولی برای مواقعی که فریم ورک رو یه نرم افزار دیگه نصب کرده باشه فکر کنم همون چک کردن رجیستری توی اسپلش بهترین راه باشه
اصلاٌ راهی هست که بشه یهنرم افزار دیگه حالا فریم ورک نبود آفیس مثلاٌ رو همزمان با برنامه نصب کرد چون من این سوال رونوشته بودم ولی هیچ کس جوابی نداد
hamed_bostan
یک شنبه 21 اسفند 1384, 11:16 صبح
اگر قبلا framework نصب شده باشه instal shield از کنارش می گذره یعنی اگه نصب باشه که هیچ و اگه نصب نباشه نصبش می کنه
taherbaghal
یک شنبه 21 اسفند 1384, 12:17 عصر
بله منم همینو میگم فقط یه مشکل هست که چطورمیشه برنامه روبا InstallShield توری پکیج کرد که همزمان با نصب برنامه فریمورک و هم نصب کنه
اگر این حل بشه خیلی خوبه
meandyouwith2003
یک شنبه 21 اسفند 1384, 12:57 عصر
سلام .
با VB6 یا ++C یا هر زبان دیگه ای که پایه اش net framework نیست بگذارید از از آدرس زیر در رجیستری :HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\.NETFramewo rk
مقدار InstallRoot را بگیره ، اگر وجود داشت که یعنی نصبه(البته بازم می تونه نباشه) و اگر هم نبود که نصب نیست .
موفق باشید .
niloufar
یک شنبه 21 اسفند 1384, 16:11 عصر
سلام
ما تو همون صفحه اول به دوستمون گفتیم که باید در VB6 تست کنید
همه اعتراض کردند که چرا حرف از وی بی 6 میزنی
دوستان گفتند که دیگه شان ما اجل از وی بی 6 است
خلاصه الان چهار صفحه تاپیک طولانی شده
تازه حالا همه میفرمایند باید با یه چیزی که پایش رو Framework نیست اونو چک کرد (حالا کلاس رو بالا بردند و میگن مثلا با C++ !!!!!!)
خوب دیگه ....
meandyouwith2003
یک شنبه 21 اسفند 1384, 17:04 عصر
نیلوفر خانم ، VB6 نمرده ،مشکل اینجاست دوستان برای اینکه مثلا کلاس برنامه هاشون پایین نیاد میگن VB مرده ، ولی همیشه راحتترین راه رو رانتخاب کردن بهتر از انتخاب سختترین راه است .
موفق باشید
niloufar
سه شنبه 23 اسفند 1384, 13:45 عصر
نیلوفر خانم ، VB6 نمرده ،مشکل اینجاست دوستان برای اینکه مثلا کلاس برنامه هاشون پایین نیاد میگن VB مرده ، ولی همیشه راحتترین راه رو رانتخاب کردن بهتر از انتخاب سختترین راه است .
موفق باشید
سلام
دقیقا...
habedijoo
چهارشنبه 24 اسفند 1384, 16:19 عصر
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
// In case the machine this is compiled on does not have the most recent platform SDK
// with these values defined, define them here
#ifndef SM_TABLETPC
#define SM_TABLETPC 86
#endif
#ifndef SM_MEDIACENTER
#define SM_MEDIACENTER 87
#endif
// Constants that represent registry key names and value names
// to use for detection
const TCHAR *g_szNetfx10RegKeyName = _T("Software\\Microsoft\\.NETFramework\\Policy\\v1.0");
const TCHAR *g_szNetfx10RegKeyValue = _T("3705");
const TCHAR *g_szNetfx10SPxMSIRegKeyName = _T("Software\\Microsoft\\Active Setup\\Installed Components\\{78705f0d-e8db-4b2d-8193-982bdda15ecd}");
const TCHAR *g_szNetfx10SPxOCMRegKeyName = _T("Software\\Microsoft\\Active Setup\\Installed Components\\{FDC11A6F-17D1-48f9-9EA3-9051954BAA24}");
const TCHAR *g_szNetfx10SPxRegValueName = _T("Version");
const TCHAR *g_szNetfx11RegKeyName = _T("Software\\Microsoft\\NET Framework Setup\\NDP\\v1.1.4322");
const TCHAR *g_szNetfx20RegKeyName = _T("Software\\Microsoft\\NET Framework Setup\\NDP\\v2.0.50727");
const TCHAR *g_szNetfx11PlusRegValueName = _T("Install");
const TCHAR *g_szNetfx11PlusSPxRegValueName = _T("SP");
// Function prototypes
int GetNetfx10SPLevel();
int GetNetfx11SPLevel();
int GetNetfx20SPLevel();
bool IsCurrentOSTabletMedCenter();
bool IsNetfx10Installed();
bool IsNetfx11Installed();
bool IsNetfx20Installed();
bool RegistryGetValue(HKEY, const TCHAR*, const TCHAR*, DWORD, LPBYTE, DWORD);
/************************************************** ****************
Function Name: IsNetfx10Installed
Description: Uses the detection method recommended at
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/dotnetfxref.asp
to determine whether the .NET Framework 1.0 is
installed on the machine
Inputs: NONE
Results: true if the .NET Framework 1.0 is installed
false otherwise
************************************************** ****************/
bool IsNetfx10Installed()
{
TCHAR szRegValue[MAX_PATH];
return (RegistryGetValue(HKEY_LOCAL_MACHINE, g_szNetfx10RegKeyName, g_szNetfx10RegKeyValue, NULL, (LPBYTE)szRegValue, MAX_PATH));
}
/************************************************** ****************
Function Name: IsNetfx11Installed
Description: Uses the detection method recommended at
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/redistdeploy1_1.asp
to determine whether the .NET Framework 1.1 is
installed on the machine
Inputs: NONE
Results: true if the .NET Framework 1.1 is installed
false otherwise
************************************************** ****************/
bool IsNetfx11Installed()
{
bool bRetValue = false;
DWORD dwRegValue=0;
if (RegistryGetValue(HKEY_LOCAL_MACHINE, g_szNetfx11RegKeyName, g_szNetfx11PlusRegValueName, NULL, (LPBYTE)&dwRegValue, sizeof(DWORD)))
{
if (1 == dwRegValue)
bRetValue = true;
}
return bRetValue;
}
/************************************************** ****************
Function Name: IsNetfx20Installed
Description: Uses the detection method recommended at
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/redistdeploy1_1.asp
to determine whether the .NET Framework 2.0 is
installed on the machine
Inputs: NONE
Results: true if the .NET Framework 2.0 is installed
false otherwise
************************************************** ****************/
bool IsNetfx20Installed()
{
bool bRetValue = false;
DWORD dwRegValue=0;
if (RegistryGetValue(HKEY_LOCAL_MACHINE, g_szNetfx20RegKeyName, g_szNetfx11PlusRegValueName, NULL, (LPBYTE)&dwRegValue, sizeof(DWORD)))
{
if (1 == dwRegValue)
bRetValue = true;
}
return bRetValue;
}
/************************************************** ****************
Function Name: GetNetfx10SPLevel
Description: Uses the detection method recommended at
http://blogs.msdn.com/astebner/archive/2004/09/14/229802.aspx
to determine what service pack for the
.NET Framework 1.0 is installed on the machine
Inputs: NONE
Results: integer representing SP level for .NET Framework 1.0
************************************************** ****************/
int GetNetfx10SPLevel()
{
TCHAR szRegValue[MAX_PATH];
TCHAR *pszSPLevel = NULL;
int iRetValue = -1;
bool bRegistryRetVal = false;
// TODO - Need to detect what OS we are running on so we know what
// registry key to use to look up the SP level
if (IsCurrentOSTabletMedCenter())
bRegistryRetVal = RegistryGetValue(HKEY_LOCAL_MACHINE, g_szNetfx10SPxOCMRegKeyName, g_szNetfx10SPxRegValueName, NULL, (LPBYTE)szRegValue, MAX_PATH);
else
bRegistryRetVal = RegistryGetValue(HKEY_LOCAL_MACHINE, g_szNetfx10SPxMSIRegKeyName, g_szNetfx10SPxRegValueName, NULL, (LPBYTE)szRegValue, MAX_PATH);
if (bRegistryRetVal)
{
// This registry value should be of the format
// #,#,#####,# where the last # is the SP level
// Try to parse off the last # here
pszSPLevel = _tcsrchr(szRegValue, _T(','));
if (NULL != pszSPLevel)
{
// Increment the pointer to skip the comma
pszSPLevel++;
// Convert the remaining value to an integer
iRetValue = _tstoi(pszSPLevel);
}
}
return iRetValue;
}
/************************************************** ****************
Function Name: GetNetfx11SPLevel
Description: Uses the detection method recommended at
http://blogs.msdn.com/astebner/archive/2004/09/14/229574.aspx
to determine what service pack for the
.NET Framework 1.1 is installed on the machine
Inputs: NONE
Results: integer representing SP level for .NET Framework 1.1
************************************************** ****************/
int GetNetfx11SPLevel()
{
DWORD dwRegValue=0;
if (RegistryGetValue(HKEY_LOCAL_MACHINE, g_szNetfx11RegKeyName, g_szNetfx11PlusSPxRegValueName, NULL, (LPBYTE)&dwRegValue, sizeof(DWORD)))
{
return (int)dwRegValue;
}
// We can only get here if the .NET Framework 1.1 is not
// installed or there was some kind of error retrieving
// the data from the registry
return -1;
}
/************************************************** ****************
Function Name: GetNetfx20SPLevel
Description: Uses the detection method recommended at
http://blogs.msdn.com/astebner/archive/2004/09/14/229574.aspx
to determine what service pack for the
.NET Framework 2.0 is installed on the machine
Inputs: NONE
Results: integer representing SP level for .NET Framework 2.0
************************************************** ****************/
int GetNetfx20SPLevel()
{
DWORD dwRegValue=0;
if (RegistryGetValue(HKEY_LOCAL_MACHINE, g_szNetfx20RegKeyName, g_szNetfx11PlusSPxRegValueName, NULL, (LPBYTE)&dwRegValue, sizeof(DWORD)))
{
return (int)dwRegValue;
}
// We can only get here if the .NET Framework 2.0 is not
// installed or there was some kind of error retrieving
// the data from the registry
return -1;
}
bool IsCurrentOSTabletMedCenter()
{
// Use GetSystemMetrics to detect if we are on a Tablet PC or Media Center OS
return ( (GetSystemMetrics(SM_TABLETPC) != 0) || (GetSystemMetrics(SM_MEDIACENTER) != 0) );
}
/************************************************** ****************
Function Name: RegistryGetValue
Description: Get the value of a reg key
Inputs: HKEY hk - The hk of the key to retrieve
TCHAR *pszKey - Name of the key to retrieve
TCHAR *pszValue - The value that will be retrieved
DWORD dwType - The type of the value that will be retrieved
LPBYTE data - A buffer to save the retrieved data
DWORD dwSize - The size of the data retrieved
Results: true if successful, false otherwise
************************************************** ****************/
bool RegistryGetValue(HKEY hk, const TCHAR * pszKey, const TCHAR * pszValue, DWORD dwType, LPBYTE data, DWORD dwSize)
{
HKEY hkOpened;
// Try to open the key
if (RegOpenKeyEx(hk, pszKey, 0, KEY_READ, &hkOpened) != ERROR_SUCCESS)
{
return false;
}
// If the key was opened, try to retrieve the value
if (RegQueryValueEx(hkOpened, pszValue, 0, &dwType, (LPBYTE)data, &dwSize) != ERROR_SUCCESS)
{
RegCloseKey(hkOpened);
return false;
}
// Clean up
RegCloseKey(hkOpened);
return true;
}
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
int iNetfx10SPLevel = -1;
int iNetfx11SPLevel = -1;
int iNetfx20SPLevel = -1;
TCHAR szMessage[MAX_PATH];
// Determine whether or not the .NET Framework
// 1.0, 1.1 or 2.0 are installed
bool bNetfx10Installed = IsNetfx10Installed();
bool bNetfx11Installed = IsNetfx11Installed();
bool bNetfx20Installed = IsNetfx20Installed();
// If .NET Framework 1.0 is installed, get the
// service pack level
if (bNetfx10Installed)
{
iNetfx10SPLevel = GetNetfx10SPLevel();
if (iNetfx10SPLevel > 0)
_stprintf(szMessage, _T(".NET Framework 1.0 service pack %i is installed."), iNetfx10SPLevel);
else
_stprintf(szMessage, _T(".NET Framework 1.0 is installed with no service packs."));
MessageBox(NULL, szMessage, _T(".NET Framework 1.0"), MB_OK | MB_ICONINFORMATION);
}
else
{
MessageBox(NULL, _T(".NET Framework 1.0 is not installed."), _T(".NET Framework 1.0"), MB_OK | MB_ICONINFORMATION);
}
// If .NET Framework 1.1 is installed, get the
// service pack level
if (bNetfx11Installed)
{
iNetfx11SPLevel = GetNetfx11SPLevel();
if (iNetfx11SPLevel > 0)
_stprintf(szMessage, _T(".NET Framework 1.1 service pack %i is installed."), iNetfx11SPLevel);
else
_stprintf(szMessage, _T(".NET Framework 1.1 is installed with no service packs."));
MessageBox(NULL, szMessage, _T(".NET Framework 1.1"), MB_OK | MB_ICONINFORMATION);
}
else
{
MessageBox(NULL, _T(".NET Framework 1.1 is not installed."), _T(".NET Framework 1.1"), MB_OK | MB_ICONINFORMATION);
}
// If .NET Framework 2.0 is installed, get the
// service pack level
if (bNetfx20Installed)
{
iNetfx20SPLevel = GetNetfx20SPLevel();
if (iNetfx20SPLevel > 0)
_stprintf(szMessage, _T(".NET Framework 2.0 service pack %i is installed."), iNetfx11SPLevel);
else
_stprintf(szMessage, _T(".NET Framework 2.0 is installed with no service packs."));
MessageBox(NULL, szMessage, _T(".NET Framework 2.0"), MB_OK | MB_ICONINFORMATION);
}
else
{
MessageBox(NULL, _T(".NET Framework 2.0 is not installed."), _T(".NET Framework 2.0"), MB_OK | MB_ICONINFORMATION);
}
return 0;
}
این کد کاملا صحیحه و کار میکنه .
حالا باید چیکار کنیم ؟
بابک زواری
چهارشنبه 24 اسفند 1384, 19:44 عصر
به نظر شما با خود برنامه های دات نت میشه تشخیص داد که دات نت نصب یا نه ؟
البته تو یک تاپیک دیدم که نوشته بودن اگر فایلهای DLL مورد نیاز برنامه رو کنارش کپی کنید و اصلا فریم ورک نصب نشه برنامه کار میکنه ( من درستی این مطلب رو تائید یا رد نمیکنم ) اما به نظر شما میشه که با کمک این کار حتی اگر برنامه کار هم نکنه یک خطا ایجاد کنه که با کمک اون بشه یک فایل اجرائی را اجرا کرد که دات نت نصب بشه.
Namespace My
' The following events are availble for MyApplication:
'
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication
Private Sub MyApplication_UnhandledException(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.Unhandle dExceptionEventArgs) Handles Me.UnhandledException
End Sub
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupE ventArgs) Handles Me.Startup
End Sub
End Class
End Namespace
Namespace My
'NOTE: This file is auto-generated; do not modify it directly. To make changes,
' or if you encounter build errors in this file, go to the Project Designer
' (go to Project Properties or double-click the My Project node in
' Solution Explorer), and make changes on the Application tab.
'
Partial Friend Class MyApplication
<Global.System.Diagnostics.DebuggerStepThroughAttri bute()> _
Public Sub New()
MyBase.New(Global.Microsoft.VisualBasic.Applicatio nServices.AuthenticationMode.Windows)
Me.IsSingleInstance = false
Me.EnableVisualStyles = true
Me.SaveMySettingsOnExit = true
Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.S hutdownMode.AfterMainFormCloses
End Sub
<Global.System.Diagnostics.DebuggerStepThroughAttri bute()> _
Protected Overrides Sub OnCreateMainForm()
Me.MainForm = Global.WindowsApplication1.Form1
End Sub
End Class
End Namespace
بابک زواری
چهارشنبه 24 اسفند 1384, 19:56 عصر
اگر کسی سیستمی داره که دات نت دو نداره من این دو قسمت بالا رو هندل کنم و فایلش رو بفرستم تا روی اون سیستم تست کنه و جوابش بذاره همین جا
hamed_bostan
پنج شنبه 25 اسفند 1384, 08:07 صبح
استاد سلام . من می تونم تستش کنم .
hamed_bostan@yahoo.com
دقیقا باید چیکار کنم؟
taherbaghal
پنج شنبه 25 اسفند 1384, 15:44 عصر
سلام منم میتونم تست کنم فقط باید تمام مراحل رو کامل بگید من آشنایی زیادی ندارم
mostafatech
شنبه 01 اردیبهشت 1386, 19:15 عصر
معضرت میخوام.
شما خودتونو درگیر مسائل پیچیده ای میکنید که به راحتی قابل حل است.
به راحتی میشه یه فایل .js نوشت که رجیستری رو چک کنه. اگه کلید گفته شده در رجیستری وجود نداشت فایل نصب dotnetframework رو از پوشه جاری اجرا کنه.
اسم این فایل میتونه RunMeFirst.js باشه که کاربر را موضف میکنید اول این فایل رو اجرا کنه.
همونطور که میدونید اینها فایل های اوپن سورس Windows Script Host هستند که بدون کامپایل و هیچ نوع دنگ و فنگ دیگه اجرا میشن.
پیشنهاد میکنم با WSH و فایل های .reg و .inf حتما آشنا بشید. چون خیلی کارها رو خیلی راحت با این نوع فایل ها میتونید انجام بدید.
dkhatibi
یک شنبه 02 اردیبهشت 1386, 14:19 عصر
برنامه های Installer نیز این کار را خود به طور خودکار می کنند.
hamed_bostan
چهارشنبه 28 شهریور 1386, 22:58 عصر
بله منم همینو میگم فقط یه مشکل هست که چطورمیشه برنامه روبا InstallShield توری پکیج کرد که همزمان با نصب برنامه فریمورک و هم نصب کنه
اگر این حل بشه خیلی خوبه
مشکل چیه . شما خیلی راحت میتونین در instalshield مشخص کنید که چه prerequest هایی دارین و اونم در هنگام ساخت ستاپ همه اونها رو package میکنه و در هنگام نصب در صورت نصب نبودن اونها ، اونها رو نصب میکنه . مشکل چی؟؟؟
hamed_bostan
شنبه 31 شهریور 1386, 09:59 صبح
بله منم همینو میگم فقط یه مشکل هست که چطورمیشه برنامه روبا InstallShield توری پکیج کرد که همزمان با نصب برنامه فریمورک و هم نصب کنه
اگر این حل بشه خیلی خوبه
دوست عزیز من منظور شما رو متوجه نمیشم . منظورت اینه که مراحل و پینه هایی که باید پیمود تا این عمل انجام بشه رو میخوای؟
شما حرف منو تایید می کنی که میدونی میشه اما بعد میگی مشکل این هست که پزور میشه این کار رو کرد!!! منظورت ای«ه که از کدوم قسمت تو اینستالشیلذد باید این کار رو کرد؟
habil_57
دوشنبه 27 خرداد 1387, 22:10 عصر
یاد آوری :
یه را ه حل عمومی و مناسب برای شروع برنامه های دات نت و هربرنامه ای که دنگ و فنگ خاص داشتن فریم ورک رو طلب میکنه استفاده از برنامه ای هست که بدون هیچ مقدماتی اگزکویت میشن بصورتی که مقدمات اجرای برنامه های شما رو چک میکنن و اگر لزوم به نصب پکیج خاصی هست یا باید یه چیزی تو ویندوز قبلش کانفیگ بشه اونو برای شما انجام میدن و بعد که همه چیز اوکی بود برنامه شما رو ران میکنن .
راه حل : ساخت یه فایل خیلی ساده بدون و اینترفیس تو نرم افزارهایی مثل اتوپلی مدیا استودیو و اینجور برنامه هاست. من که هیچ وقت هیچ جا مشکلی بخاطر فریم ورک پیدا نکردم.
البته راه حلهای دیگه ای ام هست ولی اینم یه یادآوری بود.
navid010
سه شنبه 30 مهر 1387, 05:18 صبح
سلام
همین مجموعه بزرگ (2005) که خودم هم دیدید در پست هام خیلی طرفداریشو میکنم، یه ضعف خیلی بزرگ داره و اون اینکه بدون DotNet Framework کار نمیکنه
البته اگه یکی بتونه یه راهی پیدا کنه که بتونه این Framework رو هم در داخل برنامه ریسورس کنه (که بعید نیست ولی راه خوبی نیست که چند ده مگابایت به ریسورس اضافه کنیم) خوب احتمالا دیگه نیازی بهش نیست
ولی اصلا دنبال این نباشید که بدون وجود Framework (نه نصبی نه ریسورسی) برنامه هاتون کار کنه و بدون این Framework فقط دنبال برنامه های کوتاه VB6ای باشید.
بهتره توی ستاپ تون dotnetframework رو بزارید و تمام....
navid010
سه شنبه 30 مهر 1387, 05:22 صبح
راستی اگه Norton Gost رو روی سیستمی که دات نت فریم ورک نداره نصب کنید اجرا میشه و پیغام صحیح رو میده!!!
C_Sharp_Dot_Net
شنبه 05 بهمن 1387, 04:25 صبح
بهترین راه اینه
اگه توی شاخه ی Windows فلدری به نام Microsoft.Net باشه می شه گفت 99 درصد دات نت روی اون سیستم نسبه
C_Sharp_Dot_Net
شنبه 05 بهمن 1387, 04:26 صبح
ببخشید نصبه اشتباه لپی بود دیگه !!!!!!!!
hasanshamim
جمعه 27 شهریور 1388, 12:41 عصر
اولا سلام.
دوما ،،،، چرا دعوا می کنید؟؟؟؟؟
سوما این کدش توی c :
--------------------------------------------------------------//
#include "DetectDotNet.h"
// . . .
CDetectDotNet detect;
vector<string> CLRVersions;
cout << "Is .NET present : "
<< (detect.IsDotNetPresent() ? "Yes" : "No") << endl;
TCHAR szPath[300];
cout << "Root Path : "
<< (detect.GetInstallRootPath(szPath, 299) ? szPath : "") << endl;
cout << "Number of CLRs detected : "
<< (int)detect.EnumerateCLRVersions(CLRVersions) << endl;
cout << "CLR versions available :-" << endl;
for(vector<string>::iterator it = CLRVersions.begin();
it < CLRVersions.end(); it++)
{
cout << *it << endl;
}
cout << "Press any key..." << endl;
getch();
imanamico
شنبه 01 اسفند 1388, 20:48 عصر
کلید حل این مشکل پیش منه. دیگه هم نمی خواد جایی بگردی. بیا خودم هم برنامه و هم سورس رو بهتون میدم. یادتون هم می دم که چی به چیه. یه برنامه کوشولو تو سی شارپ. exe تحت ویندوز. تو همه ویندوزها هم کار می کنه. فکر نکنید چون کاربر جدید هستم، سرکاریا..... ایمیل من اینه:
ImanAmico@yahoo.com
r00tkit
یک شنبه 02 اسفند 1388, 01:57 صبح
اگه فایل mscoree.dll توی محل نصب ویندوز بود net. نصب هستش
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.