当我安装一个包含文件的应用程序时,somet.txt它会将其安装到某个位置C:\temp,并且 Windows 会记录它已安装 1 次。
如果另一个应用程序将具有相同 id 的相同文件安装到相同位置,则安装计数将增加到 2。
这样一来,如果您想完全删除该文件,则必须在删除该文件之前卸载这两个应用程序。
我正在寻找读取此计数/编辑此计数/等的能力。
有谁知道如何手动/通过wix/通过c#来做到这一点?
我找到了这个信息
安装程序增加组件密钥文件的共享 DLL 注册表中的引用计数
当我安装一个包含文件的应用程序时,somet.txt它会将其安装到某个位置C:\temp,并且 Windows 会记录它已安装 1 次。
如果另一个应用程序将具有相同 id 的相同文件安装到相同位置,则安装计数将增加到 2。
这样一来,如果您想完全删除该文件,则必须在删除该文件之前卸载这两个应用程序。
我正在寻找读取此计数/编辑此计数/等的能力。
有谁知道如何手动/通过wix/通过c#来做到这一点?
我找到了这个信息
安装程序增加组件密钥文件的共享 DLL 注册表中的引用计数
Windows 安装程序中有两种独立的引用计数机制,其他答案各自指代不同的:
组件(不是文件)是按引用它们的已安装产品的数量来计算的。这要求组件在引用它的不同产品中具有相同的 GUID 和keypath。
还有一个遗留 SharedDllRefCount机制可以为组件的 keypath 启用。这确实对文件路径进行了操作,因此即使组件 GUID 不匹配也可以使用。但是,产品不需要正确地增加/减少这个引用计数,所以不推荐使用它。wix 中的默认行为是仅在此引用计数已存在时才增加此引用计数。
这些引用计数在 Windows 安装程序内部使用:当它们都达到零时,组件被卸载。AFAIK Windows Installer API不会在任何地方公开此引用计数,因为您不需要直接阅读或编辑它们。
这些文件包含在组件中。这些组件在产品中被引用。引用计数不存储为数字,但从产品到组件的引用被视为此计数。
要卸载包含您的文件的组件,您需要卸载引用该组件的所有产品。
共享 DLL 注册表位于
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs
如果您编辑这将邀请未定义的行为。