2011-12-21 25 views
10

Tôi là người mới bắt đầu, bắt đầu học WiX. Tôi muốn nắm bắt và xác nhận và đăng ký chi tiết người dùng trong quá trình cài đặt. Tôi đã tạo một hộp thoại để ghi lại đăng ký người dùng và gọi một hành động tùy chỉnh khi người dùng nhấp vào 'Tiếp theo'.Lỗi cài đặt WiX 2762 khi gọi một CustomAction từ hộp thoại

Nhưng ở đây tôi nhận được lỗi cài đặt 2762. Mặc dù mô tả lỗi nói rằng "Hành động phải được lên lịch giữa InstallInitialize và InstallFinalize", tôi không thể tìm ra cách giải quyết vấn đề này.

Đây là kịch bản XML của tôi:

<Binary Id="mycustom" 
     SourceFile="..\CustomAction1\bin\Debug\CustomAction1.CA.dll" /> 

<CustomAction Id="myCustomValidate" 
       BinaryKey="mycustom" 
       DllEntry="ValidateCustomAction" 
       Execute="deferred" 
       Return="check"> 
</CustomAction> 

<UI> 
    <UIRef Id="WixUI_Mondo" /> 
    <Dialog Id="UserRegistrationDlg" 
      Width="370" 
      Height="270" 
      Title="[ProductName] [Setup]" 
      NoMinimize="yes"> 
     .. 
     .. 
     .. 
     <Control Id="Next" 
       Type="PushButton" 
       X="236" 
       Y="243" 
       Width="56" 
       Height="17" 
       Default="yes" 
       Text="[ButtonText_Next]"> 
      <Publish Event="ValidateProductID" Value="0">1</Publish> 
      <Publish Event="DoAction" Value="myCustomValidate">1</Publish> 
      <Publish Event="SpawnDialog" Value="InvalidRegDlg">PIDACCEPTED = "0"</Publish> 
      <Publish Event="NewDialog" Value="SetupTypeDlg">ProductID AND PIDACCEPTED = "1"</Publish> 
     </Control> 
    </Dialog> 
</UI> 

Sau đây là mã hành động tùy chỉnh tôi đã sử dụng.

[CustomAction] 
public static ActionResult ValidateCustomAction(Session session) 
{ 
    return ActionResult.Success; 
} 

Hành động tùy chỉnh đang hoạt động tốt nếu được sử dụng trong "InstallExecuteSequence". Tôi không thể tìm ra vấn đề, tôi đã xóa hộp thoại tùy chỉnh và sử dụng lệnh gọi đơn giản sau để gọi hành động tùy chỉnh. Nhưng tôi đã kết thúc với cùng một lỗi.

<Publish Dialog="LicenseAgreementDlg" 
     Control="Next" 
     Event="DoAction" 
     Value="myCustomValidate">1</Publish> 

Tôi chắc chắn tôi đang làm điều gì đó ngớ ngẩn ở đây, nhưng không thể tìm ra. Giải pháp là gì?

Trả lời

20

Trong CustomAction yếu tố của bạn thiết Execute thuộc tính để immediate. Deferred actions chỉ có thể chạy trong InstallExecuteSequence giữa các hành động InstallInitialize và InstallFinalize.

+0

Làm việc như sự quyến rũ. Cảm ơn bạn!!! – user961330

Các vấn đề liên quan