2013-07-10 5 views
2

제거 할 때 기존 구성 파일에서 요소를 제거해야합니다. 관련 윅스는 다음과 같습니다.Wix에서 왜 XmlConfig를 가져 오지 못하고 제거하고 삭제해도됩니까?

<Component Id="Dynamics.exe.config" DiskId="1" Permanent="yes"> 
    <File Id="AppConfig" Name="Dynamics.exe.config" Source="$(var.ProgramFilesDir)\Microsoft Dynamics\GP2010\Dynamics.exe.config" KeyPath="yes" /> 
    <util:XmlConfig 
          Id="AppSettings" 
          Action="create" 
          ElementPath="//configuration" 
          Name="appSettings" 
          File="[#AppConfig]" 
          Sequence="1" 
          VerifyPath="appSettings" 
          Node="element" 
          On="install"/> 

    <util:XmlConfig 
          Id="AppSettings1" 
          Action="create" 
          ElementPath="//configuration/appSettings" 
          Name="add" 
          File="[#AppConfig]" 
          Sequence="2" 
          VerifyPath="add[\[]@key='AppName'[\]]" 
          Node="element" 
          On="install"/> 
    <util:XmlConfig 
          Id="AppSettingsKey1" 
          ElementPath="AppSettings1" 
          Name="key" 
          Value="AppName" 
          File="[#AppConfig]" 
          Sequence="3" /> 
    <util:XmlConfig 
          Id="AppSettingsValue1" 
          ElementPath="AppSettings1" 
          Name="value" 
          Value="MyApp" 
          File="[#AppConfig]" 
          Sequence="4" /> 
    <util:XmlConfig 
          Id="AppSettingsRemove1" 
          Action="delete" 
          ElementPath="//configuration/appSettings" 
          File="[#AppConfig]" 
          Sequence="2" 
          VerifyPath="add[\[]@key='AppName'[\]]" 
          Node="element" 
          On="uninstall"/> 

만들기 작업이 실행됩니다. 그러나 삭제/제거 작업은 실행되지 않습니다. 파일을 수정하지 않습니다. 제거하는 동안 파일을 건너 뛰는 것 같습니다.

답변

1

구성 요소 영구 특성을 예로 구성했습니다. 그러면 변경 사항이 제거 중에 유지됩니다.

거짓으로 설정하십시오.


다음 코드를 테스트했으며 요구 사항을 충족합니다.
당신은 전체 테스트 코드를 찾을 수 있습니다 here

<Fragment> 
<ComponentGroup Id="ProductComponents" 
       Directory="INSTALLFOLDER"> 
    <Component Id="CMP_ConfigFile" 
      Guid="{24D22D04-1A98-40D1-83EC-87E68A87A07C}" 
      Permanent="yes" 
      KeyPath="yes" 
      NeverOverwrite="yes"> 
    <File Id="ConfigFile" 
      src="administration.config"></File> 
    </Component> 
    <Component Id="CMP_XMLConfigInstallChange" 
      Guid="{B1B3B46A-0606-44F4-AEB6-58C5019F5C82}" 
      KeyPath="yes"> 
    <util:XmlConfig Id="Add_ElementTest" 
        File="[#ConfigFile]" 
        ElementPath="/configuration/configSections" 
        Action="create" 
        Name="section" 
        Node="element" 
        On="install" 
        Sequence="5000"> 
     <util:XmlConfig Id="Name_Test" 
         File="[#ConfigFile]" 
         ElementId="Add_ElementTest" 
         Name="name" 
         Value="TEST"></util:XmlConfig> 
    </util:XmlConfig> 

    </Component> 

    <Component Id="CMP_XMLConfig_UninstallChange" 
      Guid="{E1A01B17-247E-4717-8DC0-A923A8E90BE4}" 
      KeyPath="yes"> 
    <util:XmlConfig Id="Remove_ElementTest" 
        File="[#ConfigFile]" 
        ElementPath="/configuration/configSections" 
        VerifyPath="/configuration/configSections/section[\[]@name='TEST'[\]]" 
        Action="delete" 
        Node="element" 
        On="uninstall" 
        Sequence="5000"> 
    </util:XmlConfig> 

    </Component> 
</ComponentGroup> 

+0

내가 가진 어디 영구 = "예"영구 = "false"로 변경해야 건가요? 제거하는 동안 파일을 제거하지 않겠습니까? –

+0

아마도 귀하의 질문에 대한 오해가 있습니다. 설치 제거 중에 설치 변경 사항을 롤백 하시겠습니까? 아니면 제거시 설치 중에 수행되지 않는 변경 만하고 싶습니까? – Amitabha

+0

제거하는 동안 "삭제"작업이있는 요소를 사용하여 변경 내용을 롤백하고 싶습니다. 나는 그 행동을 해고 할 수 없다. 파일을 삭제하고 싶지 않습니다. 요약하면 AppSetting 요소 설치가 생성되면 제거 할 때 해당 요소를 제거해야합니다. 그러나 파일은 디스크에 남아 있어야합니다. –