4

当我安装一个包含文件的应用程序时,somet.txt它会将其安装到某个位置C:\temp,并且 Windows 会记录它已安装 1 次。

如果另一个应用程序将具有相同 id 的相同文件安装到相同位置,则安装计数将增加到 2。

这样一来,如果您想完全删除该文件,则必须在删除该文件之前卸载这两个应用程序。

我正在寻找读取此计数/编辑此计数/等的能力。

有谁知道如何手动/通过wix/通过c#来做到这一点?

我找到了这个信息

安装程序增加组件密钥文件的共享 DLL 注册表中的引用计数

4

3 回答 3

4

Windows 安装程序中有两种独立的引用计数机制,其他答案各自指代不同的:

  1. 组件(不是文件)是按引用它们的已安装产品的数量来计算的。这要求组件在引用它的不同产品中具有相同的 GUID 和keypath

  2. 还有一个遗留 SharedDllRefCount机制可以为组件的 keypath 启用。这确实对文件路径进行了操作,因此即使组件 GUID 不匹配也可以使用。但是,产品不需要正确地增加/减少这个引用计数,所以不推荐使用它。wix 中的默认行为是仅在此引用计数已存在时才增加此引用计数。

这些引用计数在 Windows 安装程序内部使用:当它们都达到零时,组件被卸载。AFAIK Windows Installer API不会在任何地方公开此引用计数,因为您不需要直接阅读或编辑它们。

于 2012-05-14T13:59:49.910 回答
3

这些文件包含在组件中。这些组件在产品中被引用。引用计数不存储为数字,但从产品到组件的引用被视为此计数。

要卸载包含您的文件的组件,您需要卸载引用该组件的所有产品。

于 2012-05-14T10:50:55.130 回答
2

共享 DLL 注册表位于

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs

如果您编辑这将邀请未定义的行为。

于 2012-05-14T10:48:18.193 回答