我以前用过...
<?define PRODUCTVERSION="!(bind.FileVersion.MyLibrary.dll)" ?>
Run Code Online (Sandbox Code Playgroud)
...定义一个版本变量以在我的安装程序中使用。我第一次使用 Heat.exe 将安装程序(包括 MyLibrary.dll)中所需的文件/文件夹收集到名为 Source.wxs 的文件中。
如果我尝试构建安装程序,则会收到以下错误:
Unresolved bind-time variable !(bind.FileVersion.MyLibrary.dll)
Run Code Online (Sandbox Code Playgroud)
这就像声明的 Product.wxs 文件PRODUCTVERSION无法看到包含 MyLibrary.dll 详细信息的 Source.wxs 文件,但我知道这不是真的,因为如果我设置,PRODUCTVERSION="1.0.0.0"则安装程序会构建所有这些文件已正确安装。
我怎样才能bind.FileVersion“看到”MyLibrary.dll?
编辑
如果我使用 Source.wxs 中的非人类友好文件 ID(见下文),我可以让它工作,但这真的是最好的解决方案吗?
<?define PRODUCTVERSION="!(bind.fileVersion.fil023E197261ED7268770DDE64994C4A55)" ?>
Run Code Online (Sandbox Code Playgroud) 在厌倦了 Wise For Windows Installer 的景象后,我正在构建我的第一个 WiX 安装程序!
我已经构建了安装程序并且运行良好,但现在我需要让它从我的应用程序的先前版本执行升级。虽然我可以找到很多关于设置 WiX 执行升级的帖子,但我找不到任何信息告诉我当您以前使用其他工具制作安装程序时如何执行此操作。
我也用同样的方法做吗?我是否需要从旧安装程序获取升级代码等?提前谢谢了!
更新:
按照 fletcher 的指示,我使用 dark.exe 从旧安装程序中获取了 UpgradeCode,并将其添加到产品标签的 UpgradeCode 中。我的 WiX 文件的开头现在看起来是这样的......
<Product Id="fcdc6617-e960-46db-8faa-1dc627f250c8" Name="MyProduct"
Language="1033" Version="1.2.0.5165" Manufacturer="MyCompany"
UpgradeCode="{E97A233B-AB49-4B66-B92A-68972F6D72B9}">
<Package InstallerVersion="200" Compressed="yes" />
<!-- Upgrade from previous version(s) -->
<Property Id="PREVIOUSVERSIONINSTALLED" Secure="yes" />
<Upgrade Id="{E97A233B-AB49-4B66-B92A-68972F6D72B9}">
<UpgradeVersion Minimum="1.1.0.4605" Maximum="1.2.0.5165"
Property="PREVIOUSVERSIONINSTALLED"
IncludeMinimum="yes" IncludeMaximum="no" />
</Upgrade>
Run Code Online (Sandbox Code Playgroud)
...但是现在,当我运行此安装程序时,我最终会在目标计算机上得到两个 MyProduct 实例。我哪里错了?