2011-02-11 35 views
13

Tôi đang tìm kiếm danh sách các hành động và trình tự của chúng khi chạy thiết lập WiX. Bằng cách nào đó trang web chính thức dường như không cung cấp bất kỳ thông tin nào.Trình tự hành động WiX

Vấn đề cơ bản là tôi muốn lên lịch cho hành động tùy chỉnh của mình một cách chính xác. Thông thường tôi cần phải đăng ký một DLL với regsvr32.exe, và điều này chỉ có thể được thực hiện một khi các tập tin được sao chép vào đĩa cứng. Tuy nhiên, hành động tùy chỉnh

<Custom Action="RegisterShellExt" After="InstallFiles"> 

không thành công với thông báo lỗi "không tìm thấy tệp".

Điều tôi đã làm sau đó là phân tích nhật ký MSI của tôi bằng Chỉnh sửa WiX và tôi thấy rằng Action InstallFiles tồn tại nhiều lần. Và hiệu quả các tập tin được viết chỉ lần thứ hai nó xuất hiện. Vì vậy, tôi đã thay đổi hành động tùy chỉnh của tôi như sau:

<Custom Action="RegisterShellExt" Before="InstallFinalize"> 

Dưới đây là trình tự tôi đã chiết xuất từ ​​các bản ghi của MSI của tôi:

Action start 15:16:49: INSTALL. 
Action start 15:16:49: PrepareDlg. 
Action start 15:16:49: AppSearch. 
Action start 15:16:49: LaunchConditions. 
Action start 15:16:49: ValidateProductID. 
Action start 15:16:49: DIRCA_NEWRETARGETABLEPROPERTY1.5D429292039C46FCA3253E37B4DA262A. 
Action start 15:16:50: CostInitialize. 
Action start 15:16:50: FileCost. 
Action start 15:16:50: CostFinalize. 
Action start 15:16:50: WelcomeDlg. 
Action 15:16:51: LicenseAgreementDlg. Dialog created 
Action 15:16:53: CustomizeDlg. Dialog created 
Action 15:16:55: VerifyReadyDlg. Dialog created 
Action start 15:16:56: ProgressDlg. 
Action start 15:16:56: ExecuteAction. 
Action start 15:16:58: INSTALL. 
Action start 15:16:58: AppSearch. 
Action start 15:16:58: LaunchConditions. 
Action start 15:16:58: ValidateProductID. 
Action start 15:16:58: CostInitialize. 
Action start 15:16:59: FileCost. 
Action start 15:16:59: CostFinalize. 
Action start 15:16:59: InstallValidate. 
Action start 15:17:00: InstallInitialize. 
Action start 15:17:08: ProcessComponents. 
Action 15:17:09: GenerateScript. Generating script operations for action: 
Action ended 15:17:09: ProcessComponents. Return value 1. 
Action start 15:17:09: UnpublishFeatures. 
Action start 15:17:09: RemoveShortcuts. 
Action start 15:17:09: RemoveFiles. 
Action start 15:17:09: InstallFiles. 
Action start 15:17:10: CreateShortcuts. 
Action start 15:17:10: RegisterUser. 
Action start 15:17:10: RegisterProduct. 
Action start 15:17:10: PublishFeatures. 
Action start 15:17:10: PublishProduct. 
Action start 15:17:10: ConfigureInstaller. 
Action start 15:17:10: InstallFinalize. 
Action 15:17:10: ProcessComponents. Updating component registration 
Action 15:17:12: InstallFiles. Copying new files 
Action 15:17:21: CreateShortcuts. Creating shortcuts 
Action 15:17:21: RegisterProduct. Registering product 
Action 15:17:23: ConfigureInstaller. [[note: CustomAction]] 
Action 15:17:22: PublishFeatures. Publishing Product Features 
Begin CustomAction 'ConfigureInstaller' 
Action 15:17:28: RollbackCleanup. Removing backup files 
Action ended 15:17:28: InstallFinalize. Return value 1. 
Action start 15:17:28: RegisterShellExt. [[note: CustomAction]] 
Action ended 15:17:33: INSTALL. Return value 1. 
Action start 15:17:35: ExitDialog. 

