文件计数保存在哪里?

时间:2012-05-14 10:24:28

标签: c# windows installer wix

当我安装具有文件somet.txt的应用程序时,它会将其安装到某个位置C:\temp,并且Windows会保留一个已安装一次的寄存器。

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

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

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

有人知道怎么做,手动/通过wix /通过c#?

我找到了这个信息

  

安装程序会增加组件密钥文件

的共享DLL注册表中的引用计数

3 个答案:

答案 0 :(得分:4)

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

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

  2. 还有传统 SharedDllRefCount机制,可以为组件的密钥路径启用。这确实在文件路径上运行,因此即使组件GUID不匹配也可以使用它。但是,产品不要求正确增加/减少此引用计数,因此不建议使用此方法。 wix中的默认行为是仅在该引用计数已存在时才增加该引用计数。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

共享DLL注册表位于

  

HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ SharedDLLs

如果您进行编辑,则会引发未定义的行为。