2015-02-07 7 views
0

더 이상 작동하지 않는 것을 발견했을 때 설치에 새 기능을 추가하고있었습니다.설치 제거시 Wix 설치 프로그램이 파일을 제거하지 않음

구성 요소 즉, 응용 프로그램 폴더에 설치된 activex와 다른 폴더에 설치된 다양한 dll로 구성되는 선택적 기능이 있지만 프로그램을 제거 할 때 응용 프로그램의 폴더에 남아있는 유일한 파일이며 필터도 남아 있습니다 그들의 별도의 폴더에.

이것은 ActiveX와 dll을 모두 제거하는 데 사용되며 제거가 끝날 때 두 폴더를 모두 삭제합니다.

비슷한 기사에 제안되었지만 아무 소용이없는 것처럼 ActiveX (열을 가진 .wxs 파일을 다시 생성 함)와 모든 DLL의 이름을 바꾸는 데 몇 시간을 보냈습니다!

나는 그것을 얻지 못했고, 내 응용 프로그램이 제거되고, 내 Windows 서비스가 중지되고 등등 ...하지만 activex 및 이러한 dll은 그냥 삭제되지 않습니다!

문제가있는 파일의 동작이 null로 설정되어 있습니다. 기능 부분에서 activex와 dll을 연결하는 것은 null이지만 다른 2는 괜찮습니다!

MSI (s) (C4:C0) [04:01:07:040]: Doing action: InstallValidate 
MSI (s) (C4:C0) [04:01:07:040]: Note: 1: 2205 2: 3: ActionText 
Action ended 04:01:07: KillAgentMonitor. Return value 1. 
Action start 04:01:07: InstallValidate. 
MSI (s) (C4:C0) [04:01:07:040]: PROPERTY CHANGE: Deleting 
MsiRestartManagerSessionKey property. Its current value 
is '86b17c5ff2f8de4d9424198f445cc8d1'. 

MSI (s) (C4:C0) [04:01:07:040]: Feature: Feature2; Installed: Absent; 
Request: Null; Action: Null 

MSI (s) (C4:C0) [04:01:07:040]: Feature: Feature3; Installed: Local; 
Request: Absent; Action: Absent 

MSI (s) (C4:C0) [04:01:07:040]: Feature: Feature1; Installed: 
Local; Request: Absent; Action: Absent 

다음을 삭제할 파일 :

다음
MSI (s) (C4:C0) [04:01:07:040]: Component: CMP_File1; 
Installed: Local; Request: Absent; Action: Absent 

MSI (s) (C4:C0) [04:01:07:040]: Component: CMP_File2; 
Installed: Local; Request: Absent; Action: Absent 

는 DLL 파일 :

MSI (s) (C4:C0) [04:01:07:056]: Component: CMP_File53_DLL; Installed: 
Local; Request: Null; Action: Null 

MSI (s) (C4:C0) [04:01:07:056]: Component: CMP_File54_DLL; Installed: 
Local; Request: Null; Action: Null 

MSI (s) (C4:C0) [04:01:07:056]: Component: CMP_File55_DLL; Installed: 
Local; Request: Null; Action: Null 

당신이 작업이 모두 널 (null)입니다 볼 수 있듯이 ??

그리고 마지막으로 액티브 :

MSI (s) (C4:C0) [04:01:07:056]: Component: CMP_MyActiveX_DLL; Installed: 
Local; Request: Null; Action: Null 

또한 널!

내 액티브 X는 C에 설치 : \ 프로그램 파일 (86) \ mycompany \ 클라이언트와 DLL은 C에 설치됩니다 나는 또한 일부 기사를 읽을 \ WINDOWS

\ 그 이유 중 하나는이 문제 수도 구성 요소가 레지스트리에 정보를 남겼을 수 있지만 여러 가지 특정 임의의 GUID를 확인했지만 아무 것도 찾을 수없는 경우가 발생합니다.

다른 기사에 대한 언급은 dll에 대한 참조 횟수 때문일 수 있으며 이러한 것은 SharedDlls 레지스트리이지만 다시는 그렇지 않을 수도 있습니다. 나는 점검했고 아무것도 레지스트리에 없었다.

또한 VM을 지우고 신선한 것을 다시 작성했지만 여전히 좋지는 않습니다.

저는 다음에 할 수있는 것에 관해서는 완전히 아이디어가 없습니다. 액션이 null 인 이유에 대한 다른 제안 사항이 있습니까?

내 로그에서 특정 항목을 찾고 싶습니까?

감사합니다.

UPDATE는

나는 결국이 문제의 원인을 알아 냈어. 잘못된 GUID, 높은 버전, 참조 횟수, Windows 폴더에있는 등의 제안 된 문제와 관련이 없습니다.

기본적으로 모든 클라이언트에 제공되지 않는 명령 줄 매개 변수 (예 : INCLUDEFILTERS = 1)가 제공되는 경우 내 기능 중 하나가 기능 트리보기에만 표시됩니다.

코드는 : 명령 라인을 통해 제공

