Publicado el 05/Dic/2004
|
Este código nos permite saber el path del .NET Framework que se está usando con nuestro ejecutable (ensamblado).
' El path en el que está instalado .NET <DllImport("mscoree.dll")> _ Private Shared Function GetCORSystemDirectory( _ <MarshalAs(UnmanagedType.LPWStr)> ByVal pbuffer As System.Text.StringBuilder, _ ByVal cchBuffer As Integer, _ ByRef dwlength As Integer) As Integer End Function Public Shared Function dotNETPath() As String Dim sb As New System.Text.StringBuilder(255) Dim n As Integer ' GetCORSystemDirectory(sb, sb.Capacity, n) If n > 0 Then Return sb.ToString().Substring(0, n - 1) Else Return "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\" End If End Function
En la clase que muestro más abajo, también se incluye cómo averiguar la versión del .NET Framework, código que está basado en la colaboración de Unai Zorrilla publicada el 9 de agosto y que fue la que me "inspiró" a la hora de buscar cómo averiguar el path del .NET.
Dicha clase tiene todos los miembros compartidos (Shared en VB, static en C#), de forma que se pueda usar sin necesidad de crear un nuevo objeto, en el código mostrado, tienes un ejemplo de cómo usarlo.
He definido dos campos de solo lectura, los cuales se asignan en el constructor compartido de la clase de forma que solo se asignen al usar por primera vez dicha clase. Sí, se que podía haberlo creado como propiedades de solo lectura, pero... así tienes otro enfoque de cómo hacer las cosas con .NET.
Espero que te sea de utilidad.
Nos vemos.
Guillermo
Más funciones relacionadas:
En la ayuda de VS:
ms-help://.../cpgenref/html/grfununmanagedapireference.htm
En la Web de Microsoft (en español):
http://msdn.microsoft.com/library/spa/cpgenref/html/grfununmanagedapireference.asp
' La clase para saber el path y la versión de .NET Framework' Se deben indicar estas importaciones Imports System Imports System.Runtime.InteropServicesClass CORUtil ' Public Shared ReadOnly dotNETPath As String Public Shared ReadOnly dotNETVersion As String Shared Sub New() dotNETPath = pNETPath() dotNETVersion = pNETVersion() End Sub ' ' El path en el que está instalado .NET <DllImport("mscoree.dll")> _ Private Shared Function GetCORSystemDirectory( _ <MarshalAs(UnmanagedType.LPWStr)> ByVal pbuffer As System.Text.StringBuilder, _ ByVal cchBuffer As Integer, _ ByRef dwlength As Integer) As Integer End Function ' función de apoyo Private Shared Function pNETPath() As String Dim sb As New System.Text.StringBuilder(255) Dim n As Integer ' GetCORSystemDirectory(sb, sb.Capacity, n) If n > 0 Then Return sb.ToString().Substring(0, n - 1) Else Return "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\" End If End Function ' ' La versión de .NET ' Basado en la colaboración de Unai Zorrilla: ' http://www.elguille.info/colabora/puntoNET/unai_infoframework.htm <DllImport("mscoree.dll")> _ Private Shared Function GetCORVersion( _ <MarshalAs(UnmanagedType.LPWStr)> ByVal pbuffer As System.Text.StringBuilder, _ ByVal cchBuffer As Integer, _ ByRef dwlength As Integer) As Integer End Function ' función de apoyo Private Shared Function pNETVersion() As String Dim sb As New System.Text.StringBuilder(255) Dim n As Integer ' GetCORVersion(sb, sb.Capacity, n) If n > 0 Then Return sb.ToString().Substring(0, n - 1) Else Return "0" End If End Function End Class
El código del método Main para probar la clase.
(declaralo en un módulo, si lo declaras dentro de esta clase, debes hacerlo usando Shared)Sub Main() Console.WriteLine("Versión de .NET: {0}", CORUtil.dotNETVersion) Console.WriteLine("Path de .NET: {0}", CORUtil.dotNETPath) End Sub
// La clase para saber el path y la versión de .NET Framework// Se deben indicar estas importaciones using System; using System.Runtime.InteropServices;public class CORUtil{ // public static string dotNETPath; public static string dotNETVersion; static CORUtil() { dotNETPath = pNETPath(); dotNETVersion = pNETVersion(); } // // El path en el que está instalado .NET [DllImport("mscoree.dll")] private static int GetCORSystemDirectory( [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pbuffer, int cchBuffer, ref int dwlength); // función de apoyo private static string pNETPath() { System.Text.StringBuilder sb = new System.Text.StringBuilder(255); int n = 0; // GetCORSystemDirectory(sb, sb.Capacity, ref n); if( n > 0 ) return sb.ToString().Substring(0, n - 1); else return @"C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\"; } // // La versión de .NET // Basado en la colaboración de Unai Zorrilla: // http://www.elguille.info/colabora/puntoNET/unai_infoframework.htm [DllImport("mscoree.dll")] private static int GetCORVersion( [MarshalAs(UnmanagedType.LPWStr)] System.Text.StringBuilder pbuffer, int cchBuffer, ref int dwlength); // función de apoyo private static string pNETVersion() { System.Text.StringBuilder sb = new System.Text.StringBuilder(255); int n = 0; // GetCORVersion(sb, sb.Capacity, ref n); if( n > 0 ) return sb.ToString().Substring(0, n - 1); else return "0"; } }
El código del método Main para probar la clase.
static void Main() { Console.WriteLine("Versión de .NET: {0}", CORUtil.dotNETVersion); Console.WriteLine("Path de .NET: {0}", CORUtil.dotNETPath); }