2010-02-24 16 views

cevap

22

Böyle kendisine mümkün olmalıdır.

(Geçenlerde bu denemedim ama bu şekilde InnoSetup kullanıyordum zaman kesinlikle 2007 yılında geri çalıştı Bazı küçük değişiklikler gerekebilir Inno en sözdizimi eğer o zamandan beri değişti.)

#define MainBinaryName "MyMainFile.exe" 
#define SetupBaseName "setup_mytool_" 
#define AppVersion  GetFileVersion(AddBackslash(SourcePath) + MainBinaryName) 
#define AVF1   Copy(AppVersion, 1, Pos(".", AppVersion) - 1) + "_" + Copy(AppVersion, Pos(".", AppVersion) + 1) 
#define AVF2   Copy(AVF1,  1, Pos(".", AVF1  ) - 1) + "_" + Copy(AVF1  , Pos(".", AVF1  ) + 1) 
#define AppVersionFile Copy(AVF2,  1, Pos(".", AVF2  ) - 1) + "_" + Copy(AVF2  , Pos(".", AVF2  ) + 1) 

[Setup] 
OutputBaseFilename={#SetupBaseName + AppVersionFile} 

MyMainFile.exe vb şeyler yerine sadece orada

setup_mytool_1_2_3_4.exe bitmiş yükleyici AVF1, AVF2, çağırmalıdır sonra sürüm 1.2.3.4 olduğunu ise altındaki sürüm numarasına (.) Bir dosya adında çok fazla nokta ile baş edemeyen şeylerle ilgili sorunlara yol açmamak için puan (_).

+0

güzel! iyi çalıştı, sadece mainBinaryName tırnak içinde :) (cevabını düzenledim) –

+1

+ 1, önişlemci bunun için kullanılabilir olduğunu bilmiyordum. Cevabımı kaldıracak. – mghie

2
; Get the App Version from Main Program 
; This Is Full App Version Major.Minor.Build.Revision 
; Store First 3 Parts of Version in ShortAppVersion to be used for SBS Assembly Installation Major.Minor.Build 
#dim Version[4] 
#expr ParseVersion("MainProgram.exe", Version[0], Version[1], Version[2], Version[3]) 
#define AppVersion Str(Version[0]) + "." + Str(Version[1]) + "." + Str(Version[2]) + "." + Str(Version[3]) 
#define ShortAppVersion Str(Version[0]) + "." + Str(Version[1]) + "." + Str(Version[2]) 
2

bu başka bir şeyle noktalar değiştirilmesine olanak StringChange fonksiyonunu kullanarak içerir yapmanın Daha net bir yol: Eğer dört sürüm numaraları göstermek istemiyorsanız,

#define MainBinaryName "MyMainFile.exe" 
#define SourcePath  "Path/To/File" 
#define SetupBaseName "setup_mytool_" 
#define AppVersion  GetFileVersion(AddBackslash(SourcePath) + MainBinaryName) 
#define AppVersionFile StringChange(AppVersion, ".", "_") 

[Setup] 
OutputBaseFilename={#SetupBaseName + AppVersionFile} 

Ayrıca (örn bunu yerine 1.0.1.0 ait 1.0.1 söylemek istiyorum), aşağıdaki ile AppVersion satırı değiştirebilirsiniz:

#define NumberOfVersionPoints 3 
#define AppVersion    Copy(GetFileVersion(AddBackslash(SourcePath) + MainBinaryName), 0, NumberOfVersionPoints * 2 - 1) 
+0

'NumberOfVersionPoints 'kodu yalnızca sürüm numarası iki basamaklı bir öğe içermiyorsa çalışır (örneğin," 1.2.10.0 "yanlış şekilde" 1.2.1 "e dönüştürür). – TypeIA

+0

@TypeIA Bu davanın nasıl ele alınacağına dair bir fikrin var mı? – Thunderforge

+0

O zaman yapmadım, ama Inno posta listesine bir çözüm buldum. Aşağıda yeni bir cevap gönderdim. Başladığın için teşekkürler! – TypeIA

1

GetFileVersion() (diğer yanıtlarda açıklanmıştır), "Major.Minor.Rev.Build." Formunun bir dizesini döndürür. Tek tek öğelere erişmek istiyorsanız, dizeyi kendiniz biçimlendirebilirsiniz ("Major.Minor" veya "Major.Minor.Rev" istiyorsanız), aşağıdaki yaklaşımı kullanabilirsiniz: jrsoftware.innosetup mailing list:

#define VerMajor 
#define VerMinor 
#define VerRev 
#define VerBuild 
#define FullVersion=ParseVersion('PathTo.exe', VerMajor, VerMinor, VerRev, VerBuild) 
#define MyAppVersion = Str(VerMajor) + "." + Str(VerMinor)