MSIEXEC使用命令行REINSTALL不使用原始INSTALLDIR

时间:2013-08-28 17:39:22

标签: wix msiexec reinstall

我正在尝试配置Wix来构建我的msi以仅执行我的产品的构建版本(1.0.x)以及REINSTALL属性,我的问题是当我运行命令行时:MSIEXEC.exe / i my .msi / l * vx build-inst.log REINSTALL = ALL REINSTALLMODE = vamus无法执行任何操作。

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

实际情况如此吗?我应该在命令行中指定INSTALLDIR吗?我不愿意,因为这是供客户使用的,我不能保证我会知道产品的安装位置。

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

有没有办法在Wix中配置它?

由于

基兰

3 个答案:

答案 0 :(得分:1)

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

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

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

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

当你从命令行指定这样的属性时,Rob有一个complete solution on his blog

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我发现问题是由于对产品ID使用了通配符,因此每次构建新的msi时都会创建一个新的产品ID。

通过解决这个问题似乎解决了这个问题,虽然我也实现了注册表项选项,因为它有助于我想要更改产品ID的升级。

由于