Índice de la sección dedicada a .NET (en el Guille) Cómo... en .NET

Averiguar el path de .NET Framework

Código para Visual Basic.NET (VB.NET)

Código para C Sharp (C#)


Publicado el 05/Dic/2004
Actualizado el 05/Dic/2004
Autor: Guillermo 'guille' Som

 

 
 

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


Código para Visual Basic.NET (VB.NET)El código para VB .NET

' La clase para saber el path y la versión de .NET Framework
' Se deben indicar estas importaciones
Imports System
Imports System.Runtime.InteropServices
Class 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

 


Código para C Sharp (C#)El código para C#

// 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);
}

 


la Luna del Guille o... el Guille que está en la Luna... tanto monta...