는/설명 왜 일어나고 다음이해 참조 카운팅 - 윈도우 설치
1) A.msi 푸에게
2) B를 \하는 디렉토리 \ 경로 \를 생성 MSI는 레지스트리를 사용하여 foo는 \에 \ 경로 \를 발견하고 새로운 버전의 경우) B.msi가 제거 될 경우, 그것은 추가하는 추가 파일이
4
을 제거) 해당 위치3에 몇 가지 더 많은 파일을 추가합니다 B.msi가 제거되기 전에 A.msi가 설치됩니다 (주요 업그레이드). 이후의 제거 B.msi는 \ path \에 추가 된 파일을 \ 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
그래서 분명히 참조 카운트가 맞습니까? 하지만 내가 이해하는 방식이 아닙니다. 각 파일은 개별적으로 구성 요소로 랩핑되고 구성 요소 GUID는 고유하므로 두 MSI 간의 참조 계산이 유사하게 개별/고유하게 유지 될 것이라고 생각했을 것입니다.
디렉토리의 소유권과 관련하여 마지막 설치 관리자가이긴 경우이며 디렉토리의 소유권이 계산되는 구성 요소에 의해 래핑 된 파일의 참조 계산/제거와 반드시 간섭해야합니까? 누구든지이 주제에 대해 나와 공유 할 수있는 링크/문서가 있습니까?
나는 보통에서 패키지에이 메시지가 우리의 클라이언트는 동일한 구성 요소 GUID가있을 때만 해당됩니다. A.msi를 빌드하고 B.msi를 다시 빌드하는 데 사용 된 프로젝트 파일을 복사하지 않았다고 가정합니다. (이로 인해 구성 요소 GUID가 중복 될 수 있음) –
정확함. GUID는 A와 B의 구성 요소간에 고유합니다. 공유되는 유일한 것은 B가 속성으로 설정하는 디렉토리이며 A가 쓰는 레지스트리 항목에서 읽습니다. – NickHansen