2012-07-30 4 views
5

깁스 설치 프로그램에서 꽤 긴 CustomAction이 있는데 작업이 실행되는 동안 'Status : ...'텍스트를 변경할 수 있기를 원합니다. 진행 상황 및 내부 상태에 대한 업데이트 사용자 지정 동작의 progresstext 설정하는 방법을 알고 있지만 원하는 사용자 지정 동작을 실행하는 동안 진행률 텍스트를 동적으로 변경할 수 있습니다.WiX : CustomAction 중에 상태 텍스트를 동적으로 변경합니다.

답변

8

지연된 사용자 지정 동작은 MsiProcessMessage 함수를 호출 할 수 있습니다. 그런 다음 INSTALLMESSAGE_ACTIONSTART, INSTALLMESSAGE_ACTIONDATA 및 INSTALLMESSAGE_PROGRESS를 사용하여 메시지를 UI에 게시 할 수 있습니다.

또 다른 가능성은 사용자 지정 작업을 더 작은 사용자 지정 작업으로 나눠서 ProgressText (ActionText 테이블)를 사용하여 여러 설치 단계를 설명하는 것입니다. 각 CA에게 단일 책임을 부여하십시오.

때때로 CA가 너무 많은 작업을 수행 할 때 롤백을 올바르게 계획하기가 어렵습니다.

using (Record record = new Record(0)) 
    { 
     record.SetString(0, "foo"); 
     session.Message(InstallMessage.ActionData, record); 
    } 

using 문은 기본 MSI 핸들을 확보하기 위해 기록을 처분 :

Obtaining Context Information for Deferred Execution Custom Actions

MsiProcessMessage function

C#을/DTF를 사용하여이 같이 보입니다. 레코드의 필드 수와 데이터 설정 방법은 ActionText 테이블에 정의 된 템플릿에 따라 달라집니다.

+0

감사합니다. 나는 이것이 내가 찾고있는 것이라고 믿는다. 내 사용자 지정 작업은 C#으로 작성되었습니다. DTF에 대한 설명이 있습니까? –

+0

DTF doco의 모든 클래스 및 멤버는 기본 MSI API를 참조하며 도움말 파일의 검색 탭을 사용하여 찾을 수 있습니다. 샘플을 제공하기 위해 내 대답을 업데이트하겠습니다. (당신은 당신이 CA를 프로그래밍하고있는 것을 언급하지 않았다.) –

+0

고마워. 매력처럼 작동 :) –

0

크리스 올바르게 CA에서 ActionData에 메시지를 보내는 방법을 설명하지만 installshiled를 사용하는 경우, 당신은 SetupProgress 대화 상자에서 레이블을 만들고 그것에 ActionData 텍스트 이벤트를 구독 확인했다. 간단히 말해 레이블에 대해 ActionText 이벤트를 작성하는 것만으로는 ActionText 테이블에서 작성한 CA 설명 만 표시되기 때문에 충분하지 않습니다.

관련 문제