PDA

View Full Version : سوال: تشخیص نصب بودن فریم ورک ها



ali reza mansoori 2
دوشنبه 24 مهر 1391, 00:55 صبح
سلام دوستان
دنبال کدی میگردم که بررسی کنه ببینه مثلا دانت نت فریم ورک 3.5 نصبه یا نه

arash020
دوشنبه 24 مهر 1391, 03:12 صبح
سلام

چندتا لینک ببین:

لینک 1
(http://www.codeproject.com/Articles/18574/Is-NET-Framework-installed-on-this-machine)
لینک 2 (http://www.codeproject.com/Articles/17501/Using-managed-code-to-detect-what-NET-Framework-ve)
لینک 3 (http://www.msfn.org/board/topic/141968-how-to-check-what-version-of-net-framework-you-have-installed/)
لینک 4 (http://www.codeproject.com/Tips/135964/Get-NET-Framework-version)

gilsoft
دوشنبه 24 مهر 1391, 10:54 صبح
سلام دوستان
دنبال کدی میگردم که بررسی کنه ببینه مثلا دانت نت فریم ورک 3.5 نصبه یا نه

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

Imports Microsoft.Win32
Imports System.Globalization

Public Class NETVersionChecker
Public Structure DOTNETVersionInfo
Public FrameworkVersion As Double
Public ServicePack As Integer
End Structure

Public Shared Function CheckRequiredDOTNETVersion(ByVal required As DOTNETVersionInfo) As Boolean
Dim reslt As Boolean = False
Dim tmpFramework As Double = 0
Dim tmpSP As Integer = 0
Try
Dim installed_versions As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP", False)
Dim version_names As String() = installed_versions.GetSubKeyNames()
Dim tmpBaseVersion As String
'check each installed version
For Each ver As String In version_names
'set default values
tmpFramework = 0
tmpSP = 0
tmpBaseVersion = String.Empty
Try
'version names start with 'v', eg, 'v3.5' which needs to be trimmed off before conversion
Dim tmpFullVersion As String = ver.Remove(0, 1)
'now remove the minor versions 2.0.5725
If tmpFullVersion.Length > 3 Then
tmpBaseVersion = tmpFullVersion.Remove(tmpFullVersion.IndexOfAny((".").ToCharArray(), 2), tmpFullVersion.Length - 3)
Else
'its just 3 digit version
tmpBaseVersion = tmpFullVersion
End If
Dim basicVersion As Double = 0
If Double.TryParse(tmpBaseVersion, basicVersion) Then
tmpFramework = basicVersion
End If
Catch
tmpFramework = 0
End Try
'The service pack key might not exist so it might throw an error
Try
tmpSP = Convert.ToInt32(installed_versions.OpenSubKey(ver) .GetValue("SP", 0))
Catch
End Try
If tmpFramework = required.FrameworkVersion AndAlso tmpSP = required.ServicePack Then
reslt = True
Exit For
End If
Next
Catch exp As Exception
Dim message As String = "Error occured:" + exp.Message
If TypeOf exp Is System.Security.SecurityException Then
message += vbLf & " Unable to find .NET Framework version. " & vbLf & " The user does not have the permissions required to access the registry key:" & vbLf & "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"
End If
MessageBox.Show(message)
End Try
Return reslt
End Function

Public Shared Function GetLatestDOTNETVersion() As DOTNETVersionInfo
Dim dnVer As DOTNETVersionInfo
dnVer.FrameworkVersion = 0
dnVer.ServicePack = 0
Try
Dim installed_versions As RegistryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP", False)
Dim version_names As String() = installed_versions.GetSubKeyNames()
'version names start with 'v', eg, 'v3.5' which needs to be trimmed off before conversion
Dim Framework As Double = Convert.ToDouble(version_names(version_names.Lengt h - 1).Remove(0, 1), CultureInfo.InvariantCulture)
dnVer.FrameworkVersion = Framework
'The service pack key might not exist so it might throw an error
Dim SP As Integer = 0
Try
SP = Convert.ToInt32(installed_versions.OpenSubKey(vers ion_names(version_names.Length - 1)).GetValue("SP", 0))
Catch
End Try
dnVer.ServicePack = SP
Catch exp As Exception
Dim message As String = "Error occured:" + exp.Message
If TypeOf exp Is System.Security.SecurityException Then
message += vbLf & " Unable to find .NET Framework version. " & vbLf & " The user does not have the permissions required to access the registry key:" & vbLf & "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP"
End If
MessageBox.Show(message)
End Try
Return dnVer
End Function



End Class

اگه ServicePack رو نمیخوای .. میتونی سطر 46 رو تغییر بدی ...

روش فراخوانی این کامپوننت به شکل زیر میباشد :

Imports WindowsApplication1.NETVersionChecker

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim VerInfo As DOTNETVersionInfo

VerInfo = GetLatestDOTNETVersion()

If CheckRequiredDOTNETVersion(VerInfo) = True Then
MessageBox.Show("Framework Version : " + VerInfo.FrameworkVersion.ToString + vbCrLf + "Service Pack : " + VerInfo.ServicePack.ToString, "Info", MessageBoxButtons.OK, MessageBoxIcon.Information)
End If
End Sub
End Class

موفق باشید ...