【问题标题】:Product LaunchCondition in WiX if no RegistryValue or RegistryValue is below 1.3.44如果没有 RegistryValue 或 RegistryValue 低于 1.3.44,则 WiX 中的 Product LaunchCondition
【发布时间】:2012-07-22 19:53:30
【问题描述】:

我需要让它直接用于 Product / .msi,而不是使用 Bundle / Burn。)

我使用的是 WiX 3.6。

将注册表值放入变量的片段

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <?include $(sys.CURRENTDIR)Deployment\Data\Statics.wxi ?>
  <Fragment>
    <util:RegistrySearch Root="HKCU" Key="$(var.Line.Reg.Path)" Value="Version" Variable="AppAlreadyInstalled" />
  </Fragment>
</Wix>

非工作状态的主要产品

<Product Name="$(var.App.Title)" Manufacturer="!(loc.Company)" Language="!(loc.Lang)" Id="*" Version="$(var.VersionNumber)" UpgradeCode="$(var.App.UpgradeCode)">
    <Package Id="*" InstallerVersion="300" Compressed="yes" InstallScope="$(var.App.Elevation)" InstallPrivileges="limited" />
    <DirectoryRef Id="TARGETDIR" />
    <MajorUpgrade Schedule="afterInstallValidate" DowngradeErrorMessage="!(loc.Msi.NewerVersionInstalled)" />
    <Property Id='DiskPrompt' Value="$(var.App.Title) Installation Media" />
    <Media Id="1" Cabinet="Media.cab" EmbedCab="yes" DiskPrompt="#1" />
    <Icon Id="AppIcon" SourceFile="$(var.Icon.Path)" />

    <Condition Message="Newer version already installed.">
        <![CDATA[Installed OR AppAlreadyInstalled]]>
    </Condition>

    <Feature Id="ProductFeature" Level="1">
         ...
    </Feature>
</Product>
  • 我相信 AppAlreadyInstalled 目前从未设置,因为它位于不同文件的片段中。
  • 然后,如果根本找不到注册表值/不存在,我实际上希望继续安装。
  • 但如果它确实存在,我希望只有在注册表值低于某个值时才能继续安装,例如仅当 AppAlreadyInstalled 时才继续安装;这听起来很难实现,因为注册表值存储为带有两个句点/句点的字符串。
  • 请注意,注册表检查不是要安装的应用程序,这已由 DowngradeErrorMessage 处理。

【问题讨论】:

    标签: c# .net wix registry windows-installer


    【解决方案1】:

    WixUtilExtension:RegistrySearch 仅适用于捆绑包。您需要在 WiX 命名空间中使用普通的 RegistrySearch。您可以使用RegistrySearchRef 从单独的片段中提取RegistrySearch

    但是,版本比较存在问题是对的:MSI 会进行序号字符串比较,所以 1.2 &gt; 1.10。如果安装目录在注册表中,最好使用RegistrySearch 结合DirectorySearchFileSearchFileSearch 可以使用MinVersion 属性按版本搜索,因此如果有一个文件的版本可以用来检测产品,它会比字符串比较更可靠。

    【讨论】:

    • 谢谢,如果安装了以前的版本,它现在可以工作了。但是你如何否定一个属性呢? IE。如果根本没有安装该应用程序,则不会设置AppAlreadyInstalled,但在我想以某种方式执行Installed OR !AppAlreadyInstalled 的情况下?
    • 使用 NOT 运算符。有关完整列表,请参阅 msdn.microsoft.com/en-us/library/windows/desktop/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 2013-10-27
    相关资源
    最近更新 更多