2008-12-10 28 views
16

Về cơ bản những gì tôi cần là cách tự động cập nhật số phiên bản sản phẩm trong WiX (3.0 với Votive v.v.), và sau đó nhận số phiên bản đó vào Cài đặt Inno " Tôi khá nhiều có quá trình chủ yếu là tự động, tuy nhiên số phiên bản vẫn cần phải được cập nhật thủ công mà rõ ràng không phải là lý tưởng, nhưng tôi không thể tìm cách chuyển giá trị cho Inno Setup vào thời gian biên dịch (và làm thế nào để tham khảo chúng), và trong dự án WiX tôi cần biết cách tham khảo số phiên bản của một dự án khác nhau trong cùng một giải pháp trong Visual Studio 2008Số phiên bản tự động tạo với WiX, Inno Setup và VS2008

Trả lời

26

Không cần phải vượt qua bất kỳ điều gì! Bạn có thể chỉ cần cho Bộ xử lý trước của InnoSetup đọc thông tin phiên bản ngay từ tài nguyên phiên bản nhị phân, ví dụ::

#define AppName "My App" 
#define SrcApp "MyApp.exe" 
#define FileVerStr GetFileVersion(SrcApp) 
#define StripBuild(str VerStr) Copy(VerStr, 1, RPos(".", VerStr)-1) 
#define AppVerStr StripBuild(FileVerStr) 

[Setup] 
AppName={#AppName} 
AppVersion={#AppVerStr} 
AppVerName={#AppName} {#AppVerStr} 
UninstallDisplayName={#AppName} {#AppVerStr} 
VersionInfoVersion={#FileVerStr} 
VersionInfoTextVersion={#AppVerStr} 
OutputBaseFilename=MyApp-{#FileVerStr}-setup 

Trước phiên bản 5.4.1 (2011-02-09) ISPP không được bao gồm trong gói InnoSetup mặc định. Bạn phải tải xuống Gói khởi động nhanh InnoSetup: http://www.jrsoftware.org/isdl.php#qsp (nhờ @Gwyn, để cập nhật)

+2

Wow! Thật tuyệt vời! +1. Bực bội rằng ISPP không phải là một phần của gói mặc định. – Rob

+0

+1 Bạn có thể lấy tất cả các giá trị versioninfo từ exe của mình. Tôi đã sử dụng Inno (và ISTool) vài năm nay cho tất cả các sản phẩm của mình, và tôi nghĩ nó khá ... đẹp. – Spike0xff

+2

Kể từ 5.4.1 (2011-02-09), nó là ... –

1

Cách tôi làm với kịch bản WSF (tôi sử dụng JavaScript nhưng bạn có thể sử dụng VBScript hoặc thậm chí một kịch bản lệnh SH sử dụng Cygwin) để tạo một tệp tiêu đề chứa các định nghĩa cho các số phiên bản. Bạn có thể sử dụng câu lệnh Wix <include> để kéo số phiên bản.

Để thiết lập Inno Tôi tạo tệp .iss chứa số phiên bản, được bao gồm trong tập lệnh iss chính.

Tôi đang ở nhà nhưng có thể đăng một số mã mẫu vào ngày mai nếu bạn muốn.

EDIT: Tôi quên đề cập đến rằng tôi chạy tập lệnh tạo các tệp chứa số bản dựng trong giai đoạn dựng sẵn của các dự án VS khác nhau của tôi.

+0

Tôi sẽ đánh giá cao mã mẫu nếu bạn không phiền :) Cảm ơn – Davy8

0

Tôi thấy điều này cho phần thiết lập INNO mà có vẻ như nó sẽ làm việc:

http://agiletracksoftware.com/blog.html?id=4

+1

Vâng, nhưng tại sao phải trải qua tất cả những rắc rối đó khi bạn có thể đơn giản có trình biên dịch Inno lấy số từ tài nguyên thông tin phiên bản nhị phân nguồn (xem câu trả lời của tôi)? Tránh sử dụng hai lần (chẳng hạn như đặt phiên bản thủ công cả vào tài nguyên và một số tệp văn bản) ở bất kỳ nơi nào có thể. –

1

Một số mẫu mã như đã hứa. Điều này là đủ để bạn bắt đầu.

Có thể sử dụng JavaScript sau để tạo tệp InnoSetup chứa số phiên bản. Các tập tin thực tế sẽ giống như thế này:

VersionInfoVersion=1.2.3.12345 
AppVerName=My App v1.2.3.12345 

Các Inno Setup kịch bản chính sẽ bao gồm tập tin này bằng cách thêm dòng sau vào cuối [Setup] phần:

[Setup] 
AppId={{...}} 
... 

#include "version.iss" 

Đây là JavaScript (điều này sẽ được lưu dưới dạng tệp riêng biệt - version.js chẳng hạn):

createInnoSetupIncludeFile("My App", 1, 2, 3, 12345, "version.iss"); 

function createInnoSetupIncludeFile(appName, verMajor, verMinor, verSubMinor, buildNumber, headerFileName) 
{ 
    var versionString = verMajor + "." + verMinor + "." + verSubMinor + "." + buildNumber; 
    var fileSystemObject = WScript.CreateObject("Scripting.FileSystemObject"); 
    var fileObject = fileSystemObject.CreateTextFile(headerFileName, true); 
    fileObject.WriteLine("VersionInfoVersion=" + versionString); 
    fileObject.WriteLine("AppVerName=" + appName + " v" + versionString); 
    fileObject.Close(); 
    fileObject = null; 
    fileSystemObject = null; 
} 

Bạn có thể tinh chỉnh tập lệnh này để tạo tệp version.iss n một thư mục khác.

Cuối cùng, bạn cần phải thực thi JavaScript - nơi tốt nhất sẽ là trong sự kiện Pre-Build của dự án Visual Studio của bạn. Thêm thông tin sau:

cscript version.js //NoLogo 

Bạn sẽ cần phải thay đổi điều này để xây dựng tệp bao gồm tương thích Wix. Tôi đã từng làm điều này, nhưng đổ Wix ủng hộ Inno Setup, vì vậy tôi không có mã này để tay. Có một mechamism cho một kịch bản Wix mặc dù, do đó, nên chỉ cho bạn đi đúng hướng - khái niệm là như nhau - tạo ra một tập tin văn bản xác định số phiên bản và sau đó bao gồm nó.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn, không chắc tôi sẽ đi với bạn hoặc của Oliver chưa nhưng +1 cho cả hai bạn :) – Davy8

8

Bạn có thể nhận ProductVersion cho WiX từ phiên bản tệp trong gói của bạn. Cú pháp là cái gì đó như:

<Product Version="$(var.FileVersion.FileId)"> 

Hoặc bạn có thể cung cấp cho nó trên dòng lệnh để nến bằng cách sử dụng "-dVersionFromCommandLine = 1.0.0.0" chuyển đổi với cú pháp như sau:

<Product Version="$(var.VersionFromCommandLine)"> 

Hoặc làm việc tại mới nhất xây dựng của WiX v3. Chỉ có tác phẩm thứ hai hoạt động trên WiX v2.

+0

Rob đã trả lời câu hỏi này trong http://stackoverflow.com/questions/626033/how-can-i-set-the-wix-installer-version-to-the-curent-build-version đúng hơn tôi nghĩ. Bạn phải sử dụng! (Bind.FileVersion.MyFileId) – vasquez

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