2012-02-16 16 views
9

Jestem naprawdę zdezorientowany numerami wersji msi. Here Numer wersji używany dla ProductVersion w tabeli Property oraz w tabeli Update jest ograniczony do głównych i pomniejszych części 256 lub mniejszych. Here Numer wersji używany w tabeli plików może mieć większą lub mniejszą część 65536 lub mniejszą.numery wersji msi

Czy jedno z nich jest złe? Czy te dwie "wersje" są zupełnie niezwiązane lub co?

Co więcej, nie rozumiem, co oznacza poniższe wyrażenie w opisie tabeli plików: File Table.

„Wersja

To pole jest ciąg wersja dla wersjonowanym pliku. To pole jest puste pliki niewyspecjalizowanych wersji. Wersja pliku weszła w tej dziedzinie musi być identyczna z wersją pliku zawarte z pakiet instalacyjny. "

W jaki sposób jest określana "wersja pliku zawarta w pakiecie instalacyjnym"? Czy jest to na przykład wartość FILEVERSION w zasobie VS_VERSION_INFO programu Visual Studio? Co by to oznaczało dla niektórych plików utworzonych za pomocą NotePada lub Worda?

Czym dokładnie jest plik "bez wersji"? Jeden z FILEVERSION = 0.0.0.0 w zasobie VS_VERSION_INFO? Albo coś innego? Czy wszystkie pliki .exe są uważane za wersjonowane?

Odpowiedz

20

Tak, pliki i versions produktów nie są powiązane. ProductVersion jest pokazany w Dodaj/usuń programy (Programy i funkcje) i jest używany głównie podczas scenariuszy modernizacji, aby zdecydować, co powinno się stać.

Własność produktu jest zdefiniowana jako [0-255]. [0-255]. [0-65535] (odpowiednio 8 816 bitów ze znakiem) Wersja pliku jest zdefiniowana jako [0-65535]. [0 -65535]. [0-65535]. [0-65535] (16,16,16,16 podpisany bit ...)

Dane tekstowe/XML/Config/BMP ectera będą puste. Zazwyczaj twoje narzędzie do tworzenia treści (takie jak InstallShield) będzie odzwierciedlało twoje wersjonowane pliki PE (DLL, OCX, SYS, EXE ...) w czasie kompilacji i automatycznie zapisuje ich numery wersji w tabeli plików.

Istnieje również opcja w InstallShield o nazwie "Zawsze zastępuj", że "wersja leży" do MSI w czasie kompilacji i mówi jej, że twój plik inny niż PE (TXT/XML ....) naprawdę ma numer wersji (zazwyczaj 65535.0.0.0) wykorzystuje to zachowanie w MSI, które pliki o zmienionej wersji Trump nie-wersja, decydując się na nadpisanie lub nie.

Tecnically EXE może być bez wersji, ale jest to anty-wzór. Plik bez wersji to dowolny plik, który nie ma rekordu zasobu wersji osadzonej.

Inna rzecz, o której należy pamiętać to, że domyślnie Instalator Windows analizuje datę utworzenia i datę modyfikacji pliku docelowego, decydując, czy plik src powinien nadpisać cel. Jeśli CD i MD są równe, to jest uważane za "dziewicze" (moje hasło) i występuje nadpisanie. Jeśli nie są równe, są traktowane jako "dane użytkownika" i nie są zastępowane, chyba że wykonasz sztuczkę Zawsze Zastępuj.

Inną rzeczą do zrozumienia jest to, że te oceny występują na poziomie pliku klucza komponentu. Wszelkie inne pliki towarzyszące w komponencie (jeśli nie są zgodne z plikiem 1: 1 na wytyczne dotyczące komponentów) będą następowały po przejściu pliku klucza.

Zdaj sobie również sprawę, że istnieje różnica między wartością AssemblyVersion i AssemblyFileVersion. The.Atrybut NET AssemblyFileVersion jest zgodny z atrybutem FileVersion. Atrybut AssemblyVersion jest używany tylko w celu silnego nazewnictwa i MSI nie dba o to.

Wreszcie, google "Reguły składnika Windows Installer", aby uzyskać więcej informacji.

Proszę dać mi znać, jeśli to ma sens i jeśli masz dodatkowe pytania. Pytałeś o kilkanaście pytań w jednym pytaniu, więc mógłbym coś pominąć. Proszę również zaakceptować tę odpowiedź.

+0

Dzięki, to pomaga. Czy jest jakiś obiekt w visual studio lub dodatek do automagicznie uderzać FILEVERSION? Czy PRODUCTVERSION ma jakieś znaczenie w VS_VERSION_INFO. Czy wersje 12.2.16 i 12.02.16 są identyczne? –

+2

To zupełnie inna puszka robaków zajmujących się automatyką budowania i ciągłą integracją odpowiedzialną za budowanie aplikacji i instalatora aplikacji. Będziesz chciał, aby ten proces wersjonował twoje pliki aplikacji i przekazywał właściwość wersji produktu do kompilacji instalatora. Wiele zależy od tego, jak wygląda twoje środowisko kompilacji. Osobiście używam Team Team Server Team Build wraz z http://tfsversioning.codeplex.com/ Możesz używać InstallShield lub Wise lub VB6, Deplhi, PowerBuilder, C#, Java dla wszystkich, których znam, więc nie ma konkretnej odpowiedzi. –

+0

Czy program MSIEXEC faktycznie sprawdza, czy wersja w pliku .exe jest zgodna z wersją w tabeli plików? –

Powiązane problemy