使 Wix 不卸载常见的 dll
Make Wix to not uninstall common dll
我有一个 Wix 项目,如果没有,我需要安装一个常用的 dll 库。
如果这个 dll 存在,我不应该覆盖它。
所以,当我设置 DefaultVersion="0.0.0.0" 时,如果这个 dll 存在,它不会被覆盖,没问题。但是当我删除应用程序时,dll 被删除了。如果安装前存在 dll,如何防止删除它?
我不想让它永久化,因为如果它在安装前不存在就应该被删除。
<Component Id="myLib.dll" Permanent="no" Directory="Shared_Dir">
<File Name="myLib.dll" KeyPath="yes"
Source="mySource\myLib.dll"
DefaultVersion="0.0.0.0"
/>
在您的代码中向 Wix
元素添加对 WixUtilExtension
和 xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
属性的引用。
在 Product
元素中定义 <Property Id="Dll_Installed" Value="false"/>
。
将 child <Condition>NOT Dll_Installed</Condition>
添加到组件 myLib.dll
。
在您的代码中的某处添加:
<Fragment>
<util:FileSearch
Id="Dll_Installed"
Variable="Dll_Installed"
Path="[Shared_Dir]myLib.dll"
Result="exists"/>
</Fragment>
DefaultVersion
属性不是必需的。
您描述的功能是引用计数。 Windows 安装程序对组件的引用计数。组件由其 GUID 标识。
所以解决这个需求的正常方法是将文件放在一个组件中,并确保组件的GUID是稳定的。如果您没有指定 Component/@Guid 属性,WiX 工具集应该会自动执行此操作。
所以默认行为应该适合您。
唯一的另一块拼图是 Windows 安装程序将安装最新版本的文件。如果文件版本相同或更低,文件将不会安装,但会被引用计数。
根据问题中的详细信息,您似乎应该没问题:
<Component Directory="Shared_Dir">
<File Source="mySource\myLib.dll" />
</Component>
有人可能会问为什么 Windows 安装程序使用组件来引用计数文件。我们会,它允许您将其他资源(如注册表项)分组在一起,并作为一个单元控制它们的安装。如果您正在安装 COM 服务器,则比普通的旧文件重要得多。
我有一个 Wix 项目,如果没有,我需要安装一个常用的 dll 库。 如果这个 dll 存在,我不应该覆盖它。 所以,当我设置 DefaultVersion="0.0.0.0" 时,如果这个 dll 存在,它不会被覆盖,没问题。但是当我删除应用程序时,dll 被删除了。如果安装前存在 dll,如何防止删除它? 我不想让它永久化,因为如果它在安装前不存在就应该被删除。
<Component Id="myLib.dll" Permanent="no" Directory="Shared_Dir">
<File Name="myLib.dll" KeyPath="yes"
Source="mySource\myLib.dll"
DefaultVersion="0.0.0.0"
/>
在您的代码中向
Wix
元素添加对WixUtilExtension
和xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
属性的引用。在
Product
元素中定义<Property Id="Dll_Installed" Value="false"/>
。将 child
<Condition>NOT Dll_Installed</Condition>
添加到组件myLib.dll
。在您的代码中的某处添加:
<Fragment> <util:FileSearch Id="Dll_Installed" Variable="Dll_Installed" Path="[Shared_Dir]myLib.dll" Result="exists"/> </Fragment>
DefaultVersion
属性不是必需的。
您描述的功能是引用计数。 Windows 安装程序对组件的引用计数。组件由其 GUID 标识。
所以解决这个需求的正常方法是将文件放在一个组件中,并确保组件的GUID是稳定的。如果您没有指定 Component/@Guid 属性,WiX 工具集应该会自动执行此操作。
所以默认行为应该适合您。
唯一的另一块拼图是 Windows 安装程序将安装最新版本的文件。如果文件版本相同或更低,文件将不会安装,但会被引用计数。
根据问题中的详细信息,您似乎应该没问题:
<Component Directory="Shared_Dir">
<File Source="mySource\myLib.dll" />
</Component>
有人可能会问为什么 Windows 安装程序使用组件来引用计数文件。我们会,它允许您将其他资源(如注册表项)分组在一起,并作为一个单元控制它们的安装。如果您正在安装 COM 服务器,则比普通的旧文件重要得多。