Tôi đang cài đặt một ứng dụng lớn và một phần là công cụ viết tùy chỉnh có tên "DbUpdateManager" để thực thi khối lượng lớn các tập lệnh SQL dựa vào cơ sở dữ liệu đích của chúng tôi.WiX - cố gắng tìm ra các chuỗi cài đặt
Ngay bây giờ, cài đặt WiX 2.x hoạt động - nhưng nó có một lỗ hổng: trong khi cài đặt, tôi cũng cài đặt một vài dịch vụ Windows, có thể được tùy chọn bắt đầu ngay lập tức. Tuy nhiên, những người đó sẽ thất bại, nếu DbUpdateManager chưa được chạy.
Vì vậy, những gì tôi đang cố gắng để thực hiện điều này là:
- Install DbUpdateManager và dịch vụ của tôi từ MSI tôi
- Run DbUpdateManager TRƯỚC bất kỳ dịch vụ khởi động
My nguồn WiX hiện tại trông giống như sau:
<Directory Id='INSTALLDIR' Name='DbUpdMgr' LongName='DbUpdateManager' >
<!-- DbUpdateManager component with the necessary files -->
<Component Id='DbUpdateManagerComponent' Guid='...' DiskId='1'>
<File Id='DbUpdateManagerFile' LongName='DbUpdateManager.Wizard.exe'
Name='DbUmWz.exe' src='DbUpdateManager.Wizard.exe' KeyPath='no' />
</Component>
<!-- Component to install one of my Windows services -->
<Component Id='InstallServiceComponent' Guid='...' DiskId='1'>
<File Id='InstallServiceFile' LongName='MyService.exe'
Name='MyServic.exe' src='MyService.exe' KeyPath='yes'/>
<ServiceInstall Id='InstallMyService' Name='MyService'
Description='My Service' ErrorControl='normal'
Start='auto' Type='ownProcess' Vital='yes' />
<ServiceControl Id='UninstallMyService' Name='MyService'
Remove='uninstall' Wait='yes' />
</Component>
<!-- Feature for the DbUpdateManager referencing the above component -->
<Feature Id='DbUpdateManager' ConfigurableDirectory='INSTALLDIR'
AllowAdvertise='no' Description='DbUpdateManager' Level='1'
Title='Database Update Manager'>
<ComponentRef Id='DbUpdateManagerComponent'/>
</Feature>
<!-- Custom action for running DbUpdateManager -->
<CustomAction Id='RunDbUpdateManagerAction' FileKey='DbUpdateManagerFile'
ExeCommand='' Return='asyncWait' />
<!-- Calling the custom action in the install sequence -->
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallInitialize' />
<Custom Action='RunDbUpdateManagerAction'
After='InstallFinalize'>&DbUpdateManager=3</Custom>
Tôi thừa hưởng WIX này, và nó hoạt động - nhưng như tôi đã nói - DbUpdateManager được gọi là quá muộn trong quá trình (chỉ "After = InstallFinalize") và do đó các dịch vụ sẽ không khởi động đúng lúc đầu tiên (chạy tốt lần thứ hai khi bạn khởi động lại chúng theo cách thủ công sau khi DbUpdateManager đã chạy).
Tôi chọc xung quanh tài liệu MSI một chút và tìm thấy một bước đẹp gọi là "StartServices", do linh cảm của tôi là chỉ cần thay đổi gọi tôi hành động tùy chỉnh như sau:
<InstallExecuteSequence>
<Custom Action='RunDbUpdateManagerAction'
Before='StartServices'>&DbUpdateManager=3</Custom>
Thật không may, trong trường hợp này, không có gì xảy ra - DbUpdateManager KHÔNG BAO GIỜ được gọi là ....
Bất kỳ ý tưởng nào tại sao? Gỡ lỗi các công cụ MSI/WiX thực sự thực sự phức tạp, và tôi dường như không thể thấy rừng cho cây cối nữa ....
Cảm ơn! Marc
EDIT: Các "RunDbUpdateManagerAction" được đặt vào đúng vị trí trong bảng InstallExecuteSequence trong MSI của tôi - ngay SAU InstallServices và chỉ TRƯỚC StartServices - nhưng nó không hoạt động .... DbUpdateManager (một tiện ích Winforms) không hiển thị trong quá trình cài đặt :-(
EDIT 2: bây giờ hành động của tôi dường như được thực hiện và vào đúng thời điểm - không may, tôi không thấy trình hướng dẫn của tôi :-(Điều tôi thấy là mã lỗi "giá trị trả về 1631" có nghĩa là "Dịch vụ MSI không thể khởi động" - wtf ???
MSI (s) (2C: D8) [20: 53: 36: 383]: Thực hiện hành động: RunDbUpdateManagerAction Hành động 20:53:36: RunDbUpdateManagerAction. Hành động bắt đầu lúc 20:53:36: RunDbUpdateManagerAction. MSI (s) (2C: D8) [20: 53: 36: 383]: Thực hiện hành động: StartServices Hành động 20:53:36: StartServices. Các dịch vụ đang được bắt đầu Hành động bắt đầu lúc 20:53:36: StartServices. Hành động kết thúc lúc 20:53:36: RunDbUpdateManagerAction. Giá trị trả lại 1631.
Là một tài liệu tham khảo, các InstallExecute chuỗi gợi ý: http://msdn.microsoft.com/en-us/library/aa372038(v=vs.85).aspx –