如何根据我的应用程序版本自动设置我的Inno Setup安装程序的版本?
我正在使用Inno安装程序来生成我的应用程序的安装程序。 如何设置Inno生成的setup.exe( VersionInfoVersion
)版本号与我的应用程序的版本号自动匹配? 现在每次部署我的应用程序的新版本时,我都需要手动更新版本号。
现在我正在这样做:
[Setup] VersionInfoVersion=1.2.2.0 //writting the value manually
我想要这样的东西:
[Setup] VersionInfoVersion={Get the version of my app}
您可以像这样使用Inno Setup Preprocessor GetFileVersion
函数
#define ApplicationName 'Application Name' #define ApplicationVersion GetFileVersion('Application.exe') [Setup] AppName={#ApplicationName} AppVerName={#ApplicationName} {#ApplicationVersion} VersionInfoVersion={#ApplicationVersion}
万一你有一个纯粹的web安装程序,接受的解决scheme将无法正常工作,因为你只是不会有一个application.exe来获取版本号。
我正在使用Nant和一个版本号属性的build.xml
文件,我手动碰撞之前,我重buildinnosetup安装程序。
我的* .iss文件包含一个特殊的标记@ APPVERSION @,在构build过程中被replace为版本号。 这是通过使用过滤链的复制操作来完成的,见下文。
InnoSetup脚本(* .iss)
// the -APPVERSION- token is replaced during the nant build process #define AppVersion "@APPVERSION@"
nant build.xml:
<!-- Version --> <property name="product.Name" value="My Software"/> <property name="version.Major" value="1"/> <property name="version.Minor" value="2"/> <property name="version.BuildNumber" value="3"/> <property name="product.Version" value="${version.Major}.${version.Minor}.${version.BuildNumber}"/> <!-- build task --> <target name="bump-version" description="Inserts the current version number into the InnoScript."> <copy todir="${dir.Build}" overwrite="true"> <fileset basedir="${dir.Base}/innosetup/"> <include name="product-webinstaller-w32.iss"/> <include name="product-webinstaller-w64.iss"/> </fileset> <filterchain> <replacetokens> <token key="APPVERSION" value="${product.Version}"/> </replacetokens> </filterchain> </copy> </target>
我在解决这个问题上遇到了一些问题,所以只是提供我的解决scheme。
app.iss:
[Setup] #include "Config.txt" #define AppVersion GetFileVersion("Input\" + AppExec) AppName={#AppName} AppVersion={#AppVersion}
CONFIG.TXT:
#define AppName "App" #define AppExec "App.exe"
通过使用命令行参数的另一种方法:
[Setup] AppVersion={#MyAppVersion}
你只需从cmd中调用你的脚本:
cd C:\Program Files (x86)\Inno Setup 5 iscc /dMyAppVersion="10.0.0.1" "C:\MyPath\MyScript.iss"
它在iss脚本中模拟#define MyAppVersion="10.0.0.1"
。
如果你正在使用CakeBuild ,你可以传递这个参数
string CurrentVersion = "10.0.0.1"; InnoSetupSettings settings = new InnoSetupSettings(); settings.Defines= new Dictionary<string, string> { { "MyAppVersion", CurrentVersion }, }; InnoSetup("C:\MyPath\MyScript.iss", settings);