2011-04-18 5 views
0

이 같은 속성 값 통과 손상 얻을 :속성 값은

property1=value1;property2=value2 

하지만 때로는 값에 포함을 ';' 기호를 사용하면 WiX가 속성 문자열을 잘못 deserialize합니다. 큰 따옴표로 묶어서 값을 시도했습니다.

property1="value1";property2="value2" 

그러나 도움이되지 않았습니다. 그러면 어떻게 처리 할 수 ​​있습니까? 나는 우리가 다른 일이 질문을보고 생각

+0

나를 위해 잘 작동하는 것 같습니다. –

답변

1

답글에 to request이 있습니다. 속성 값에서 세미콜론을 두 번 사용하려면 JScript CA를 사용할 수 있습니다.

<CustomAction Id="DoubleSemiColons" Script="jscript"> 
    <![CDATA[ 

    var s = Session.Property("property2"); 
    var re = /;/g; 
    var r = s.replace(re, ";;"); 

    Session.Property("property2") = r; 

    ]]> 
</CustomAction> 
+0

감사합니다. 많이, 나는 그것을 테스트하고 작동합니다! 그런데 왜 변수 값을 enquote하지 않았습니까? 나는 이것이 문자열 값이라고 생각했지만, 그것을 enquote 할 때 작동을 멈춘다. –

+1

@ Bogdan0x400're'는 문자열이 아니며, 정규 표현식 pattern_이며,'g'는's'의 모든;를'_'로 대체하기위한 플래그이며, 첫 번째 어커런스 만 두배가됩니다. –

+0

고마워요, 알렉세이 –

3

당신이에 속성을 설정하는 유형 51 사용자 지정 작업을 사용하는 방법을 이해하려면, 더 자세한 설명은

(짧은 대답은;로 탈출입니다) DTF 사용자 지정 작업에 의해 직렬화 할 것은, 결과는 것이

var cad = new CustomActionData(); 
cad.Add("property1","myvalue"); 
cad.Add("property2","my;value"); 
Console.WriteLine(cad.ToString()); 
Console.Read(); 

같은 작은 콘솔 응용 프로그램 쓰기 :

속성 1 = myvalue, property2을 = 내 ;; 값

이렇게하면 모든 시나리오의 형식을 지정하는 방법을 알 수 있습니다. 그러나 결국 유형 51 CA만으로는 충분하지 않은 상황에 처할 수도 있습니다. 이 경우, 당신은 CustomActionData 컬렉션을 구축하기 위해 immeadiate CA를 작성한 다음 Session.DoAction 메소드를 사용하여 지연된 CA가 CustomActionData를 전달하는 일정을 세울 수 있습니다.

+0

속성을 사용자 지정 작업에 전달하기 전에이 속성을 어떻게 이스케이프합니까? –

+0

@ Bogdan0x400 Christopher가 제공 한 예제에는 질문에 대한 답이 있습니다. 속성 값에';'가 포함되어 있으면 속성 값에';; '가 포함되도록 두 배가되어야합니다. –

+0

@Alexey Ivanov 예를 들어, 사용자가 많이 포함 된 연결 문자열을 입력합니다. 텍스트 상자 입력을 기반으로하는 해당 속성에 세미콜론을 어떻게 추가합니까? 거기에 대한 기본 제공 사용자 지정 작업이 있습니까? 사용자 지정 작업에 세미콜론을 추가 할 수 없습니다. 속성을 수정하려고하면 잘못 serialize되기 때문입니다. –