Versión del ejecutable
Versión del ejecutable
¿Como puedo obtener el número de versión del ejecutable que se le asigna en el RC y se muestra en las propiedades del archivo con click derecho del mouse?
Saludos
Quique
Quique
- Willi Quintana
- Posts: 859
- Joined: Sun Oct 09, 2005 10:41 pm
- Location: Cusco - Perú
- Contact:
Re: Versión del ejecutable
Hola,
En tu archivo de recursos, opción "New" hay una opción para crear la instancia "Versión", allí le asignas los datos que necesites....
Salu2
En tu archivo de recursos, opción "New" hay una opción para crear la instancia "Versión", allí le asignas los datos que necesites....
Salu2
Re: Versión del ejecutable
Gracias Willi por responder, pero lo que necesito es obtener esa información desde el ejecutable, o sea, en el editor de recursos le pongo versión 1.0.0.2 ¿como obtengo ese dato dentro del ejecutable?
Re: Versión del ejecutable
Quique;
Esto compartió, si mal no recuerdo Antonio.
Esto compartió, si mal no recuerdo Antonio.
Code: Select all
// Just for FWH 32 bits
// Author: Anonimo
#include "FiveWin.ch"
//----------------------------------------------------------------------------//
/*
function Main()
local n
for n = 1 to 12
MsgInfo( GetFileVersionInfo( "filever.exe", n ) )
next
return nil
*/
//----------------------------------------------------------------------------//
#pragma BEGINDUMP
#include <windows.h>
#include <hbapi.h>
HB_FUNC( GETFILEVERSIONINFO )
{
char * szFile = hb_parc( 1 );
UINT uAction = ISNUM( 2 ) ? hb_parni( 2 ) : 1;
DWORD dwHandle = 0;
DWORD dwSize = GetFileVersionInfoSize( szFile, &dwHandle );
char * szOut = NULL;
BOOL bOk = FALSE;
if( dwSize )
{
char * szBlock = ( char * ) hb_xgrab( 255 );
char * szSubBlock = ( char * ) hb_xgrab( 255 );
HGLOBAL hMem = GlobalAlloc( GMEM_MOVEABLE, dwSize );
VS_FIXEDFILEINFO * vsInfo;
UINT nLen = 0;
if( hMem )
{
LPVOID pMem = GlobalLock( hMem );
if( pMem && GetFileVersionInfo( szFile, dwHandle, dwSize, pMem ) )
{
if( VerQueryValue( pMem, "\\VarFileInfo\\Translation", ( LPVOID * ) &vsInfo, &nLen ) )
{
*( LPDWORD ) vsInfo = MAKELONG( HIWORD( *( LPDWORD ) vsInfo ), LOWORD( *( LPDWORD ) vsInfo ) );
sprintf( szBlock, "\\StringFileInfo\\%08lx\\", *( LPDWORD )( vsInfo ) );
switch( uAction )
{
case 1:
sprintf( szSubBlock, "%s%s", szBlock, "Author" );
break;
case 2:
sprintf( szSubBlock, "%s%s", szBlock, "CompanyName" );
break;
case 3:
sprintf( szSubBlock, "%s%s", szBlock, "FileDescription" );
break;
case 4:
sprintf( szSubBlock, "%s%s", szBlock, "FileVersion" );
break;
case 5:
sprintf( szSubBlock, "%s%s", szBlock, "InternalName" );
break;
case 6:
sprintf( szSubBlock, "%s%s", szBlock, "LegalCopyright" );
break;
case 7:
sprintf( szSubBlock, "%s%s", szBlock, "LegalTrademarks" );
break;
case 8:
sprintf( szSubBlock, "%s%s", szBlock, "OriginalFilename" );
break;
case 9:
sprintf( szSubBlock, "%s%s", szBlock, "PrivateBuild" );
break;
case 10:
sprintf( szSubBlock, "%s%s", szBlock, "ProductName" );
break;
case 11:
sprintf( szSubBlock, "%s%s", szBlock, "ProductVersion" );
break;
case 12:
sprintf( szSubBlock, "%s%s", szBlock, "AppBuild" );
break;
}
if( VerQueryValue( pMem, szSubBlock, ( LPVOID * ) &szOut, &nLen ) )
bOk = TRUE;
hb_xfree( szBlock );
hb_xfree( szSubBlock );
}
GlobalUnlock( hMem );
GlobalFree( hMem );
}
}
}
if( bOk )
hb_retc( szOut );
else
hb_retc( "" );
}
#pragma ENDDUMP
//----------------------------------------------------------------------------//
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: Versión del ejecutable
Gracias Mario, pero no funciona, de hecho ya la había visto pero volví a probar con lo que pusiste por si había cambios, de hecho tuve que modificar ISNUM por HB_ISNUM y me marcó dos warnings pero eso no lo toque.
En mi RC tengo
y al dar las propiedades del archivo me dice
Versión del archivo 2.4.0.1
Pero este número no aparece en ningún mensaje, ni siqueira separado como para decir hay que juntarlos, y de hecho, intenté cambiando el for de 0 a 20 por si acaso, pero nada.
En mi RC tengo
Code: Select all
1 VERSIONINFO
FILEVERSION 2, 4, 0, 1
PRODUCTVERSION 4, 2, 0, 0
FILEOS VOS__WINDOWS16
FILETYPE VFT_DLL
{
BLOCK "StringFileInfo"
Versión del archivo 2.4.0.1
Pero este número no aparece en ningún mensaje, ni siqueira separado como para decir hay que juntarlos, y de hecho, intenté cambiando el for de 0 a 20 por si acaso, pero nada.
Saludos
Quique
Quique
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: Versión del ejecutable
Quique,
Revisa este código que encontré aqui:
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
Revisa este código que encontré aqui:
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
Code: Select all
BOOL GetAppVersion( char *LibName, WORD *MajorVersion, WORD *MinorVersion, WORD *BuildNumber, WORD *RevisionNumber )
{
DWORD dwHandle, dwLen;
UINT BufLen;
LPTSTR lpData;
VS_FIXEDFILEINFO *pFileInfo;
dwLen = GetFileVersionInfoSize( LibName, &dwHandle );
if (!dwLen)
return FALSE;
lpData = (LPTSTR) malloc (dwLen);
if (!lpData)
return FALSE;
if( !GetFileVersionInfo( LibName, dwHandle, dwLen, lpData ) )
{
free (lpData);
return FALSE;
}
if( VerQueryValue( lpData, "\\", (LPVOID *) &pFileInfo, (PUINT)&BufLen ) )
{
*MajorVersion = HIWORD(pFileInfo->dwFileVersionMS);
*MinorVersion = LOWORD(pFileInfo->dwFileVersionMS);
*BuildNumber = HIWORD(pFileInfo->dwFileVersionLS);
*RevisionNumber = LOWORD(pFileInfo->dwFileVersionLS);
free (lpData);
return TRUE;
}
free (lpData);
return FALSE;
}
- FranciscoA
- Posts: 1964
- Joined: Fri Jul 18, 2008 1:24 am
- Location: Chinandega, Nicaragua, C.A.
Re: Versión del ejecutable
Encontré esto. Talvez si alguien se decide "traducir" y lo prueba.
Code: Select all
'------------------------------------------------------------------------------
' 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
Francisco J. Alegría P.
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Chinandega, Nicaragua.
Fwxh1204-MySql-TMySql
Re: Versión del ejecutable
Antonio. Disculpa mi ignorancia en C pero ¿como lo puedo integrar a FW/harbour?
Francisco. Esperemos que alguien pueda, porque yo no pude
Francisco. Esperemos que alguien pueda, porque yo no pude
Saludos
Quique
Quique
Re: Versión del ejecutable
Quique;
Se me pasó comentarte que la función la uso con xHarbour Harbour Compiler build 1.2.1 (SimpLex) (Rev. 9421) y FWH 12.04
Ahora bien lo acabo de compilar (sin tocar nada porque de C desconozco) con Harbour 3.2.0dev (r1406161338) y FWH 12.04
y solo me sale el siguiente warning:
--------------------Configuración: pru32 - Debug--------------------
Harbour 3.2.0dev (r1406161338)
Copyright (c) 1999-2014, http://harbour-project.org/
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
FileVer.c:
Warning W8075 d:\\MIHARB~1\\TEmege\\Sources\\FileVer.prg 27: Suspicious pointer conversion in function HB_FUN_GETFILEVERSIONINFO
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
filever.exe - 0 error(es), 1 advertencia(s)
Por lo que me muestra versión y demás
Quizás si uds. saben me puedan indicar como evitar este warning
Haciendo boton derecho sobre el icono del ejecutable e ingresando en Detalle (W7) obviamente tambien se lee los datos enviados
Se me pasó comentarte que la función la uso con xHarbour Harbour Compiler build 1.2.1 (SimpLex) (Rev. 9421) y FWH 12.04
Ahora bien lo acabo de compilar (sin tocar nada porque de C desconozco) con Harbour 3.2.0dev (r1406161338) y FWH 12.04
y solo me sale el siguiente warning:
--------------------Configuración: pru32 - Debug--------------------
Harbour 3.2.0dev (r1406161338)
Copyright (c) 1999-2014, http://harbour-project.org/
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
FileVer.c:
Warning W8075 d:\\MIHARB~1\\TEmege\\Sources\\FileVer.prg 27: Suspicious pointer conversion in function HB_FUN_GETFILEVERSIONINFO
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
filever.exe - 0 error(es), 1 advertencia(s)
Por lo que me muestra versión y demás
Quizás si uds. saben me puedan indicar como evitar este warning
Haciendo boton derecho sobre el icono del ejecutable e ingresando en Detalle (W7) obviamente tambien se lee los datos enviados
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
Chaco - Argentina
Re: Versión del ejecutable
Code: Select all
1 VERSIONINFO LOADONCALL MOVEABLE DISCARDABLE IMPURE
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK 0x0
FILEFLAGS 0x0
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
{
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "Comments", "Sistema Desenvolvido Pela Empresa TAL - http://www.empresatal.com.br \0"
VALUE "CompanyName", "Sistema Desenvolvido Pela Empresa TAL - http://www.empresatal.com.br \0"
VALUE "FileDescription", "NOMBRE DEL SISTEMA\0"
VALUE "FileVersion", "1.0000\0"
VALUE "InternalName", "Proyecto TAL\0"
VALUE "LegalCopyright", "Empresa Informática Ltda\0"
VALUE "LegalTrademarks", "NOMBRE SISTEMA / SISTEMA\0"
VALUE "OriginalFilename", "NOMBRE_EXE.EXE\0"
VALUE "ProductName", "NOMBRE DEL SISTEMA\0"
VALUE "ProductVersion", "1.0000\0"
}
}
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x416, 0x4B0
}
}
João Santos - São Paulo - Brasil