2014-05-20 4 views
0

버전 1.1을 설치했습니다. 버전 1.2로 업그레이드를 만들었습니다. LockLib.dll 제거 및 교체되지 않는 업그레이드하는 동안업그레이드 후 파일이 누락되었습니다.

<Component Win64="yes" Id="cmpFILE1" Guid="*"> 
    <File Id="filFILE1" KeyPath="yes" Source="$(var.BasePathCMP)\Performance.dll" /> 
</Component> 
<Component Win64="yes" Id="cmpFILE2" Guid="*"> 
    <File Id="filFILE2" KeyPath="yes" Source="$(var.BasePathCMP)\LockLib.dll" /> 
</Component> 

: 두 제품에 나는이 개 파일이 있습니다. 1.2의 클린 인스톨에서는 존재합니다. 무엇이 문제입니까?

답변

0

설치 패키지가 업그레이드를 수행 한 후 RemoveExistingProducts 작업이 실행되고 있기 때문에 이러한 이유 중 하나가 발생합니다. 이 경우 MSI는 파일이 이전 버전과 동일 함을 감지하고 제거합니다. 당신은 할 수 : RemoveExistingProducts

    1. 변경 순서는 I 옵션 하나를 권 해드립니다 공유

    에 DLL을 설정합니다.

    RemoveExistingProducts Element

  • 0

    내가 생각하고 당신은 모두 MSI의에서 나이가 업그레이드되는 파일에 대한 GUID를 구성 요소를 변경했습니다. RemoveExistingProducts가 설치 말미에있을 때 업그레이드는 병합과 같이 작동하며, 필요한 경우 파일을 덮어 쓰고 공유 구성 요소 지침에 대한 참조 수를 증가시킵니다. 결국 REP는 이전 제품을 제거하고 구성 요소 guid의 참조 횟수를 감소시킵니다. guid에 대한 클라이언트가 더 이상 없으면 제거됩니다. "공유 된"파일의 GUID가 변경되면 더 이상 클라이언트가 없어지고 제거됩니다. 마지막 REP는 구성 요소 공유 규칙을 따라야하지만 업그레이드를 시작할 때 REP를 순서대로 지정하지 않아도된다는 것입니다.

    향후 참조 할 수 있도록 예제를 추가하고 있습니다.

    첫 번째 설치에는 3 개의 파일 A, B, C 및 3 개의 guid (1, 2 및 3)가 있다고 가정하면 업그레이드에는 동일한 3 개의 파일이 있지만 GUID는 1, 2 및 8입니다. REP가 업그레이드가 끝나면 이전 제품보다 먼저 설치됩니다. Guids 1과 2는 ref 카운트를 1에서 2로 증가시킵니다. Guid 3은 1로 유지됩니다. 그러면 이전 제품이 제거됩니다. Guids 1과 2는 1까지 카운트 다운되며, 여전히 사용 중이므로 구성 요소 guid에 첨부 된 파일이 유지됩니다. Guid 3은 0으로 내려 가고 ref 수는 없으므로 구성 요소가 제거되지만 파일 C에 첨부되어 있으므로 방금 설치 한 경우에도 C가 제거됩니다.