使用WiX,Inno Setup和VS2008自动构建版本号

时间:2008-12-10 22:16:31

标签: visual-studio-2008 wix build-automation inno-setup

基本上我需要的是一种自动更新WiX产品版本号(带Votive等的3.0)的方法,然后将该版本号输入Inno Setup“bootstrapper”

我几乎把这个过程大部分都自动化了,但版本号仍然需要手动更新,这显然不太理想,但我找不到如何在编译时将值传递给Inno Setup(以及如何引用他们),在WiX项目中,我需要知道如何在Visual Studio 2008中的同一解决方案中引用不同项目的版本号

5 个答案:

答案 0 :(得分:26)

无需传递任何东西!您可以简单地让InnoSetup预处理器直接从二进制文件的版本资源中读取版本信息,例如:

#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

在版本5.4.1(2011-02-09)之前,ISPP未包含在默认的InnoSetup软件包中。您必须下载InnoSetup快速入门包:http://www.jrsoftware.org/isdl.php#qsp(感谢@Gwyn,更新)

答案 1 :(得分:8)

您可以从包中的文件版本获取WiX的ProductVersion。语法类似于:

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

或者您可以使用“-dVersionFromCommandLine = 1.0.0.0”开关在命令行上将其提供给蜡烛,语法​​如下:

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

适用于最新版本的WiX v3。只有后者适用于WiX v2。

答案 2 :(得分:1)

我这样做的方法是使用WSF脚本(我使用JavaScript但你可以使用VBScript甚至是使用Cygwin的SH脚本),它创建一个包含版本号定义的头文件。您可以使用Wix <include>语句拖动版本号。

对于Inno Setup,我创建一个.iss文件,其中包含版本号,#included包含在主要的iss脚本中。

我在家,但如果你愿意,可以在明天发布一些示例代码。

编辑:我忘了提到我在各种VS项目的预构建阶段运行生成包含内部版本号的文件的脚本。

答案 3 :(得分:1)

承诺的一些示例代码。这应该足以让你入门。

以下JavaScript可用于创建包含版本号的InnoSetup iss文件。实际文件如下所示:

VersionInfoVersion=1.2.3.12345
AppVerName=My App v1.2.3.12345

主要的Inno安装脚本将包含此文件,方法是在 [设置] 部分的末尾添加以下内容:

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

#include "version.iss"

这是JavaScript(这将保存为单独的文件 - 例如version.js):

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

您可以调整此脚本以在另一个文件夹中创建version.iss文件。

最后,您需要执行JavaScript - 最佳位置将在Visual Studio项目的预构建事件中。添加以下内容:

cscript version.js //NoLogo

您需要更改此设置以构建与Wix兼容的包含文件。我曾经这样做过,但抛弃了Wix,转而支持Inno Setup,所以我没有这个代码。虽然有一个Wix脚本的机制,所以这应该指向正确的方向 - 概念是相同的 - 生成一个文本文件,定义版本号,然后包含它。

希望这有帮助。

答案 4 :(得分:0)

我在inno设置部分找到了这个,看起来它会起作用:

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