Tenemos un sistema que se compone de numerosas aplicaciones. Todas las aplicaciones tienen su versión cambia al mismo tiempo. En la actualidad, cuando salga una nueva versión, tenemos que abrir manualmente las opciones de proyecto de cada aplicación y cambiar la versión de uno en uno. ¿Hay alguna manera de compilar todas las aplicaciones en la misma versión, por ejemplo, guardar en un archivo global y en la compilación, leer este archivo y asignar esa versión para el proyecto? Sólo estoy tratando de eliminar demasiados pasos, porque tenemos pensado en cambiar los números de versión con más frecuencia. Me gustaría cambiar en un sólo lugar. Se puede hacer esto? y cómo?

La versión del producto?
Yo uso un hogar crecido herramienta para crear una .archivo rc para cada aplicación y, a continuación, compile los recursos como parte de mi script de compilación. En otras palabras, no dependen de ninguna de las construidas en las instalaciones.
Tanto la Versión del Producto y la Versión del Archivo.
Si utiliza una construcción de una aplicación, como FinalBuilder, puede automatizar el proceso con bastante facilidad. Yo uso un comentado par nombre/valor en la parte superior de cada formulario principal de la aplicación, tales como { versión de compilación=3.0.1 }, entonces Finalbuilder lee el nombre de valor, incrementos, y los guarda, mientras que la creación de mi implementación de construir.

OriginalEl autor Jerry Dodge | 2012-08-02

