2014-01-20 2 views
1

Я пытаюсь понять/объяснить, почему происходит следующее:Понимание подсчета ссылок - окна Установщик

1) A.msi создает каталог \ путь \ к \ Foo

2) В. MSI находит \ путь \ к \ Foo с помощью реестра и добавляет несколько файлов в эту папку

3) если B.msi удаляется, дополнительные файлы, которые он добавляет удаляются

4), если в новой версии A.msi (основное обновление) до удаления B.msi, последующая деинсталляция B.msi оставят файлы, добавленные в \ path \ to \ foo. Записи msiexec/x выглядят следующим образом:

(SERVER)  MSI (s) (60:08) [14:09:33:018]: Disallowing uninstallation of component: 
{BIFF} since another client exists 

(SERVER)  MSI (s) (60:08) [14:09:33:019]: Disallowing uninstallation of component: 
{BAM} since another client exists 

(SERVER)  MSI (s) (60:08) [14:09:33:019]: Disallowing uninstallation of component: 
{HARVEY} since another client exists 

(SERVER)  MSI (s) (60:08) [14:09:33:019]: Disallowing uninstallation of component: 
{ETC} since another client exists 

Так, очевидно, подсчет ссылок, правильно? Но не так, как я понимаю. Я бы подумал, что, поскольку каждый файл индивидуально завернут компонентом, а составные элементы уникальны, подсчет ссылок между двумя MSI останется одинаково отдельным/уникальным.

Это тот случай, когда последний установщик выигрывает, когда дело доходит до владения каталогом, и что право собственности на каталог обязательно мешает подсчету/удалению ссылки на файл, завернутый подсчитываемыми компонентами? Кто-нибудь имеет ссылку/документацию, которую они могут поделиться со мной по этой теме?

+0

Я обычно вижу это сообщение в пакетах от нашего клиентов, только если они имеют одинаковые идентификаторы GUID. Я предполагаю, что вы не скопировали файл проекта, используемый для сборки A.msi и повторно использовали для сборки B.msi? (так как это может привести к дублированию идентификаторов GUID компонента) –

+0

Исправить. Гиды уникальны между компонентами A & B. Единственное, что разделяется, это каталог, который B задает как свойство, считывая его из записи реестра, которую пишет A. – NickHansen

ответ

0

Существует две отдельные концепции «совместного использования».

  1. общие компоненты, это происходит, если два компонента имеют одинаковые направляющие.

  2. общие DLL-файлы, это происходит, если либо у компонента есть набор атрибутов sharedDllRefCount, либо файл уже существует.

ум, что в обоих случаях не папка является общим, но файл (или любой другой ресурс, который вы поместите в компоненте)

, если 1 и 2 смешивают, иногда файл не удаляются при удалении, то вы должны вручную удалить файл или correct the sharedDLL counter manually

относительно официальной документации вы просили я не мог найти много для этого, кроме: http://msdn.microsoft.com/en-us/library/ms709304%28v=vs.85%29.aspx

+0

Есть другое место, где можно ссылаться на файлы, которые не позволяют установщику удалить их: [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Installer \ UserData \ ... - см. Http://www.daviddeley.com/solutions/msiexec /index.htm – pi3

Смежные вопросы