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.
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
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