Có ai biết một danh sách chính thức?

Trả lời

13

Câu trả lời ngắn gọn - bạn nên làm cho bạn hoãn hoạt động tùy chỉnh và lên lịch sau InstallFiles (nếu nó dựa trên tệp đã cài đặt, tôi nghĩ là nó).

Câu trả lời dài - bạn nên làm quen với cụm từ thực thi trong tập lệnh. Read more about it on MSDN. Khi bạn thấy InstallFiles lần đầu tiên trong tệp nhật ký, đó là khi các hành động ngay lập tức chạy và các hành động trì hoãn được viết và được lên lịch cho tập lệnh cài đặt. Lần thứ hai là khi nó thực sự thực hiện (và cài đặt các tập tin). Nếu bạn thực hiện hành động bị trì hoãn, bạn sẽ thấy hành vi tương tự cho hành động đó trong tệp nhật ký.

Điều này nghe có vẻ không rõ ràng, nhưng nó không thể cho đến khi bạn đọc thêm về cách nó được thiết kế để hoạt động.

+0

cảm ơn! cho thời điểm này tôi sẽ dính vào câu trả lời ngắn :) thực sự, câu trả lời là khá rõ ràng với tôi. đầu tiên họ chuẩn bị các nhiệm vụ, tuy nhiên nếu bạn làm ngay, nó sẽ không đợi cho đến khi công việc thực sự bắt đầu. –

+1

Nhưng có danh sách chính xác về chuỗi hành động không? Nếu không, chúng ta chỉ phải thử và sai lầm có vẻ vô lý ?! – markmnl

5

Để đăng ký các tệp DLL, tốt nhất là tránh tự đăng ký.

Chúng tôi sử dụng lệnh HEAT để tạo đoạn WiX thực hiện đăng ký cho chúng tôi.

Sử dụng

heat file myfile.dll -o myfile.wxs 

Ưu điểm của việc này là các mục đăng ký được cài đặt và loại bỏ một cách chính xác và không có vấn đề với việc các tập tin đã được cài đặt hay không tại thời điểm đăng ký được thực hiện.

+0

cảm ơn cho đầu vào. Tôi không biết rằng có một kịch bản đặc biệt để đăng ký dlls. cho thời điểm này, tôi sẽ giữ hành động tùy chỉnh, nhưng ngay sau khi phần còn lại của trình cài đặt của tôi hoạt động tốt, tôi sẽ thấy làm thế nào có được lệnh nhiệt hoạt động. –

+0

Tôi đã cố gắng sử dụng tiện ích nhiệt, nhưng tôi không thể vượt qua cảnh báo HEAT5150 đó. Tôi đoán là hậu quả của cảnh báo này, tệp wxs kết quả không chứa bất kỳ mã nào hữu ích, chỉ có đoạn 'Directory' và' Component'. đây là thông điệp cảnh báo đầy đủ: 'heat.exe: warning HEAT5150: Không thể thu thập dữ liệu từ một tệp được mong đợi là một SelfReg DLL: (...) Ngoại lệ đã được ném bởi mục tiêu của một lời kêu gọi.' –

+1

Một số điều tôi tìm thấy trên danh sách gửi thư WiX: 1) Nó có thể không hoạt động với 64 bit DLL. 2) Thử chạy nhiệt với tư cách Quản trị viên 3) Thử chạy RegSpy như đã đề cập trên trang này http://www.installsite.org/pages/en/msi/tips.htm, nó sẽ tạo một tệp .reg cho nhiệt để chuyển đổi thành. wxs. 4) Đảm bảo rằng không có phụ thuộc còn thiếu – AntonyW

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