2011-08-17 3 views
2

사용자가 입력 한 등록 번호를 확인하기 위해 사용자 정의 dll을 사용하려고했지만 매번 "마법"동작으로 실행됩니다. 자습서 예제 http://wix.tramontana.co.hu/tutorial/events-and-actions/whats-not-in-the-book에서 사용자 지정 작업은 'CostFinalize'다음에 실행됩니다.이 작업은 일반적으로 파일 복사 절차 이전에 수행되어야하지만 사용권 계약과 함께 첫 번째 대화 상자가 나타나기 전에 작업이 실행됩니다. 나는 UI사용자가 입력 한 등록 번호 확인

MySerialCheckDlg에 지정된 MSI에서 PIDKEY 값을 얻을하지 않습니다 MsiGetProperty (hInstall, "PIDKEY", Pid, &PidLen);를 사용하여, DLL에
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="DoAction"  Value="CheckingPID">1</Publish> 
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish> 
... 
<CustomAction Id="CheckingPID" BinaryKey="CheckPID" DllEntry="CheckPID" /> 

<Binary Id="CheckPID" SourceFile="serialcheck.dll" /> 

대화

등록에서 "다음"버튼을 클릭의 이벤트에 작업을 할당하여 문제를 해결하기 위해 노력했다

그리고 MSI PIDACCEPTED 속성에

<Control Id="CDKeyEdit" Type="Edit" X="45" Y="159" Width="220" Height="16" Property="PIDKEY" Text="[PIDTemplate]" /> 
<Publish Dialog="MySerialCheckDlg" Control="Next" Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish> 

따라서 라인에서 확인되지되면, InvalidPidDlg는 표시되지 않습니다 설치 프로세스가 계속됩니다.

WiX Action Sequence의 순서를 지정하거나이 상황에서 사용할 수있는 다른 방법을 지정할 수 있습니까?

답변

2

두 시퀀스가 ​​InstallExecuteSequenceInstallUISequence입니다. MSI가 전체 UI로 실행되면 InstallUISequence; UI가 표시되지 않는 경우에는 이러한 작업을 건너 뜁니다. InstallExecuteSequence의 작업은 UI가 있거나없는 설치 프로세스 중에 실행됩니다.

먼저 편집 컨트롤에 PIDKEY 속성이 연결되어 있습니까? 당신은 대화 상자에서 비슷한 당신은 PIDKEY를 입력하도록 요청해야하는 위치 :

<Control Id="PidKeyEdit" Type="Edit" X="45" Y="105" Width="220" Height="18" Property="PIDKEY" Text="{80}" /> 

TypeEdit 또는 MaskedEdit이 될 수 있습니다.

<Control Id="Next" Type="PushButton" X="236" Y="243" Width="56" Height="17" 
     Default="yes" Text="Next"> 
    <Publish Event="DoAction" Value="CheckingPID">1</Publish> 
    <Publish Event="SpawnDialog" Value="InvalidPidDlg">PIDACCEPTED = "0"</Publish> 
</Control> 

액션이 실행되는 방식을 볼 수 자세한 로깅을 사용하여 설치를 실행하고, 속성 값 변경 방법 : Publish 요소는 대화에 다음 버튼 컨트롤과 연관되어야한다

msiexec /i your-product.msi /lv* your-product.log