基本上我需要的是一种自动更新WiX产品版本号(带Votive等的3.0)的方法,然后将该版本号输入Inno Setup“bootstrapper”
我几乎把这个过程大部分都自动化了,但版本号仍然需要手动更新,这显然不太理想,但我找不到如何在编译时将值传递给Inno Setup(以及如何引用他们),在WiX项目中,我需要知道如何在Visual Studio 2008中的同一解决方案中引用不同项目的版本号
答案 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设置部分找到了这个,看起来它会起作用: