2014-03-27 4 views
2

환영 대화 상자 전에 예약 된 사용자 지정 대화 상자를 만들고 싶습니다. 커스텀 대화 상자에는 비트 맵 컨트롤과 텍스트 컨트롤 그리고 취소 (SpawnDialog-> CancelDlg)와 다음 버튼 (NewDialog-> WelcomeDlg)이 있습니다. 고급 맞춤 동작이나 설정 속성이 없습니다.UI 시퀀스를 어지럽히 지 않고 welcomeDlg 전에 사용자 지정 대화 상자를 삽입하는 방법

  • 윅스 버전 : 3.8
  • 사용 WixUI_InstallDir.wxs

은 이미 다음과 같은 질문 발견 대답으로, 질문자 가져 표시된는 비록 How can I insert custom dialog before WelcomeDlg? 을 동일한 오류 메시지 (주석을 참조) 저 대답의 해답을 사용합니다. 따라서이 사본을 복제본으로 표시하지 마십시오.

다음 코드 (WixUi_InstallDir.wxs에서 dialogRef와 customDialog.wxs에서) 구축 않으며, 사용자 정의 대화 상자가, 첫 번째 대화로 표시됩니다 ...

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
<Fragment> 
    <UI> 
    <Dialog Id="CustomDlg" Width="370" Height="270" Title="[ProductName] - Setup"> 
    <Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)"> 
     <Publish Event="NewDialog" Value="WelcomeDlg">1</Publish> 
    </Control> 
    <Control Id="Back" Type="PushButton" X="180" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" Disabled="yes"/> 
    <Control Id="Cancel" Type="PushButton" X="304" Y="243" Width="56" Height="17" Cancel="yes" Text="!(loc.WixUICancel)"> 
     <Publish Event="SpawnDialog" Value="CancelDlg">1</Publish> 
    </Control>   
    <!-- ... More Controls ... --> 
    </Dialog> 

    <InstallUISequence> 
    <Show Dialog="CustomDlg" After="CostFinalize">NOT Installed OR PATCH</Show> 
    </InstallUISequence> 
    </UI> 
</Fragment> 
</Wix> 

...하지만 UI -sequence는 완전히 엉망이되어

customDlg -> welcomeDlg -> verifyDlg -> welcomeDlg -> verifyDlg -> progressDlg ... 그래서 시작 대화 상자로 다시 점프의 원인 - 버튼 "설치"를 클릭

. 두 번째 "턴"에서 설치 버튼을 클릭하면 설치를 트리거하는 데 필요한 효과가 있습니다. -P

@Before, @After 또는 @Sequence로 다른 장소에서 사용자 정의 대화 상자를 예약하려고했습니다 (Orca를 사용합니다. UISequence를 살펴보고) 심지어 WelcomeDlg (여기에 설명 된대로 : http://neilsleightholm.blogspot.de/2008/08/customised-uis-for-wix.html)를 빌드하십시오. WelcomeDlg의 InstallUISequence-Element를 사용하여 사용자 정의 대화 상자 이후에 일정을 잡아 먹는 것처럼 엉망이되었습니다. 하지만 @ After = "CustomDlg"는 사용자 정의 대화 상자에서 @ Before = "WelcomeDlg"와 동일한 효과를 가지므로 UI ​​시퀀스를 다시 엉망으로 만듭니다.

나는 그 엉망을 일으키는 사용자 계정 컨트롤에 대해 생각했지만 UAC가 MSI의 ui-sequence로 되돌아 가려면 어떻게해야합니까? 나 한테 이해가 안돼. 어쨌든 나는 MSI를 admin-Cmd를 통해 실행하려고 시도했다. 설치 버튼을 눌렀을 때 UAC 프롬프트가 나타나지 않도록해야한다. 그러나 여전히 같은 UI 시퀀스가 ​​엉망입니다.

미리 도움을 청하십시오.

답변

4

일반적으로 대화 상자 (welcomeDlg)에는 InstallUISequence 테이블에 항목이 하나만 있습니다. 다른 모든 대화 상자는 NewDialog ControlEvents에 의해 가져옵니다. 당신이 한 일은 새로운 다이얼로그를 추가하고 welcomeDlg 이전에 UI 시퀀스에서 그것을 스케줄하는 것입니다. 그런 다음 둘을 연결하는 NewDialog 이벤트를 넣습니다.

확인할 때 getDlg가 호출되고 컨트롤을 InstallUISequence로 다시 전달하는 EndDialog 제어 이벤트가 호출됩니다. 그런 다음 InstallUISequence는 welcomeDlg의 시작점을 찾아 프로세스가 반복됩니다.

사용자 지정 대화 상자와 환영 대화 상자 간의 관계를 제거하고이를 EndDialog 컨트롤 이벤트로 바꾸어야합니다. 이것은 환영에서 첫 번째 사용자 정의 대화 상자로 "돌아갈"수 없다는 것을 의미합니다.

첫 번째 대화 상자가 될 사용자 지정 대화 상자가 필요하면 앞서 많은 일을해야합니다. 첫 번째 대화를 항상 환영해야하므로 좋은 연습이 아니어야합니다.

추가 대화 상자를 앞쪽으로 순서 지정하는 유일한 경우는 시작 조건을 대체 할 때입니다. 이 경우 설치 프로그램이 계속 작동 할 것이라고 기대하지 않습니다. 환영은 결코 불리지 않는다.

+0

감사를 찾을 수 있습니다. 당신은 정말로 나를위한 UI 시퀀스의 동작을 정리했습니다. 내가 원했던 대화는 어쨌든 일종의 "화장품"기능이었을 것입니다. 당신이 지적했듯이, 좋은 일이 아니고 가치있는 일이기 때문에, 저는 방금 환영 대화를 나의 필요에 맞게 바꾸 었습니다. – Sepelio

2

첫 번째 해결책 새 사용자 지정 대화 상자의 항목을 InstallUISequence 테이블에 추가하고 표준 환영 대화 상자를 해제 할 수 있습니다.

두 번째 해답 소스를 다운로드하고 복사하여 대화 상자를 추가하여 프로젝트를 만들고 원하는 것을 모두 바꿉니다.

자세한 내용은 내 blogue에 신속한 답변 크리스토퍼 대한 Replacing a standard WelcomeDlg with a custom one