Versión del ejecutable

Post Reply
User avatar
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Versión del ejecutable

Post by quique »

¿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
User avatar
Willi Quintana
Posts: 1030
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Been thanked: 1 time
Contact:

Re: Versión del ejecutable

Post by Willi Quintana »

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
User avatar
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Re: Versión del ejecutable

Post by quique »

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?
User avatar
MarioG
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR
Been thanked: 2 times

Re: Versión del ejecutable

Post by MarioG »

Quique;
Esto compartió, si mal no recuerdo Antonio.

Code: Select all | Expand

// Just for FWH 32 bits// Author: Anonimo#include "FiveWin.ch"//----------------------------------------------------------------------------///*function Main()   local n   for n = 1 to 12       MsgInfo( GetFileVersionInfo( "filever.exe", n ) )   nextreturn 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
User avatar
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Re: Versión del ejecutable

Post by quique »

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

Code: Select all | Expand

1 VERSIONINFOFILEVERSION 2, 4, 0, 1PRODUCTVERSION 4, 2, 0, 0FILEOS VOS__WINDOWS16FILETYPE VFT_DLL{ BLOCK "StringFileInfo" 


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.
Saludos
Quique
User avatar
Antonio Linares
Site Admin
Posts: 42825
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 126 times
Been thanked: 117 times
Contact:

Re: Versión del ejecutable

Post by Antonio Linares »

Quique,

Revisa este código que encontré aqui:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms647003%28v=vs.85%29.aspx

Code: Select all | Expand

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;}
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
FranciscoA
Posts: 2164
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Versión del ejecutable

Post by FranciscoA »

Encontré esto. Talvez si alguien se decide "traducir" y lo prueba.

Code: Select all | Expand

'------------------------------------------------------------------------------' Averiguar la versión de un fichero (ejecutable o DLL)             (24/Jun/08)'' ©Guillermo 'guille' Som, 2008'------------------------------------------------------------------------------Option Strict OnImports Microsoft.VisualBasicImports SystemImports System.Windows.FormsImports System.DiagnosticsPublic 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 SubEnd Class
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
quique
Posts: 408
Joined: Sun Aug 13, 2006 5:38 am
Contact:

Re: Versión del ejecutable

Post by quique »

Antonio. Disculpa mi ignorancia en C pero ¿como lo puedo integrar a FW/harbour?

Francisco. Esperemos que alguien pueda, porque yo no pude :(
Saludos
Quique
User avatar
MarioG
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR
Been thanked: 2 times

Re: Versión del ejecutable

Post by MarioG »

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
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
karinha
Posts: 8055
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 8 times
Contact:

Re: Versión del ejecutable

Post by karinha »

Code: Select all | Expand

1 VERSIONINFO LOADONCALL MOVEABLE DISCARDABLE IMPUREFILEVERSION 1,0,0,0PRODUCTVERSION 1,0,0,0FILEFLAGSMASK 0x0FILEFLAGS 0x0FILEOS VOS__WINDOWS32FILETYPE VFT_APPFILESUBTYPE 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 - Phone: +55(11)95150-7341
Post Reply