我们能否将KeyPath =“ no”与“ Component”元素与注册表一起使用

时间:2018-10-04 14:35:56

标签: wix wix3.5 wix3 wix3.7 wix3.6

我已经为我的项目生成了Windows安装程序包(.msi文件)。

我安装了安装程序,但之后无法启动该应用程序。

因此,我正在浏览.wxs文件以查找根本原因并找到一些可疑的代码

<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
  <Fragment>
    <DirectoryRef Id="INSTALLDIR">

      <!-- This component creates EMR v3.0 Registry Entries-->

      <Component Id="RegistryEntries_Set1" Guid="1A20601C-77EA-11E0-98C2-1AD64824019B" KeyPath="no">
        <!-- To remove stray registry entries under HKLM,HKU and HKCU registry hives-->
        <!--<Registry Id="Delete$(var.CompanyName)Node" Root="HKLM" Key="Software\$(var.CompanyName)\$(var.ProductName)" Action="removeKeyOnUninstall" />-->
        <RegistryKey Id="Delete$(var.CompanyName)Node" Root="HKLM" Key="Software\$(var.CompanyName)\$(var.ProductName)" Action="createAndRemoveOnUninstall" />
        <RegistryKey Id="Delete$(var.CompanyName)Node2" Root="HKU" Key=".DEFAULT\Software\$(var.CompanyName)" Action="createAndRemoveOnUninstall" />
        <RegistryKey Id="Delete$(var.CompanyName)Node3" Root="HKCU" Key="Software\$(var.CompanyName)" Action="createAndRemoveOnUninstall" />

我了解到,如果Keypath =“ yes”意味着Windows安装程序将认为存在keypath资源,并且不会再次安装。

如果Keypath =“ no”,它将安装。

在这种情况下,我想了解KeyPath =“ no”的含义,还想了解此代码段吗?

该组件将在这里做什么?

1 个答案:

答案 0 :(得分:1)

Wix documentation中,如果组件中的KeyPath值未设置为“ yes”,它将自动尝试选择在组件内部声明为KeyPath的元素之一。

因此,在示例中所显示的内容中,Component的第一个RegistryKey元素将声明为KeyPath。您的代码示例将在安装时创建3个注册表项(并在卸载时将其删除),并且如果系统上已存在被自动选择为KeyPath的注册表项,则会认为该组件已安装。