2017-10-13 16 views
0

WiX 3.8 (최신 안정 버전)을 사용하고 있는데 구성 파일을 으로 가져올 수 없습니다. 제거 및 다시 설치 중 주요 업그레이드.업그레이드 중 구성 파일 상태를 유지하는 WiX 3.8

이렇게 많은 질문이 있습니다. 답변을 많이 쓰면 this 사이트로 연결되는 것이 좋습니다. 그러나, 주어진 제안은 (나를 위해) 작동하지 않습니다.

사이트에서 말하는 내용은 각 구성 파일을 자체 구성 요소에 배치하고 파일을 구성 요소의 주요 경로로 표시하는 것입니다. 이 같은 것은 :

<Component Id="config.xml" 
      Guid="*" 
      Directory="folder_where_config_file_lives"> 
     <File Id="config_file" 
       Source="$(var.Project.ProjectDir)bin\Release\configFile.xml" 
       KeyPath="yes"/> 
    </Component> 

위대한. 다음은 액션, 그래서 같은 InstallFiles 후 RemoveExistingProduct 일정을 말한다 : 내가 컴파일 할 때

<InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallFiles"/> 
</InstallExecuteSequence> 

문제는, 내가이 오류가 있습니다 :

The InstallExecuteSequence table contains an action 'RemoveExistingProducts' that is declared in two different locations. Please remove one of the actions or set the Overridable='yes' attribute on one of their elements.

This person

이 또한 문제가 있었다, 그러나 그는 그것을 해결 한 것으로 보인다. 그 효과적으로 "서로 다른 두 위치"선언 문제를 제거당한에 스케줄링 속성을 추가하고 그것을 고정 무엇 (내 생각) :

 <MajorUpgrade Schedule="afterInstallInitialize" 
         DowngradeErrorMessage="A newer version of [ProductName] is already installed."/> 

그래서 난합니다 ( 일정 변경 속성을 대체 할 때 어떤 속성을 포함하고 있습니다.) 작동하지 않을뿐만 아니라 업그레이드 중에 구성 파일이 제거되고 교체됩니다. 내 프로젝트에는 많은 MSI가있는 부트 스트 래퍼가 있으며, 구성 파일이 포함 된 MSI 이후의 모든 MSI 설치를위한 로그 파일을 받지만 설치되지 않습니다.

다음과 같이 반복하십시오. 로그에 MSI가 설치되어 있다고 표시되지만 실제로는 설치되어 있지 않습니다. 아마도 로그 파일에서 찾을 수없는 롤백이있을 수 있지만 설치와 비슷한 MSI 로그 파일을 읽으면 swimminly가됩니다.

에 대한 설정 파일을 알지 못하는 사람이 있습니까?은 Wix 3.8의 주요 업그레이드 중에 제거 및 재설치되지 않습니까? 내가 위에서 언급 한 것은 내가 찾을 수있는 인터 웹에서 얻은 최상의 정보이지만, 거의 아무 것도 쓸모가 없다.

답변

2

MajorUpgrade 요소에는 RemoveExistingProducts 작업 일정을 포함하여 필요한 모든 것이 있습니다. RemoveExistingProducts를 시퀀스에도 추가하지 마십시오.

RemoveExistingProducts는 InstallFiles 이후이어서는 안됩니다.

RemoveExistingProducts가 (예 : InstallInitialize 또는 InstallValidate 이후로) 초기 순서가되어 https://msdn.microsoft.com/en-us/library/windows/desktop/aa371197(v=vs.85).aspx

당신이 효과적으로 이전을 제거하는 것을 의미한다 : 즉 어디에서 오는지는 분명하지 않다,하지만 그 말을하지 않는 문서는 선택입니다 제품을 설치하고 새 제품 업그레이드를 설치하면 구성 파일을 제거하고 업그레이드에 설치 파일을 설치한다는 의미입니다. 구성 파일을 유지하는 방법은 REP afterInstallExecute를 예약하는 것입니다. 결과적으로 업그레이드는 기본적으로 새로운 제품의 이전 버전 설치에 대한 버전 규칙 설치입니다.버전 규칙은 업데이트 된 바이너리를 원한다면 파일 버전을 업데이트해야한다는 것을 의미합니다. 데이터 파일 (설정 파일)에 대한 좋은 소식은 업데이트 된 데이터 파일이 교체되지 것입니다 : 오래된 제품은 다음 파일의 결과 집합을 유지, 제거됩니다

