el Guille, la Web del Visual Basic, C#, .NET y más...

Averiguar la versión de un ejecutable o DLL usando FileVersionInfo

 
Publicado el 24/Jun/2008
Actualizado el 24/Jun/2008
Autor: Guillermo 'guille' Som

En este artículo te muestro cómo averiguar la versión de un ejecutable (o una DLL) usando el método GetVersionInfo de la clase System.Diagnostics.FileVersionInfo. El código mostrado es válido tanto para ficheros compilados con .NET o con cualquier otro compilador, además de que también obtienes otra información del fichero...



 

Introducción:

Pues eso... como te digo en la descripción, en este artículo te muestro cómo averiguar la versión de un ejecutable (o una DLL) usando el método GetVersionInfo de la clase System.Diagnostics.FileVersionInfo.

El código mostrado es válido tanto para ficheros compilados con .NET o con cualquier otro compilador, además de que también obtienes otra información del fichero como es la descripción, el nombre del producto, el copyright, etc.

Aquí tienes el código de Visual Basic (en teoría válido para cualquier versión, pero que solo he probado con Visual Basic 2008, pero también funcionará con Visual Basic 2005), y aquí el código para C#.

En el ZIP tienes el proyecto completo para usar con Visual Studio 2008 o la versión Express correspondiente al lenguaje que prefieras usar (Visual Basic o Visual C#), pero el código (del formulario, etc.) es totalmente válido para usarlo con Visual Studio 2005.

 

La aplicación de ejemplo

Esta aplicación permite indicar el fichero del que quieres averiguar la información, pudiendo seleccionarlo por medio de la clase OpenFileDialog o bien arrastrándolo y soltándolo (drag & drop).

Una vez indicado el fichero, al pulsar en el botón de mostrar, te mostrará la info de ese fichero (si es posible mostrarla, ya que si el fichero no incluye la información adecuada, simplemente no se muestra nada).

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

P.S.
Este código es algo más simple que el que en su día te mostré en: Saber la versión de un ejecutable (o ensamblado)
que también te vale para saber algunos datos del ejecutable actual.

 


Código para Visual Basic.NET (VB.NET) El código para Visual Basic .NET (cualquier versión)
'------------------------------------------------------------------------------
' Averiguar la versión de un fichero (ejecutable o DLL)             (24/Jun/08)
'
' ©Guillermo 'guille' Som, 2008
'------------------------------------------------------------------------------
Option Strict On

Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports System.Diagnostics

Public Class Form1

    Private Sub btnMostrar_Click(ByVal sender As Object, _
                                 ByVal e As EventArgs) _
                                 Handles btnMostrar.Click
        txtInfo.Text = FileVersion(txtFichero.Text)
    End Sub

    Private Sub btnExaminar_Click(ByVal sender As Object, _
                                  ByVal e As EventArgs) _
                                  Handles btnExaminar.Click
        Dim ofD As New OpenFileDialog

        With ofD
            .FileName = txtFichero.Text
            .Filter = "Ejecutables (*.exe; *.dll)|*.exe;*.dll"
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                txtFichero.Text = .FileName
            End If
        End With
    End Sub

    Private Function FileVersion(ByVal elPath As String) As String
        Dim fvi As System.Diagnostics.FileVersionInfo = _
                System.Diagnostics.FileVersionInfo.GetVersionInfo(elPath)
        'Return fvi.FileVersion
        'Return fvi.ProductVersion

        Dim sb As New System.Text.StringBuilder
        sb.AppendLine("ProductName:     " & fvi.ProductName)
        sb.AppendLine("FileDescription: " & fvi.FileDescription)
        sb.AppendLine("FileVersion:     " & fvi.FileVersion)
        sb.AppendLine("ProductVersion:  " & fvi.ProductVersion)
        sb.AppendLine("LegalCopyright:  " & fvi.LegalCopyright)

        Return sb.ToString
    End Function


    Private Sub Form1_Load(ByVal sender As Object, _
                           ByVal e As EventArgs) _
                           Handles MyBase.Load
        Dim ensamblado As System.Reflection.Assembly = _
                System.Reflection.Assembly.GetExecutingAssembly
        txtFichero.Items.Add(ensamblado.Location)

        txtFichero.Items.Add("E:\gsCodigo\Vb5_L\gsCalc\gsCalc.exe")
        txtFichero.Items.Add("C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll")
        txtFichero.Items.Add("C:\Windows\winhlp32.exe")
        txtFichero.Items.Add("C:\Windows\Microsoft.NET\Framework\v3.5\vbc.exe")
        txtFichero.Items.Add("C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe")

        txtFichero.SelectedIndex = 0
    End Sub


    Private Sub Form1_DragEnter(ByVal sender As Object, _
                                ByVal e As DragEventArgs) _
                                Handles MyBase.DragEnter, txtFichero.DragEnter
        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effect = DragDropEffects.Copy
        End If
    End Sub

    Private Sub Form1_DragDrop(ByVal sender As Object, _
                               ByVal e As DragEventArgs) _
                               Handles MyBase.DragDrop, txtFichero.DragDrop
        If e.Data.GetDataPresent("FileDrop") Then
            txtFichero.Text = CType(e.Data.GetData("FileDrop", True), String())(0)
        End If
    End Sub
End Class

 

Código para C Sharp (C#) El código para C# (cualquier versión)
private void btnMostrar_Click(object sender, EventArgs e)
{
    txtInfo.Text = FileVersion(txtFichero.Text);
}

private void btnExaminar_Click(object sender, EventArgs e)
{
    OpenFileDialog ofD = new OpenFileDialog();

    ofD.FileName = txtFichero.Text;
    ofD.Filter = "Ejecutables (*.exe; *.dll)|*.exe;*.dll";
    if(ofD.ShowDialog() == DialogResult.OK)
    {
        txtFichero.Text = ofD.FileName;
    }
}

private string FileVersion(string elPath)
{
    System.Diagnostics.FileVersionInfo fvi = 
        System.Diagnostics.FileVersionInfo.GetVersionInfo(elPath);
    //return fvi.FileVersion;
    //return fvi.ProductVersion;

    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    sb.AppendLine("ProductName:     " + fvi.ProductName);
    sb.AppendLine("FileDescription: " + fvi.FileDescription);
    sb.AppendLine("FileVersion:     " + fvi.FileVersion);
    sb.AppendLine("ProductVersion:  " + fvi.ProductVersion);
    sb.AppendLine("LegalCopyright:  " + fvi.LegalCopyright);

    return sb.ToString();
}


private void Form1_Load(object sender, EventArgs e)
{
    System.Reflection.Assembly ensamblado = 
        System.Reflection.Assembly.GetExecutingAssembly();
    txtFichero.Items.Add(ensamblado.Location);

    txtFichero.Items.Add(@"E:\gsCodigo\Vb5_L\gsCalc\gsCalc.exe");
    txtFichero.Items.Add(@"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll");
    txtFichero.Items.Add(@"C:\Windows\winhlp32.exe");
    txtFichero.Items.Add(@"C:\Windows\Microsoft.NET\Framework\v3.5\vbc.exe");
    txtFichero.Items.Add(@"C:\Windows\Microsoft.NET\Framework\v3.5\csc.exe");

    txtFichero.SelectedIndex = 0;
}


private void Form1_DragEnter(object sender, DragEventArgs e)
{
    if(e.Data.GetDataPresent(DataFormats.FileDrop))
    {
        e.Effect = DragDropEffects.Copy;
    }
}

private void Form1_DragDrop(object sender, DragEventArgs e)
{
    if(e.Data.GetDataPresent("FileDrop"))
    {
        txtFichero.Text = ((String[])e.Data.GetData("FileDrop", true))[0];
    }
}

Espacios de nombres usados en el código de este artículo:

System.Diagnostics
 


Código de ejemplo (comprimido):

Fichero con el código de ejemplo: VersionesDLL.zip 22.8 KB

(MD5 checksum: 53235A4A473387B4B8F6F357B608A680)


 


La fecha/hora en el servidor es: 22/12/2024 17:13:22

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024