16

基本上我需要的是一种自动化的方式来更新 WiX 中的产品版本号(带有 Votive 等的 3.0),然后将该版本号放入 Inno Setup“引导程序”中

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

4

5 回答 5

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,更新)

于 2008-12-11T08:58:33.517 回答
8

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

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

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

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

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

于 2008-12-11T18:51:11.353 回答
1

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

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

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

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

于 2008-12-10T22:23:15.203 回答
1

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

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

VersionInfoVersion=1.2.3.12345
AppVerName=My App v1.2.3.12345

主 Inno Setup 脚本将通过在[Setup]部分的末尾添加以下内容来包含此文件:

[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 项目的 Pre-Build Event 中。添加以下内容:

cscript version.js //NoLogo

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

希望这可以帮助。

于 2008-12-11T08:06:17.990 回答
0

我在 inno setup 部分找到了这个,看起来它可以工作:

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

于 2008-12-10T23:03:14.093 回答