2012-07-08 3 views
3

사용자 구성이 레지스트리에 저장되는 이전 응용 프로그램을 유지 관리하고 있습니다. 제거 할 때 뒤에 남습니다. 지금 WiX에서 설치 프로그램을 다시 쓰려고합니다.레지스트리에 기본값이 설정되어 있지 않은 경우

설치자가 없으면 레지스트리에 기본값을 추가해야합니다. 그렇지 않으면 기존 값을 그대로 두어야합니다.

나는 WiX에서 이것을 수행하는 방법을 생각하고 있었다. 그리고 제가 생각해 낸 해결책은 다소 성가신 일입니다.

<Property Id="MY_PROPERTY"> 
     <RegistrySearch Root="HKLM" Key="SOFTWARE\MyProduct" Name="MyProperty" Type="raw" /> 
    </Property> 

    <CustomAction Id="ca.SetDefaultValue" Property="MY_PROPERTY" Value="DefaultValue" /> 

    <InstallExecuteSequence> 
     <Custom After="RegistrySearch" Action="ca.SetDefaultValue">Not MY_PROPERTY</Custom> 
    </InstallExecuteSequence> 

    <Component Id="c.Registry"> 
     <RegistryValue Root="HKLM" Key="SOFTWARE\MyProduct" Name="MyProperty" Type="string" Value="[MY_PROPERTY]" /> 
    </Component> 

따라서 레지스트리 값을 찾기 위해 레지스트리 검색을 수행하십시오. 설정되지 않은 경우 예약 된 사용자 정의 작업을 사용하여 기본값으로 설정하십시오. 그런 다음 "평소와 같이"값을 만듭니다.

더 원활하게 생각할 수있는 사람은 누구입니까?

Installed과 같은 편리한 변수를 사용할 수는 없으므로 가치가있을 수 있으므로 이전에 제거 된 버전으로 남았습니다.

답변

8

Wix Remember Property pattern으로 시작하지만 한 단계 더 멀리하십시오. AppSearch이 실행되고 REMEMBERME 속성이 값을 얻거나 가져 오지 않으면 REMEMBERME="" 인 경우 SetProperty 사용자 지정 작업을 사용하여 기본값을 할당하십시오.

나는 한 걸음 더 멀리 나아 간다. 나는 "재산 우선"이라고 부르는 개념을 가지고있다. 기본적으로 재산 가치를 얻는 방법에 대한 우선 순위 목록입니다.

최고 최저로 명령 행에 전달 된 UI

  • 공개 특성 중 입력

    1. 속성
    2. 속성은 Property 테이블에 정의 AppSearch
    3. 기본값 중에 발견

    즉, 처음으로 침묵하는 insta 명령 줄에서 전달 된 속성이없는 경우 등록 정보 표의 기본값을 사용해야합니다.

    두 번째로 명령 줄에서 전달 된 속성없이 자동 설치하는 동안 기억 된 값이 기본값보다 우선해야합니다. (다른 경우)

    두 번째 자동 설치 중 명령 줄에서 전달 된 속성은 재정의 값으로 간주되어야하며 기본 값과 기억 된 값보다 우선합니다.

    대화식 설치 중에 위 규칙이 적용되고 UI에 해당 값이 표시되어야합니다. 사용자가 값을 변경하면 이것이 최종 값입니다.

    다양한 맞춤 동작을 구현하는 방법에 대해 알려 드리겠습니다. 일반적으로 임시 실행 계획과 실제 계획 및 일련의 Set Property CA가 포함되어 있습니다. 적절한 실행 일정과 조건에 따라 원하는 작업을 수행 할 수 있습니다.

  • +0

    감사합니다. Yan, 감사합니다! –

    +2

    어딘가에 "속성 우선 순위"예제 구현이 있습니까? 저는 지금 OP와 똑같은 것을 고민하고 있습니다. 당신이 제안한 것을 정확히 구현하기를 희망합니다. –

    1

    구성 요소의 레지스트리 값에 명시 적으로 keypath=yes을 설정하지 않았습니다.그러나이 경우 wix는 keypath로 사용할 수있는 첫 번째 하위 항목을 선택합니다. 부터 wix component element documentation :

    키 패스는 구성 요소 또는 하위 레지스트리 값 또는 파일에 대해 '예'로 설정되지 않은 경우

    , 윅스는 순서대로 구성 요소에서 자식 요소를보고 자동으로 하나를 선택하려고합니다 그 중 핵심 경로는

    따라서 레지스트리 값은 해당 구성 요소를 설치하는 구성 요소의 keypath입니다. 즉, 레지스트리 값이 이미있는 경우 구성 요소가 설치되지 않습니다. 내가 알 수있는 한, 그것은 당신이 원하는 행동입니다.

    관련 문제