当我安装具有文件somet.txt
的应用程序时,它会将其安装到某个位置C:\temp
,并且Windows会保留一个已安装一次的寄存器。
如果另一个应用程序将具有相同ID的同一文件安装到同一位置,则安装计数将增加到2.
这样,如果要完全删除该文件,则必须在删除文件之前卸载这两个应用程序。
我正在寻找能够读取此计数/编辑此计数/等。
有人知道怎么做,手动/通过wix /通过c#?
我找到了这个信息
安装程序会增加组件密钥文件
的共享DLL注册表中的引用计数
答案 0 :(得分:4)
Windows安装程序中有两个单独的引用计数机制,其他答案各自引用不同的引用计数机制:
组件(不是文件)的引用数量是指引用它们的已安装产品的数量。这要求组件在引用它的不同产品中具有相同的GUID和keypath。
还有传统 SharedDllRefCount
机制,可以为组件的密钥路径启用。这确实在文件路径上运行,因此即使组件GUID不匹配也可以使用它。但是,产品不要求正确增加/减少此引用计数,因此不建议使用此方法。 wix中的默认行为是仅在该引用计数已存在时才增加该引用计数。
这些引用计数在Windows安装程序内部使用:当它们都达到零时,组件将被卸载。 AFAIK Windows Installer API不会在任何地方公开此引用计数,因为您无需直接阅读或编辑它们。
答案 1 :(得分:3)
文件包含在组件中。组件在产品中引用。引用计数不存储为数字,但从产品到组件的引用被视为此计数。
要卸载包含文件的组件,您需要卸载引用该组件的所有产品。
答案 2 :(得分:2)
共享DLL注册表位于
HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ SharedDLLs
如果您进行编辑,则会引发未定义的行为。