1. 이제,이 문제와 관련되는 것으로 보인다 설정하지 않는 기본 INCLUDEFILTERS 바이

<Feature Id="Feature2" Title="Filters" Level="10" Description="Select 
this option to install optional filters" TypicalDefault="install" 
InstallDefault="local"> 
    <ComponentGroupRef Id="Feature2Components"/> 
    <!--<Condition Level="0"> 
     <![CDATA[(INCLUDEFILTERS = 0)]]> 
    </Condition>--> 
</Feature> 

0이다. 테스트를 진행할 때 INCLUDEFILTERS = 1을 사용하여 액티브 X와 필터를 설치하지만 제거를 호출하면 해당 값을 인식하지 못하고 기본값 0을 사용하므로 아무것도 수행하지 않습니다.

위의 내용을 바탕으로 제거 할 때 어떻게 든 기능 트리를보고 그것이 선택되었는지 여부를 확인해야합니다.

설치시 INCLUDEFILTERS가 1로 설정되었음을 감지하고 제거 할 때 내부 변수를 1로 재설정 할 수 있습니까? CDATA 내에서 'Installed'를 사용해야합니까, 아니면이를 수행 할 수있는 다른 방법이 있습니까?

솔직히 말해서 나는이 값을 알고 있으면 차이를 만들지 모르겠지만 지금은 그렇게 할 것이라고 확신합니다.

CDATA에서 'Installed'조건을 시도해보고 대답을 업데이트하겠습니다.

감사합니다.

+0

이 목록을 점검 했습니까? http://blogs.msdn.com/b/rflaming/archive/2005/07/07/439810.aspx 또한 귀하의 가이드에 대한 "{guid} 제거 제거"를 찾으십시오. – PhilDW

+0

안녕하세요, 모든 링크가이 블로그에서 죽었지 만 문제는 잘 부분적으로 파악됩니다! 나는 Bob의 대답에서 설명 할 것이다. – Thierry

+0

링크가 오래되었을 수도 있지만 확실히 "해당 구성 요소에 false로 평가되는 조건이 있습니다." 다소 관련이있는 것 같습니다 :) – PhilDW

답변

1

각 null 조치 구성 요소의 GUID에 대한 로그를 검색하십시오. Windows는 구성 요소를 떠나는 이유를 기록합니다. Windows 및 Windows 시스템 디렉토리에 설치된 파일은 일반적으로 DLL hell을 완화 할 수있는 영구적 인 파일입니다. Orx의 WiX 저작 또는 .msi의 Component table에서 영구 구성 요소를 확인할 수 있습니다.

+0

안녕하세요, 당신이 제안한 것을했는데 그것이 생각 나게하는 설치 제거 로그에서 아무 것도 찾지 못했습니다 ... 내 머리를 긁고 내 윅스 문제를 겪고 여러 가지를 시도하는 시간이 지나면 나는 액티브 X와 필터는 명령 줄을 통해 매개 변수가 제공되는 경우 조건부로만 활성화되는 기능의 일부라는 것을 기억하십시오! 업데이트 된 답변보기 (그리고 새로운 질문!) 일단 조건을 제거하면 모든 것이 예상대로 제거됩니다. 어쩌면 당신은 새로운 질문에 대한 제안을 가지고있을 것입니다. 감사. – Thierry

+0

제거 중에 기능을 활성화해야합니다. http://www.joyofsetup.com/2008/05/16/make-sure-features-are-always-enabled-so-they-can-be-removed/를 참조하십시오. –

+0

저 밥 주셔서 감사합니다 !! 단지 내가 그것을 더 일찍 발견 했더라면 좋겠다고 생각한다! :). 그것은 나에게 많은 시간을 절약 해 주었을 것이다.Remove를 사용하는 것이 더 낫지 않습니까? 아니면 제가 대답에서 언급 한 방식으로 괜찮습니까? 감사. – Thierry

2

실제로이 특정 기능에 대한 조건과 관련이 있습니다. 앞서 언급했듯이 설치된 시간에 ActiveX 및 필터를 포함하는 명령 줄 매개 변수를 제공합니다. 제거 할 때, 그래서이 문제를 해결하려면이 매개 변수를 설치 시간에 전달 된 것을 감지하지 못하는, 단순히 다른 조건을 추가 :

<Feature Id="Feature2" Title="Filters" Level="10" Description="Select 
    this option to install optional filters" TypicalDefault="install" 
    InstallDefault="local"> 
    <ComponentGroupRef Id="Feature2Components"/> 
     <Condition Level="0"> 
     <![CDATA[(INCLUDEFILTERS = 0)]]> 
     </Condition> 
    <Condition Level="10"> 
     <![CDATA[(INCLUDEFILTERS = 1 OR (Installed AND NOT 
       UPGRADINGPRODUCTCODE))]]> 
    </Condition> 
    </Feature> 

수치는 코드의 같은 간단한 라인을 파악하는 시간이 걸렸다! 희망적으로 이것은 다른 사람들을 도울 것입니다!

관련 문제