3 Comentarios

  1. 24

    Puede crear un VERSIONINFO de recursos, en un archivo de texto plano (por ejemplo., Versioninfo.rc)

    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
        BLOCK "040904E4"
        {
            VALUE "CompanyName", "Your Company Name Here
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "FileDescription", "Your File Description Here
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "FileVersion", "2.0.0.0
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "InternalName", "Your Internal Name
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "LegalCopyright", "© Your Copyright Notice
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "LegalTrademarks", "Your Trademark Notice
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "OriginalFilename", "YourExeName
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "ProductName", "Your Product Name
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "ProductVersion", "2.0.0.0
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    VALUE "Comments", "No Comments
    1 VERSIONINFO
    FILEVERSION 2,0,0,0
    PRODUCTVERSION 2,0,0,0
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4"
    {
    VALUE "CompanyName", "Your Company Name Here\0"
    VALUE "FileDescription", "Your File Description Here\0"
    VALUE "FileVersion", "2.0.0.0\0"
    VALUE "InternalName", "Your Internal Name\0"
    VALUE "LegalCopyright", "© Your Copyright Notice\0"
    VALUE "LegalTrademarks", "Your Trademark Notice\0"
    VALUE "OriginalFilename", "YourExeName\0"
    VALUE "ProductName", "Your Product Name\0"
    VALUE "ProductVersion", "2.0.0.0\0"
    VALUE "Comments", "No Comments\0"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    "
    } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0409 0x04E4 } }

    Nota: El C-estilo null terminadores (\0) son necesarios al final de cada elemento, como se muestra en la orden para que el compilador de recursos para terminar correctamente las cuerdas. De lo contrario, cuando se utilice el Explorador para mostrar la información sobre la versión del ejecutable que puede quedar distorsionada o parcialmente valores concatenados.

    Añadir una línea a su archivo de origen proyecto:

    {$R VersionInfo.res VersionInfo.rc}

    Sugiero poner la versión común info recurso en un externals de referencia en el sistema de control de versiones, y entonces usted puede comprobar a cabo en cada carpeta del proyecto y actualizar fácilmente.

    Hacer un Proyecto->Construir, y su versión info está incrustado en el .exe. Puede comprobar mediante el Explorador de Windows y la visualización de las propiedades de la aplicación.

    Hay un par de puestos (uno por mí y uno en una respuesta por Jim Fleming) en el Embarcadero Delphi foros en CodeNewsFast archivos. El mío es [aquí], donde describo paso a paso de cómo usar un pre-evento de compilación del proyecto para actualizar el número de versión en la secuencia de comandos de recursos que he publicado anteriormente.

    Jim puestos un par de respuestas, pero alrededor de una docena de puestos de trabajo o para abajo no hay fuente para un archivo ejecutable que puede ser llamado desde el pre-evento de generación que trabaja para él. (Hay algunas cosas que haría de manera diferente, como dejar el IDE de pasar el nombre del proyecto y ubicación en la línea de comandos; de cómo hacerlo se describe en el paso-por-paso de artículo. También me gustaría manejar la versión de análisis e incrementando de manera diferente, pero la aplicación básica es un buen punto de partida.)

    Embarcadero grupos están actualmente hacia abajo, pero yo era capaz de recuperar Jim código de CodeNewsFast así, y puede reproducir aquí:

    Ken,

    Gracias a ti, yo tengo que trabajar.

    Sólo en caso de que alguien más quiere implementar esta solución, a Continuación encontrará los pasos necesarios y el programa auxiliar.

    Jim Fleming

    A) Crear su Información de Versión de archivo de recursos en el directorio de proyecto o donde sea, con el siguiente

    contenido, y de la extensión de archivo .rc:

    //Note the 
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0 !!!! Here and elsewhere below !!!!
    //C string terminator !!! #define CONST_VERSION "4.1.1.1003
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    1 VERSIONINFO FILEVERSION 1,0,0,1 PRODUCTVERSION 1,0,0,1 FILEOS 0x4 FILETYPE 0x1 { BLOCK "StringFileInfo" { BLOCK "040904E4" //Will need changing if your language is not English and char-set not 1252 (multilingual). { VALUE "CompanyName", "Whatever
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    VALUE "FileDescription", "Whatever
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    VALUE "FileVersion", CONST_VERSION VALUE "InternalName", "My Internal Name
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    VALUE "LegalCopyright", "Copyright © whoever
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    VALUE "LegalTrademarks", "
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    VALUE "OriginalFileName", "If you wish
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    VALUE "ProductName", "What pleases you
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    VALUE "ProductVersion", CONST_VERSION VALUE "Comments", "Anything you wish to add
    //Note the \000 !!!! Here and elsewhere below !!!! 
    //C string terminator !!!
    #define CONST_VERSION "4.1.1.1003\000" 
    1 VERSIONINFO
    FILEVERSION 1,0,0,1
    PRODUCTVERSION 1,0,0,1
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
    BLOCK "040904E4" //Will need changing if your language is not English and char-set not
    1252 (multilingual).
    {
    VALUE "CompanyName", "Whatever\000"
    VALUE "FileDescription", "Whatever\000"
    VALUE "FileVersion", CONST_VERSION
    VALUE "InternalName", "My Internal Name\000"
    VALUE "LegalCopyright", "Copyright © whoever\000"
    VALUE "LegalTrademarks", "\000"
    VALUE "OriginalFileName", "If you wish\000"
    VALUE "ProductName", "What pleases you\000"
    VALUE "ProductVersion", CONST_VERSION
    VALUE "Comments", "Anything you wish to add\000"
    }
    }
    BLOCK "VarFileInfo"
    {
    VALUE "Translation", 0x0409 0x04E4
    }
    }
    0"
    } } BLOCK "VarFileInfo" { VALUE "Translation", 0x0409 0x04E4 } }

    B) Crear un nuevo proyecto en alguna carpeta, código de los módulos de solo debe ser similar a:

    unit FormIncrementBuildNumber;
    interface
    uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
    System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
    Vcl.StdCtrls, System.IOUtils, System.StrUtils;
    type
    TIncrementBuildNumber = class(TForm)
    IncrementingBuildNumberLabel: TLabel;
    procedure FormShow (Sender: TObject);
    procedure FormActivate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    end;
    var
    IncrementBuildNumber: TIncrementBuildNumber;
    implementation
    {$R *.dfm}
    procedure TIncrementBuildNumber.FormShow (Sender: TObject);
    var
    Resource_File_Contents:       TStringList;
    Full_File_Name_And_Path:      string;
    First_Line_Of_File:           string;
    Position_First_Dot:           Integer;
    Position_Second_Dot:          Integer;
    Position_Third_Dot:           Integer;
    Position_Trailing_Backslash:  Integer;
    Start_of_Build_Number:        Integer;
    Length_of_Build_Number:       Integer;
    Build_Number_In_ASCII:        string;
    Build_Number_Numeric:         Integer;
    Old_Resource_File_Name:       string;
    Success:      Boolean;
    begin
    if (System.ParamCount <> 1) then
    begin
    ShowMessage ('Resource File name not in first command-line parameter.');
    Exit;
    end;
    Full_File_Name_And_Path := System.ParamStr(1);
    if (not TFile.Exists(Full_File_Name_And_Path, False)) then
    begin
    ShowMessage ('Resource file ' + Full_File_Name_And_Path + 
    ' not found.');
    Exit;
    end;
    Resource_File_Contents := TStringList.Create;
    try
    Resource_File_Contents.LoadFromFile(Full_File_Name_And_Path);
    First_Line_Of_File := Resource_File_Contents.Strings[0];
    if (Copy(First_Line_Of_File, 1, 21) <> '#define CONST_VERSION') then
    begin
    ShowMessage ('First line of Version Info must start with "#define CONST_VERSION".' + 
    #13 + 'Version not incremented.');
    Exit;
    end;
    Position_First_Dot := Pos('.', First_Line_Of_File);
    if (Position_First_Dot = 0) then
    begin
    ShowMessage ('Version must have format "a.b.c.d".' + #13 + 
    'Build Number not incremented.');
    Exit;
    end;
    Position_Second_Dot := PosEx('.', First_Line_Of_File, 
    Position_First_Dot+1);
    if (Position_Second_Dot = 0) then
    begin
    ShowMessage ('Version must have format "a.b.c.d".' + #13 + 
    'Build Number not incremented.');
    Exit;
    end;
    Position_Third_Dot := PosEx('.', First_Line_Of_File, 
    Position_Second_Dot+1);
    if (Position_Third_Dot = 0) then
    begin
    ShowMessage ('Version must have format "a.b.c.d".' + #13 + 
    'Build Number not incremented.');
    Exit;
    end;
    Position_Trailing_Backslash := PosEx('\', First_Line_Of_File, 
    Position_Third_Dot+1);
    if (Position_Trailing_Backslash = 0) then
    begin
    ShowMessage ('Version must have format "a.b.c.d\000".' + #13 + 
    'Build Number not incremented.');
    Exit;
    end;
    Start_of_Build_Number  := Position_Third_Dot + 1;
    Length_of_Build_Number := Position_Trailing_Backslash - 
    Start_of_Build_Number;
    if (Length_of_Build_Number < 1) then
    begin
    ShowMessage ('Build Number must be present.' + #13 + 
    'Build Number not incremented.');
    Exit;
    end;
    Build_Number_In_ASCII := Copy (First_Line_Of_File, 
    Start_of_Build_Number, 
    Length_of_Build_Number);
    Success := TryStrToInt (Build_Number_In_ASCII, Build_Number_Numeric);
    if (not Success) then
    begin
    ShowMessage ('Build Number must be numeric integer.' + #13 + 
    'Build Number not incremented.');
    Exit;
    end;
    Build_Number_Numeric := Build_Number_Numeric + 1;
    Build_Number_In_ASCII := IntToStr(Build_Number_Numeric);
    Resource_File_Contents.Strings[0] := Copy(First_Line_Of_File, 1, 
    Position_Third_Dot) +
    Build_Number_In_ASCII + 
    '\000"';
    Old_Resource_File_Name := Full_File_Name_And_Path;
    Old_Resource_File_Name := TPath.ChangeExtension(Old_Resource_File_Name, '~rc');
    if TFile.Exists(Old_Resource_File_Name, False) then
    TFile.Delete(Old_Resource_File_Name);
    Success := RenameFile(Full_File_Name_And_Path, Old_Resource_File_Name);
    if (not Success) then
    begin
    ShowMessage ('Error renaming old resource file to have extension "~rc".' + #13 + 
    'Build Number not incremented.');
    Exit;
    end;
    Resource_File_Contents.SaveToFile(Full_File_Name_And_Path);
    finally
    Resource_File_Contents.Free;
    end;
    end;
    procedure TIncrementBuildNumber.FormActivate (Sender: TObject);
    begin
    Close;
    end;
    end.

    C) En las Opciones de Proyecto del proyecto cuyo número de compilación debe ser incrementado:

    • Quitar la garrapata «incluir la información de la versión».

    • Agregar un evento pre-build con el siguiente texto, tal como está escrito, incluyendo los dos pares de comillas dobles, la sustitución de las piezas dentro de < >:

    «<nombre completo del archivo y la ruta de acceso de la auto-increment programa exe>» «<nombre completo del archivo y la ruta de los .rc archivo de recursos>»

    D) Añadir a la fuente del proyecto, a la derecha debajo de «el programa» palabra clave:

    {$R '<whatever you called it>.res' '<whatever you called it>.rc'} //I think both names must

    ser el mismo aquí: si mal no recuerdo, tengo errores cuando eran diferentes.

    E) Compilar, ejecutar y disfrutar de la devolución de Auto-Incremento de la generación de números, a pesar de Embarcadero de haber quitado la instalación.

    Final de Jim contenido

    Podría utilizar el pre-evento de generación, por ejemplo, la actualización de la ProductName o FileDescription valores, o cualesquiera otros que tienen que ser diferentes de la base de la secuencia de comandos.

    Muy prometedora solución, intentará cuando estoy de vuelta en mi IDE.
    Supongo que a usted le tiene que incluir las variaciones de la ProductName.
    Verdadero. Hay una completa fuente de una aplicación en la EMBT los foros de Delphi (no se puede encontrar el enlace, y por supuesto, la búsqueda no trabajo allí – añade que si me parece) para su uso en un evento pre-build que se ocuparía de la parte. Me respondió bastante mucho la misma pregunta, con una descripción paso a paso, y la persona que hizo fue lo suficientemente amable como para publicar el código de la aplicación que escribió en sus «gracias» respuesta para que otros la utilicen.
    Jerry. Esta es la solución correcta.
    Seguro. Yo era capaz de recuperar los mensajes originales de CodeNewsFast; he incorporado tanto la mayoría de los contenidos, y proporcionó nuevos enlaces para que los archivos de las versiones.

    OriginalEl autor Ken White

  2. 15

    ACTUALIZACIÓN: no es parte de RADStudio sí mismo, sino que viene de Andreas Hausladen del DDevExtensions (que estoy tan acostumbrado a tener…!).

    Usted puede hacer dentro del IDE con un ProjectGroup siempre y cuando haya instalado el excelente DDevExtensions de Andreas Hausladen.

    • Tiene un Grupo de Proyecto para contener todos sus proyectos
    • Asegúrese de que cada uno de sus proyectos ha «Incluir la información de versión en el proyecto» marcada en el Options|Version Info page.
    • Utilice el menú Project|Set Versioninfo... para abrir el Proyecto Versioninfo de diálogo (sólo una vez, el proyecto actual no importa).
    • Allí, usted puede especificar toda la información de la versión y elegir el que «Aplicar a todo» o simplemente a los proyectos seleccionados si seleccionó la opción «Aplicar a los Seleccionados».

    Por ejemplo, ver cómo puedo configurar la versión para ambos proyectos a la vez:
    Cómo definir la versión de la aplicación en un solo lugar para múltiples aplicaciones?

    A continuación, un Build All en el ProjectGroup producido dos exes con la version establecido en 1.1.1.9 y todos los demás detalles…

    Esto es incluso una mejor solución, siendo incorporado a RAD Studio
    Tenemos alrededor de 40 aplicaciones en producción actualmente. Su sugerencia es poner a todos en un solo grupo de proyecto sólo para el propósito de no tener que retirar un recurso de versión de archivo de secuencia de comandos de su VCS? (No downvoting; preguntando.)
    Esto está muy bien si se construye desde el IDE. Para la mayoría de los proyectos por lo general es mejor guión en el proceso de generación.
    Ciertamente no estoy sugiriendo poner de 40 archivos con la misma información de la versión para empezar o para ser administrada desde un Proyecto gigantesco Grupo, pero para el proyecto que usted tiene un uso válido de un Grupo de Proyecto, a continuación, puede aprovechar la gestión de la información de la versión del mismo centro lugar así. La VCS se va a almacenar los cambios realizados a los proyectos, así como cualquier otro cambio.
    y la acumulación puede ser manejado de otra manera/más tarde/asincrónica/automáticamente a partir de lo que se guardó en la VCS. El punto principal es que usted puede gestión la información de la versión del IDE. A continuación, crear con lo que ahora es parte de su proyecto: nuevo código, nuevas unidades, nuevos recursos…

    OriginalEl autor François

Dejar respuesta

Please enter your comment!
Please enter your name here