0

我正在尝试将 Wix 配置为构建我的 msi,以仅结合 REINSTALL 属性执行我的产品的构建版本(1.0.x),我的问题是当我运行命令行时:MSIEXEC.exe /i my.msi / l*vx build-inst.log REINSTALL=ALL REINSTALLMODE=vamus 它什么也没做。

我检查了 msi 日志,发现它正在默认文件夹 (.\program files (x86)...\myproduct) 中寻找现有产品,但是当我第一次安装它时,我实际上使用了自定义路径 (c :\我的产品)。我的印象是使用 REINSTALL 安装程序将使用原始产品的安装路径。

真的是这样吗?我应该在命令行上指定 INSTALLDIR 吗?我宁愿不这样做,因为这是供客户使用的,我不能保证我会知道产品的安装位置。

这种执行“构建”升级的方法已在几个地方提出,但我找不到任何解释任何需要指定 INSTALLDIR

有什么方法可以在 Wix 中进行配置吗?

谢谢

基兰

4

3 回答 3

1

最简单的解决方案是将安装目录存储在注册表中,并在重新安装时进行查找。

要查找您的注册表值,您将使用以下内容:

<Property Id="INSTALLDIR">
    <RegistrySearch Id="InstallLocation" Root="HKCU"
        Key="SOFTWARE\Company\Product" Name="Location" Type="raw" />
</Property>

如果未找到注册表值,则 INSTALLDIR 属性将设置为您的目录结构。

当您从命令行指定此类属性时,Rob在他的博客上有一个完整的解决方案。

于 2013-08-29T14:44:17.490 回答
0

I found out that the problem was due to using a wildcard for the product id, so every time a new msi was built it created a new product id.

By fixing this it seemed to resolve the problem, though I have also implemented the registry key option as it will help for upgrades where I do want to change the product id.

Thanks

于 2013-09-03T11:32:50.920 回答
0

通常存储目录表中的原始条目以供重新安装,而无需您自己存储它们。因此,如果这不起作用,您的 MSI 中有一些“特殊”的东西。如果您有一个设置目录属性(如 INSTALLDIR)的自定义操作,则不应使用它。例如,给他们一个条件“未安装”。

于 2013-08-30T12:00:08.700 回答