2012-02-16 74 views
9

Tôi thực sự bối rối về số phiên bản msi. Here Số phiên bản được sử dụng cho ProductVersion trong bảng Thuộc tính và trong bảng Cập nhật bị hạn chế để có các bộ phận chính và nhỏ hơn 256 hoặc ít hơn. Here Số phiên bản như được sử dụng trong bảng Tệp có thể có các phần chính và phụ nhỏ từ 65536 trở xuống.số phiên bản msi

Có một trong số này sai không? Hai "phiên bản" này có hoàn toàn không liên quan hay không?

Ngoài ra, tôi không hiểu những gì sau đây được tìm thấy trong mô tả của bảng Tệp File Table có nghĩa là.

"Version

lĩnh vực này là chuỗi phiên bản cho một tập tin phiên bản. Trường này là trống cho các tập tin không phiên bản. Phiên bản tập tin nhập vào lĩnh vực này phải giống với phiên bản của tập tin bao gồm trong gói cài đặt. "

Phiên bản "của tệp được bao gồm trong gói cài đặt" được xác định? Có phải ví dụ giá trị của FILEVERSION trong tài nguyên VS_VERSION_INFO của Visual Studio không? Điều gì sẽ có nghĩa là đối với một số tệp được tạo bằng NotePad hoặc Word?

Và chính xác thì tệp "không được phiên bản" là gì? Một tệp có FILEVERSION = 0.0.0.0 trong tài nguyên VS_VERSION_INFO? Hay cái gì khác? Tất cả các tệp .exe được xem là đã được phiên bản chưa?

Trả lời

20

Có, FileVersions và ProductVersions không có liên quan. ProductVersion được hiển thị trong Add/Remove Programs (Programs and Features) và được sử dụng chủ yếu trong các kịch bản nâng cấp chính để quyết định điều gì sẽ xảy ra.

Thuộc tính ProductVersion được định nghĩa là [0-255]. [0-255]. [0-65535] (8,8,16 bit đã ký tương ứng) Phiên bản tệp được định nghĩa là [0-65535]. [0 -65535]. [0-65535]. [0-65535] (16,16,16,16 chữ ký bit ...)

Văn bản/XML/Config/BMP ectera sẽ rỗng. Thông thường công cụ soạn thảo của bạn (như InstallShield) sẽ phản ánh các tệp PE được phiên bản của bạn (DLL, OCX, SYS, EXE ...) tại thời gian xây dựng và tự động viết số phiên bản của chúng vào bảng Tệp.

Ngoài ra còn có một tùy chọn trong InstallShield gọi là "Luôn ghi đè" phiên bản "nằm" cho MSI tại thời điểm xây dựng và cho biết rằng tệp không phải PE của bạn (TXT/XML ....) thực sự có số phiên bản (thường là 65535.0.0.0) điều này khai thác các hành vi trong MSI mà tập tin Phiên bản Trump Non-Versioned tập tin khi quyết định ghi đè hay không.

Về mặt kỹ thuật, EXE có thể không được phiên bản nhưng đó là một mẫu chống. Tệp không được phiên bản là bất kỳ tệp nào không có bản ghi tài nguyên phiên bản được nhúng.

Một điều khác cần hiểu là theo mặc định Windows Installer xem ngày tạo và ngày sửa đổi của tệp đích khi quyết định xem tệp src có ghi đè mục tiêu hay không. Nếu CD và MD bằng nhau, nó được coi là 'trinh nữ' (thuật ngữ của tôi) và ghi đè xảy ra. Nếu chúng không bằng nhau, nó được coi là 'dữ liệu người dùng' và nó không bị ghi đè trừ khi bạn thực hiện thủ thuật Luôn ghi đè.

Một điều cần hiểu là những đánh giá này xảy ra ở cấp độ khóa của thành phần. Bất kỳ tệp đồng hành nào khác trong thành phần (nếu không tuân theo tập tin 1: 1 cho mỗi hướng dẫn thành phần) sẽ tuân theo hướng dẫn của tệp khóa.

Cũng nhận ra có sự khác biệt giữa AssemblyVersion và AssemblyFileVersion. Các .Thuộc tính NET AssemblyFileVersion là những gì ánh xạ tới thuộc tính FileVersion kế thừa. Thuộc tính AssemblyVersion chỉ được sử dụng cho các mục đích Đặt tên mạnh và MSI không quan tâm đến nó.

Cuối cùng, google "Quy tắc thành phần cài đặt Windows" để biết thêm thông tin.

Vui lòng cho tôi biết nếu điều này có ý nghĩa và nếu bạn có bất kỳ câu hỏi nào khác. Bạn thực sự hỏi về một tá câu hỏi trong một câu hỏi vì vậy tôi có thể bỏ lỡ một cái gì đó. Ngoài ra xin vui lòng chấp nhận câu trả lời này.

+0

Cảm ơn, điều đó giúp ích. Có cơ sở nào trong studio trực quan hoặc addon để tự động bump FILEVERSION không? PRODUCTVERSION có bất kỳ ý nghĩa nào trong VS_VERSION_INFO hay không. Phiên bản 12.2.16 và 12.02.16 có giống nhau không? –

+2

Đó là một toàn bộ các loại sâu khác nhau đối phó với Xây dựng Tự động hóa và Tích hợp Liên tục chịu trách nhiệm xây dựng ứng dụng của bạn và trình cài đặt ứng dụng của bạn. Bạn sẽ muốn quy trình đó phiên bản các tệp ứng dụng của bạn và chuyển thuộc tính phiên bản sản phẩm vào trong trình cài đặt. Có rất nhiều tùy thuộc vào môi trường xây dựng của bạn trông như thế nào. Cá nhân tôi sử dụng Team Foundation Server Team Build cùng với http://tfsversioning.codeplex.com/ Bạn có thể đang sử dụng InstallShield hoặc Wise hoặc VB6, Deplhi, PowerBuilder, C#, Java cho tất cả những gì tôi biết để không có câu trả lời cụ thể. –

+0

MSIEXEC có thực sự kiểm tra xem phiên bản trong tệp .exe có khớp với phiên bản trong Bảng Tệp không? –

Các vấn đề liên quan