2008-12-10 24 views
16

Zasadniczo potrzebuję automatycznego sposobu aktualizowania numeru wersji produktu w WiX (3.0 z Votive itd.), A następnie pobranie tego numeru wersji do konfiguracji Inno " bootstrapper "Numer wersji automatycznej kompilacji z WiX, Inno Setup i VS2008

W zasadzie proces ten jest w większości zautomatyzowany, jednak numery wersji wciąż wymagają aktualizacji ręcznie, co oczywiście nie jest idealne, ale nie mogłem znaleźć sposobu przekazania wartości do Inno Setup podczas kompilacji (i jak się do nich odwoływać), aw projekcie WiX muszę wiedzieć, jak odwołać się do numeru wersji innego projektu w tym samym rozwiązaniu w Visual Studio 2008

Odpowiedz

26

Nie trzeba niczego przekazywać! Możesz po prostu pozwolić InnoSetup Preprocessor odczytać informacje o wersji prosto z zasobu wersji binarnej, np.:

#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 

Przed wersją 5.4.1 (2011-02-09) Pakiet ISPP nie został uwzględniony w domyślnym pakiecie InnoSetup. Trzeba było pobrać pakiet InnoSetup Quick Start Pack: http://www.jrsoftware.org/isdl.php#qsp (dzięki @Gwyn, za aktualizację)

+2

Wow! To genialne! +1. Zirytował fakt, że ISPP nie jest częścią domyślnego pakietu. – Rob

+0

+1 Możesz wyciągnąć wszystkie wartości versioninfo ze swojego exe. Używam Inno (i ISTool) od kilku lat dla wszystkich moich produktów i myślę, że jest raczej ... piękny. – Spike0xff

+2

Od 5.4.1 (2011-02-09), to jest ... –

1

Sposób, w jaki to robię jest ze skryptem WSF (używam JavaScript ale możesz użyć VBScript lub nawet skryptu SH używając Cygwin), który tworzy plik nagłówkowy zawierający definicje numerów wersji. Możesz użyć instrukcji Wix <include>, aby przeciągnąć numer wersji do. ​​

Dla Inno Setup tworzę plik .iss, który zawiera numer wersji, który jest # uwzględniony w głównym skrypcie iss.

Jestem w domu, ale mogę opublikować przykładowy kod jutro, jeśli chcesz.

EDYCJA: Zapomniałem wspomnieć, że uruchamiam skrypt, który generuje pliki zawierające numer kompilacji podczas etapu wstępnego budowania różnych projektów VS.

+0

Byłbym wdzięczny za przykładowy kod, jeśli nie masz nic przeciwko :) Dzięki – Davy8

0

Znalazłem to na inno sekcji ustawień, które wygląda jak to działa:

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

+1

Tak, ale po co robić wszystkie te kłopoty, kiedy możesz po prostu mieć kompilator Inno uzyskać numery ze źródłowego źródła informacji o wersji binarnej (zobacz moją odpowiedź)? Unikaj podwójnego sprzątania (na przykład ręcznego umieszczania wersji zarówno w zasobie, jak i pliku tekstowym), gdy tylko jest to możliwe. –

1

przykładowy kod jak obiecał. To powinno wystarczyć, aby zacząć.

Do utworzenia pliku InnoSetup iss zawierającego numer wersji można użyć następującego skryptu JavaScript. Rzeczywisty plik będzie wyglądać następująco:

VersionInfoVersion=1.2.3.12345 
AppVerName=My App v1.2.3.12345 

Głównym skrypt Inno Setup będzie zawierać ten plik poprzez dodanie następujących do końca [Setup] sekcja:

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

#include "version.iss" 

Oto JavaScript (byłoby to zapisane w osobnym pliku - version.js na przykład):

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; 
} 

można dostosować ten skrypt, aby utworzyć plik version.iss ja n inny folder.

Na koniec musisz wykonać JavaScript - najlepsze miejsce będzie w Pre-Build Event twojego projektu Visual Studio. Dodaj:

cscript version.js //NoLogo 

Musisz to zmienić, aby również skompilować plik kompatybilny z Wix. Kiedyś to robiłem, ale rzuciłem Wix na rzecz Inno Setup, więc nie mam tego kodu pod ręką. Istnieje mechanizm do skryptu Wix, więc powinien wskazać ci właściwy kierunek - koncepcja jest taka sama - wygeneruj plik tekstowy, który definiuje numer wersji, a następnie ją zawrzyj.

Mam nadzieję, że to pomoże.

+0

Dzięki, nie jestem pewien, czy pójdę z twoją czy Oliver jeszcze ale +1 do was obu :) – Davy8

8

Możesz pobrać ProductVersion dla WiX z wersji pliku w pakiecie. Składnia jest coś takiego:

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

Albo można podać je w wierszu polecenia, aby Świeca pomocą „-dVersionFromCommandLine = 1.0.0.0” przełącznik ze składnią jak:

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

Albo pracuje w najnowszej buduje WiX v3. Tylko ta ostatnia działa na WiX v2.

+0

Rob odpowiedział na to w http://stackoverflow.com/questions/626033/how-can-i-set-the-wix-installer-version-to-tore-curent-build-version bardziej poprawnie. Musisz użyć! (Bind.FileVersion.MyFileId) – vasquez

Powiązane problemy