我已经为我的项目生成了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”的含义,还想了解此代码段吗?
该组件将在这里做什么?
答案 0 :(得分:1)
在Wix documentation中,如果组件中的KeyPath值未设置为“ yes”,它将自动尝试选择在组件内部声明为KeyPath的元素之一。
因此,在示例中所显示的内容中,Component的第一个RegistryKey元素将声明为KeyPath。您的代码示例将在安装时创建3个注册表项(并在卸载时将其删除),并且如果系统上已存在被自动选择为KeyPath的注册表项,则会认为该组件已安装。