2012-02-16 17 views
9

Estoy realmente confundido acerca de los números de versión de msi. Here el número de versión utilizado para ProductVersion en la tabla de propiedades y en la tabla de actualización está restringido para tener partes mayores y menores de 256 o menos. Here el número de versión utilizado en la tabla Archivo puede tener partes mayores y menores de 65536 o menos.números de versión de msi

¿Está equivocado uno de estos? ¿Estas dos "versiones" no están relacionadas o qué?

Además, no entiendo qué significa lo siguiente en la descripción de la tabla de archivos File Table.

"Versión

Este campo es la cadena de versión de un archivo versionado. Este campo está en blanco para ficheros no versionados. La versión del archivo entró en este campo debe ser idéntica a la versión del archivo incluido en el paquete de instalación ".

¿Cómo se determina la "versión del archivo incluido con el paquete de instalación"? ¿Es por ejemplo el valor de FILEVERSION en el recurso VS_VERSION_INFO de Visual Studio? ¿Qué significaría para algún archivo creado con NotePad o Word?

¿Y qué es exactamente un archivo "sin versión"? ¿Uno con FILEVERSION = 0.0.0.0 en el recurso VS_VERSION_INFO? ¿O algo mas? ¿Se consideran versionados todos los archivos .exe?

Respuesta

20

Sí, FileVersions y ProductVersions no están relacionadas. ProductVersion se muestra en Agregar/Quitar programas (Programas y características) y se usa principalmente durante los escenarios de Actualización mayor para decidir qué debe suceder.

Propiedad ProductVersion se define como [0-255]. [0-255]. [0-65535] (8,8,16 bit con signo respectivamente) Versión del archivo se define como [0-65535]. [0 -65535]. [0-65535]. [0-65535] (16,16,16,16 bit con signo ...)

Text/XML/Config/BMP ectera será nulo. Normalmente, su herramienta de creación (como InstallShield) reflejará sus archivos PE versionados (DLL, OCX, SYS, EXE ...) en el momento de la compilación y creará automáticamente sus números de versión en la tabla Archivo.

También hay una opción en InstallShield llamada "Sobrescribir siempre" que "versión miente" a MSI en tiempo de compilación y le dice que su archivo no PE (TXT/XML ....) realmente tiene un número de versión (típicamente 65535.0.0.0) esto explota el comportamiento en MSI que los archivos versionados Trump no versionan archivos cuando deciden sobreescribir o no.

Técnicamente, un EXE no puede ser versionado, pero eso es un antipatrón. Un archivo no versionado es cualquier archivo que no tiene un registro de recursos de versión incrustado.

Otra cosa que debe comprender es que Windows Installer revisa la fecha de creación y la fecha de modificación del archivo de destino al decidir si el archivo src debe sobrescribir el destino. Si CD y MD son iguales, se considera "virgen" (mi término) y se produce la sobrescritura. Si no son iguales, se consideran 'datos de usuario' y no se sobrescribirán a menos que haga el truco Sobreescribir siempre.

Otra cosa que debe comprender es que estas evaluaciones se producen en el nivel de archivo de claves del componente. Cualquier otro archivo complementario en el componente (si no sigue el archivo 1: 1 por pautas de componente) seguirá la dirección del archivo de clave.

También tenga en cuenta que existe una diferencia entre AssemblyVersion y AssemblyFileVersion. Los .El atributo NET AssemblyFileVersion es el que se asigna al atributo heredado FileVersion. El atributo AssemblyVersion solo se usa para propósitos de Denominación fuerte y a MSI no le importa.

Finalmente, google "Reglas de componentes de Windows Installer" para obtener más información.

Háganme saber si tiene sentido y si tiene más preguntas. De hecho, preguntaste acerca de una docena de preguntas en una pregunta, por lo que podría extrañar algo. Además, no dude en aceptar esta respuesta.

+0

Gracias, eso ayuda. ¿Hay alguna instalación en visual studio o addon para automaticamente topar FILEVERSION? ¿PRODUCTVERSION tiene algún significado en VS_VERSION_INFO. ¿Son idénticas las versiones 12.2.16 y 12.02.16? –

+2

Esa es una lata de gusanos completamente diferente que trata sobre la automatización de compilación y la integración continua, que es responsable de construir su aplicación y su instalador de aplicaciones. Querrá que ese proceso actualice los archivos de su aplicación y pase una propiedad de versión de producto a la compilación del instalador. Hay muchos dependiendo de cómo se ve tu entorno de construcción. Personalmente utilizo Team Foundation Server Team Build junto con http://tfsversioning.codeplex.com/. Puede que esté utilizando InstallShield o Wise o VB6, Deplhi, PowerBuilder, C#, Java por lo que sé, así que no hay una respuesta específica. –

+0

¿Realmente MSIEXEC comprueba que la versión en el archivo .exe coincide con eso en la Tabla de archivos? –

Cuestiones relacionadas