https://msdn.microsoft.com/en-us/library/windows/desktop/aa370531(v=vs.85).aspx

.

그래서 MajorUpgrade에서 REP afterInstallExecute의 시퀀싱이 원하는 것으로 보입니다. WiX에서 자동 생성 * 지침이있는 경우 자동으로 구성 요소 규칙을 따라야한다는 경고가 있습니다.

+0

할렐루야! 귀하의 제안이 효과가 있습니다! 당신이 준 링크 ... MSDN은 독자가 많은 용어를 이해하고 있다고 가정하는 것 같습니다. "아기처럼 머리에 쓰러 뜨린 사람들을위한 Windows Installer"교과서 나 추천할만한 것이 있습니까? 나는 ORCA를 가지고 있으므로 시퀀스를 볼 수는 있지만 처음부터이 재료를 배울 수있는 곳을 찾지 못했습니다. (닉 라미레즈 교과서, 멍청한 놈만큼이나 깊이있는 것은 아닙니다. 정말로 발전시켜야 함). 이걸 어디서 배웠 니? (Snarky 대답이 기분 좋게 받아 들여졌습니다.) – Bob

+0

Windows Installer에 대한 확실한 안내서를 얻을 수 있는지 알아 보려면 이전이지만 여전히 관련이 있으며 기본 사항을 설명합니다. :) – PhilDW

+0

나는해야한다. 고맙습니다. – Bob

0

IMO, Windows Installer는 XML을 캐치하기 전에 만들어졌으며 구성 요소 규칙이이를 잘 처리하지 못합니다. 내가 선호하는 것은이 행동과 싸우지 않는 것입니다. 하나의 설정 파일을 설치 프로그램이 소유하고 안전하게 덮어 쓸 수 있도록 응용 프로그램을 작성하고 사용자 구성 데이터를 보유하고 MSI가 알지 못하는 다른 구성 파일을 작성할 수 있습니다. 이 두 번째 파일은 첫 번째 파일을 덮어 씁니다.

+0

제안에 감사드립니다. PhilDW의 대답은 효과가있는 것처럼 보이지만 장기적으로는 그렇지 않을 수 있습니다. 나는 제안에 따라 결국 끝나야 할지도 모릅니다. (필자는 CanX WiX를 얻을 수 없어서 WiX에서 해답을 얻는 문제를 해결하기 위해 맞춤 작업을 작성하는 경우가 많습니다. 솔루션). 그러나, 당신의 제안은 나에게 질문을 남겨 둡니다 : 어떻게 MSI는 파일에 대해 "모른다"? 나는 당신이 당신의 포스트에 조금을 확장하는 것을 요구하고 있다는 것을 짐작한다. 그렇게 할 수 있을까요? – Bob

+0

응용 프로그램 또는 MSI가 만든 사용자 지정 동작 대신 사용자 지정 동작으로 만들어진 파일입니다. –

+0

이것을 고려해보십시오. 설정에 하나의 키 값 쌍이 있다고 가정 해 봅시다. 사용자가 이러한 값 중 하나를 설정한다고 가정 해 보겠습니다. 이제 새로운 빌드가 추가 키 값 쌍을 추가합니다. 업그레이 드하는 동안 설치 프로그램은 어떻게해야합니까? 새 KVP를 덮어 쓰고 가져 오지 만 사용자 데이터를 잃거나 덮어 쓰지 않고 사용자 데이터를 저장하지만 새 KVP를 가져 오지 못합니까? 델타를 수집하고 파일을 대체 한 다음 다시 적용하기 위해 복잡한 사용자 정의 작업을 작성하거나 두 파일에 데이터를 저장하여 전체 문제를 제거 할 수 있습니다. 이해가 되니? –