2011-12-28 2 views
0

win forms 응용 프로그램 (마스터 설치 프로그램)에서 하나씩 자동으로 실행되는 2 개의 msi 파일이 있습니다. 구성된 둘 다 예를 들어 같은 위치, 에 레지스트리에 쓰기 : 나는 역순으로 제거 할 때, MSI1 레지스트리에서 제거에서 제거를 실행, 지금visual studio 2010 설치 프로젝트 - 레지스트리 제거

HKLM\Software\MyProduct\MSI1 
HKLM\Software\MyProduct\MSI2 

,하지만 MSI2가 붙어입니다 ... 거기에 아무것도 사용자 지정 작업이나 코딩없이 그것에 대해 할 수 있습니까?

+0

각 패키지에 응답합니다. 자세한 제거 로그를 작성하여 항목이 제거되지 않은 이유를 확인 했습니까? http://setupanddeployment.com/debugging/msi-log/ –

+0

다른 클라이언트가 있기 때문에 {129E4711-04E2-61E4-77C2-F6B6D234AFA7} 구성 요소 제거를 허용하지 않음 – eddyuk

답변

1

레지스트리 항목이 컴퓨터에 설치된 다른 제품과 동일한 구성 요소를 사용하기 때문에 이러한 현상이 발생합니다. 예를 들어, 기존 제품의 설치 프로젝트를 복사하고 사본을 사용하여 다른 제품의 MSI를 작성했습니다.

각 MSI가 고유 한 component names and GUIDs을 사용하는지 확인해야합니다. Visual Studio 설치 프로젝트에서는 쉽지 않습니다. 프로젝트 파일을 편집 해보십시오. 작동하지 않는다면 새로운 설정 프로젝트로 처음부터 시작하는 것이 좋습니다.

+0

구성 요소 이름의 개념을 이해하지 못합니다. 죄송합니다. 복사되지 않은 두 프로젝트는 서로 다른 이름과 다른 제품 코드를 가지고 있습니다 ... 충분하지 않습니까? 또한, 구성 요소 GUID가있는 경우 어떻게 변경합니까? 어디에서 찾을 수 있습니까? VS2010을 사용합니다. 감사합니다 – eddyuk

+0

Visual Studio에서는 쉽지 않다는 것을 언급했습니다 :). 구성 요소에 직접 액세스 할 수 없습니다. 내가 링크 된 기사를 읽었습니까? 어떻게 든 다른 MSI (다른 클라이언트)가 구성 요소를 참조합니다. 이것이 Windows Installer가 제거하지 않는 이유입니다. 다른 제품이 아니라면 MSI의 이전 버전 일 수 있습니다. 깨끗한 기계에서 테스트 했습니까? –

+0

예, 물론 제가 기사를 읽었습니다. :) 답변 해 주셔서 감사합니다. 아쉽다 포스트 빌드 스크립트 등으로 해결 방법을 시도하십시오. – eddyuk

0

좋아, VS2010 (큰 감사 Cosmin Pirvu)에서 발견하고 단지 여기에 가서 내가 여기까지 볼 2 솔루션 옵션을 넣어 것입니다. 하지만 먼저, 문제 :

내가 언급 한 바와 같이

내가 두 항목이 있습니다 HKLM \ SOFTWARE \ MyProduct \ MSI1 HKLM \ SOFTWARE \ MyProduct \

그러나 코드에서, 그들은 같은 모양 MSI2

을 MSI1 및 MSI2 때문에 HKLM \ Software \ MyProduct [ProductName]

따라서 이름은 동일하며 속성이 동일하므로 두 가지 모두에 대해 동일한 구성 요소 ID를 얻습니다! (지금까지 내가 보는 바와 같이) 당신이 할 수있는

두 가지 : 대신에 [ProductName]을 실제 제품 이름을 입력의

  1. (하드 코딩)

  2. (내가 한 것은) 레지스트리에서 항목 속성, 조건 필드에 무의미한 문자열을 입력하십시오 (실제로는 의미가 없으므로 고기가 적당한 상태가 아니므로 __과 함께 guid를 사용했습니다). 모든

감사는 제거하는 동안 자신의 레지스트리 항목의 제거해야합니다

관련 문제