5

En Delphi XE2 la genera automáticamente números de compilación funcionalidad ahora utiliza algún tipo de fecha y valores de tiempo generada, así:¿Los nuevos números de compilación autogenerados Delphi XE2 están vinculados a 1.1.2000 00:00:00?

2.4.4386.838

Los dos últimos números cambian cada vez que se construye y se basan en el fecha y hora actual:

Major = 2 (user defined) 
Minor = 4 (user defined) 
Release = 4386 (number of days since Jan 1 2000) 
Build = 838 (number of seconds since 00:00:00) 

supongo que este nuevo formato para la liberación y de compilación fue tomado de la aplicación .NET, que hace algo muy similar. En .net, el último número (compilación) es igual al número de segundos desde la medianoche hora local, dividido por 2. Consulte este enlace para obtener detalles sobre la implementación de .NET: Determining Build Date the hard way

Si se puede confiar en que esto permanecerá así así, entonces ahora tenemos una mejor manera de determinar el tiempo de compilación en lugar de

  1. el uso de plugins IDE

  2. Usando encabezados PE Hacks

Las preguntas no son cómo volver a la funcionalidad de números de versión de autoincrement antiguos.

Las preguntas es ¿utiliza realmente XE2 la fecha y la hora como mostré anteriormente, a partir del 1 de enero de 2010 y agregando días y segundos en los números de compilación y publicación?

+0

La respuesta que está buscando se puede encontrar en la respuesta de TOndrej aquí: http://stackoverflow.com/questions/8437300/how-can -i-automate-getting-the-date-of-build-into-a-constant-visible-to-my-code –

+0

@David la cuestión más importante es cómo hacerlo usted mismo. Mi pregunta es si Delphi XE2 ahora está haciendo esto por nosotros y deberíamos deshacernos de las sugerencias que se mencionan exactamente en la pregunta que usted indicó. Creo que mis preguntas son un poco diferentes. –

+1

Supongo que no entendí el objetivo principal de su pregunta. ¿Crees que respaldarlo con la versión de recursos es más fácil? ¿No puede ver ninguna documentación que indique cómo se configuran la compilación y la versión?¿Has discernido esto mediante la observación, presumiblemente? ¿Sabes qué zona horaria se usa? ¿UTC? ¿Hora local? –

Respuesta

7

La codificación no puede ser lo que usted cree que es. El lanzamiento y los números se embalan en un solo 32 bit DWORD. Eso significa que solo hay 16 bits disponibles para todos los segundos del día. Hay 86400 segundos en un día que es mayor que 2 .

Parece curioso que la implementación de Delphi parece abarcar cuando llega a 2 segundos, ~ 18.2 horas. Por el momento, son las 22:50 en mi zona horaria (UTC), pero el número de versión generado automáticamente es 16753, o alrededor de 4.6 horas. Vuelva a agregar las 18.2 horas que faltan de la envoltura y el bingo, son las 22:50.

Parece que la gente de Visual Studio lo hizo bien, porque tomaron el número de segundos después de las 00:00 y se dividieron por 2. También aparecería que los números de liberación generados automáticamente de Delphi no serán monótonos aumentando con el tiempo , no será único y así sucesivamente.

Esto me parece ser un error que he presentado como QC#102343. Tenga en cuenta que el error se introdujo en XE2 actualización 3. No estaba presente en versiones anteriores. Tenga en cuenta también que el manejo del número de versión ha cambiado desde la actualización 2 a la actualización 3.

+0

Debe ser (número de segundos desde la medianoche) div 2. Eso hace que el máximo 43200, que cabe en 16 bits. Si está envolviendo, sin duda es un error. –

+0

@ Allen hmm, mi prueba rápida parecía que estaba envolviendo como puede ver. ¿Debo presentar un control de calidad o puedo tomarlo desde aquí? –

+0

Lo mejor es que lo envíe ... luego obtiene el crédito y puede rastrearlo. –

Cuestiones relacionadas