2014-01-28 6 views
1

Installshield가 필요한 Session 매개 변수 이외의 추가 매개 변수를 사용하는 WiX 사용자 지정 동작을 실행할 수 있습니까? 예를 들어 :문자열 매개 변수를 사용하는 WiX 사용자 지정 동작을 호출하는 Installshield를 통해 사용자 지정 동작을 만들려면 어떻게해야합니까?

[CustomAction] 
public static ActionResult CustomAction1(Session session, string param) 
{ 
    session.Log(param); 
    return ActionResult.Success; 
} 

나는 그것은 함수 이름을 사용하면 Installshield 2012을 통해 입력 한 사용자 지정 작업을 만드는 오전 (두 번째 매개 변수를주의) 내가 매개 변수를 추가 할 수있는 방법을 볼 수 없습니다. MSI 데이터베이스를 통해 지원되지 않는 메커니즘이있는 경우 여기에서 해킹을하기를 바랍니다.을 공유하십시오.

필자는 Installshield Interop을 사용할 수 있었고 심지어 문자열 매개 변수로만 제한 되었기 때문에 설치 프로젝트가 특정 매개 변수를 제어하는 ​​대신 전체 설치 프로젝트의 바이너리 재사용 솔루션을 사용할 수있었습니다 커스텀 액션 코드 그 자체보다

+0

유형 1 사용자 지정 작업은 인수로 msi 핸들 (hMSI)에 대한 포인터를 사용합니다. WiX DTF CA에는 이것을 가져 와서 .NET을 호출하는 네이티브 스텁이 있습니다. Session 클래스는 이것의 캡슐화입니다. 자세한 내용은 내 블로그를 참조하십시오. http://blog.iswix.com/2008/05/deployment-tools-foundation-dtf-managed.html –

답변

3

사용자 지정 작업 메서드에 추가 매개 변수를 전달할 수 없다고 생각합니다. 그것은 Windows Installer에 의해 호출되며, 잘 정의 된 서명을 기대하는 것이 합리적입니다.

그러나 주위에서 작업 할 수 있습니다. 일부 데이터를 맞춤 작업에 전달해야하는 경우 Session 개체를 사용할 수 있습니다. 사용자 지정 작업이 즉시 경우

, 당신은 다음과 같이 사용자 정의 액션 코드에서 MSI 속성을 해결할 수 :

session["PROPERTYNAME"] = "some value"; 

을 즉시 사용자 지정 작업에서 session 객체에 속성 테이블에서 모든 속성을 해결할 수 있습니다.

사용자 지정 작업이 지연되는 경우 필요한 데이터를 전달하는 메커니즘이 있습니다. 일반적으로 즉각적인 "속성 설정"사용자 지정 동작을 작성하고 지연된 CA 이름과 같은 속성에 필요한 데이터를 전달해야합니다.

<!-- This is a subsidiary CA, note the property name is equal to the deferred CA name --> 
<CustomAction Id="SetForMyDeferredCA" Return="check" Property="MyDeferredCA" Value="source=[SourceFolder];target=[TargetFolder]"/> 
<!-- And this is the deferred CA which does the job --> 
<CustomAction Id="MyDeferredCA" Return="asyncWait" Execute="deferred" BinaryKey="CustomActions" DllEntry="MyMethodName" /> 

그리고 이연 CA 내부에서이 같이 전달 된 데이터를 처리 할 수 ​​있습니다 : 샘플은 일반적으로 훨씬 더 명확한 단어로 성형보다이 도움이

var source = session.CustomActionData["source"]; 
var target = session.CustomActionData["target"]; 

희망을.

+0

수정. 당신은 할 수 없습니다. 그것은 의도적으로입니다. –