基本上我需要的是一种自动化的方式来更新 WiX 中的产品版本号(带有 Votive 等的 3.0),然后将该版本号放入 Inno Setup“引导程序”中
我几乎让这个过程大部分是自动化的,但是版本号仍然需要手动更新,这显然不理想,但我找不到如何在编译时将值传递给 Inno Setup(以及如何引用它们),在 WiX 项目中,我需要知道如何在 Visual Studio 2008 的同一解决方案中引用不同项目的版本号
基本上我需要的是一种自动化的方式来更新 WiX 中的产品版本号(带有 Votive 等的 3.0),然后将该版本号放入 Inno Setup“引导程序”中
我几乎让这个过程大部分是自动化的,但是版本号仍然需要手动更新,这显然不理想,但我找不到如何在编译时将值传递给 Inno Setup(以及如何引用它们),在 WiX 项目中,我需要知道如何在 Visual Studio 2008 的同一解决方案中引用不同项目的版本号
无需通过任何东西!您可以简单地让 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,更新)
您可以从包中的文件版本中获取适用于 WiX 的 ProductVersion。语法类似于:
<Product Version="$(var.FileVersion.FileId)">
或者,您可以在命令行上使用“-dVersionFromCommandLine=1.0.0.0”开关将其提供给蜡烛,语法如下:
<Product Version="$(var.VersionFromCommandLine)">
两者都适用于最新版本的 WiX v3。只有后者适用于 WiX v2。
我这样做的方法是使用 WSF 脚本(我使用 JavaScript,但您可以使用 VBScript 甚至使用 Cygwin 的 SH 脚本)创建一个包含版本号定义的头文件。您可以使用 Wix<include>
语句将版本号拖入。
对于 Inno Setup,我创建了一个包含版本号的 .iss 文件,该版本号 #included 到主 iss 脚本中。
我在家,但如果你愿意,明天可以发布一些示例代码。
编辑:我忘了提到我在各种 VS 项目的预构建阶段运行生成包含内部版本号的文件的脚本。
承诺的一些示例代码。这应该足以让你开始。
以下 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 脚本有一个机制,因此应该为您指明正确的方向 - 概念是相同的 - 生成一个定义版本号的文本文件,然后包含它。
希望这可以帮助。
我在 inno setup 部分找到了这个,看起来它可以工作: