2013-02-19 4 views
2

WPF를 사용하여 관리되는 wix 부트 스트 래퍼를 작성했습니다. 실제 설치 단계를 수행하려면 여러 msi/exe와 배치 파일을 연결해야합니다. 각 패키지의 실행 중에 wix 부트 스트랩퍼

<Chain> 
<MsiPackage SourceFile="xxx"/> 
<ExePackage Id="Test" SourceFile="..\TestBatch.bat" Vital="yes"/> 
<MsiPackage SourceFile="yyy"/> 
</Chain> 

는 메시지 MSI/EXE 패키지/배치 파일이 현재 실행되고 있는지를 나타내는 (바람직 부트 스트 래퍼에서 UI)를 표시한다. 요약하면 부트 스트 래퍼에 ProgressText가 필요합니다. 어떻게해야합니까?

또 다른 질문 : 모든 msi가 부트 스트 래퍼 exe에 패키지되는 것을 원하지 않습니다. 그 이유는 다음과 같습니다. msi가 변경 될 때마다 업데이트 된/수정 된 msi 만 제공하고 전체 부트 스트 래퍼는 exe가 아닙니다. 이것을 할 수있는 방법이 있습니까?

답변

5

두 답변 한 제안 :

  1. 가 MsiPackages 동안 다시 메시지를 얻으려면이 인스톨되어 BootstrapperCore.ExecuteMsiMessage 이벤트를 처리합니다. 이벤트는 찾고있는 데이터가 포함 된 Message를 포함 할 것입니다.

  2. 패키지 압축 방법을 구성하려면 Compress 특성을 사용하십시오. Bundle/@Compress='no' 전체를 표시하거나 각 패키지 Compress='no' (또는 그 방법으로 가고 싶은 경우 'yes')을 표시 할 수 있습니다.

-

제안 : 그래서 ExePackages가 이미 존재하거나없는 경우 알 굽기 ExePackages에 DetectCondition을 추가해야합니다.

+0

감사합니다. Rob. 위의 두 가지 제안 모두 내 목적에 매우 잘 부합합니다. 내 ExecPackage에서 부트 스트 래퍼로 메시지를 전달할 수 있는지 알고 싶습니다. 상황은 다음과 같습니다. 실행될 배치 파일이 몇 개 있으며 ExecPackage를 사용하여이 작업을 수행하고 있습니다. 일괄 처리의 일부 결과에 따라 사용자에게 적절한 메시지를 표시하고 계속/중단/다시 시작하는 옵션을 표시하고 싶습니다. – microsoftprogrammer

+0

위의 내 의견과 계속해서 ... 생각합니다. 메시지를 레지스트리 항목으로 저장하고 ExecutePackageComplete 이벤트에서 검색합니다. 이것을 할 수있는 다른 방법이 있습니까? – microsoftprogrammer

+3

실행 파일은 "Embedded Burn 프로토콜"을 구현하여 풍부한 진행 상황과 오류 메시지를 보낼 수 있습니다. 그것은 문서화되어 있지 않으므로 프로토콜을보기 위해 번 (Burn) 코드를 거쳐야 할 필요가 있습니다.하지만 거기에 있으며 정확히 원하는 것을 얻을 수 있습니다. WiX 소스 코드의 "bundlerunner".csproj도 도움이 될 수 있습니다. –

0
private void ExecuteMsiMessage(object sender, ExecuteMsiMessageEventArgs e) 
{ 
    lock (this) 
    { 
     switch (e.MessageType) 
     { 
      case InstallMessage.ActionStart: 
      { 
       string[] entireMessage = e.Message.Split(':'); 
       string[] actionMessage = entireMessage[3].Split('.'); 

       if (actionMessage[1].Trim() != "") 
       { 
        PackageMessage = actionMessage[1]; 
       } 
       break; 
      } 
     } 

     e.Result = MainWindowViewModel.Canceled ? Result.Cancel : Result.Ok; 
    } 
} 
+1

에 오신 것을 환영합니다. 이 답변에는 2 가지 문제가 있습니다. 1) 코드가 올바르게 형식화되지 않았으며 2)이 대답은 코드 전용입니다. 1.이 코드는 질문에 대답 할 수 있지만 이유 및/또는이 코드가 질문에 어떻게 대답하는지에 대한 추가 컨텍스트를 제공하면 향상됩니다. 그것의 장기적인 가치. –

+0

서식을 개선하기 위해 게시물을 편집했습니다. 귀하의 답변에 약간의 문맥을 추가하십시오. – Tom