2009-07-31 36 views
11

Khi ứng dụng của tôi được gỡ cài đặt, máy chủ cần được thông báo để có thể giải phóng khóa cấp phép được gán cho máy khách. Điều này được thực hiện thông qua một cuộc gọi dịch vụ web.Hành động tùy chỉnh C# trong Wix

Tôi đã tạo một hành động tùy chỉnh C# thực hiện việc này. Vấn đề là, các trình gỡ cài đặt là bỏ nói rằng nó couldnt tìm thấy một dll.

Nhật ký lỗi cho msi chứa các lỗi sau:

Error 1723. There is a problem with this Windows Installer package. A DLL required for this install to complete could not be run. Contact your support personnel or package vendor. Action ReadLicenseKeyFromFile, entry: ReadLicenseKey, library: C:\Windows\Installer\MSI4F42.tmp

tôi có chức năng ReadLicenseKey đánh dấu là một hành động tùy chỉnh. Hành động tùy chỉnh được đặt tên là ReadLicenseKeyFromFile.

<Custom Action="ReadLicenseKeyFromFile" After="InstallInitialize"> 
    REMOVE~="ALL" AND NOT UPGRADINGPRODUCTCODE 
</Custom> 

<CustomAction Id="ReadLicenseKeyFromFile" BinaryKey="UnInstallCA.CA.dll" DllEntry="ReadLicenseKey" Execute="immediate" Return="check" /> 

<Binary Id="UnInstallCA.CA.dll" SourceFile="$(var.UnInstallCA.TargetDir)UnInstallCA.CA.dll" /> 

Dự án hành động tùy chỉnh sẽ xuất ra tệp .CA.dll. Tôi đã thử cài đặt các tập tin như là một phần của thiết lập, sao chép bằng tay dán tập tin, không làm gì để tập tin ... về cơ bản đã thử tất cả các kết hợp có thể.

Phải có thứ gì đó mà tôi bị thiếu, vì vậy vui lòng trợ giúp.

Trả lời

11

Rất tiếc vì có lãng phí thời gian của mọi người về điều này.

Giải pháp là một thứ khá đơn giản. Tôi đã quên đặt thuộc tính [CustomAction] trên phương thức cụ thể này. Vì vậy, mặc dù nó là hành động cuối cùng mà tôi đã viết trong tệp CustomAction.cs của mình, nó là tệp đầu tiên được gọi trong InstallExecuteSequence. Và vì lý do đó, tôi bị lừa khi nghĩ rằng nó không thể tìm thấy tập tin. Vâng, đó cũng như thực tế là tôi phải thực sự buồn ngủ ...

Dù sao, trong khi tìm kiếm câu trả lời tôi đã xoay xở để gặp rất nhiều tài nguyên tốt, đặc biệt là Alex Shevchuks series on Wix. Một điều tôi nhận ra là tôi không phải cài đặt các tập tin dll hành động tùy chỉnh. Tôi chỉ có tham khảo nó từ dự án Wix của tôi và cung cấp đường dẫn đến nó. Các dll được nhúng trong các thiết lập và được truyền từ đó khi các hành động tùy chỉnh gỡ bỏ cài đặt sẽ được gọi.

+1

Khi tôi đã gây ra bản thân mình cùng một vấn đề tôi đã sử dụng phụ thuộc vào nhìn vào DLL và kiểm tra các biểu tượng bên phải thực sự xuất khẩu. /L – leiflundgren

+0

Cảm ơn bạn đã đăng câu trả lời của mình, tôi vừa phạm sai lầm (đơn giản) mà không nhận ra nó, một thông báo lỗi khó hiểu như vậy! – si618

0

Sao chép UnInstallCA.CA.dll của bạn vào máy mục tiêu trong khi cài đặt? Có vẻ như nó không có lúc gỡ cài đặt.

Nếu nó đến đó - nó có thể chạy không? (Hãy thử chạy nó từ máy mục tiêu để xem nó có thể làm những gì nó phải làm - có thể bạn cần phải gửi một số dll khác bạn đang sử dụng từ này - hoặc có thể một số gói redistributable)

+0

có, dll cài đặt sẽ được sao chép khi cài đặt. không, tôi không biết cách mô phỏng việc sử dụng dll. nếu bạn có nghĩa là bằng cách tạo ra một dự án mới mà tham chiếu dll và sau đó gọi hàm, yeah đó sẽ xảy ra. –

+0

@Anton Tykhyy - tôi đã được thông báo rằng bạn đã đăng câu trả lời cho câu hỏi của tôi một giờ trước, nhưng tôi không thể thấy câu trả lời đó. Từ hồ sơ của tôi, tôi chỉ có thể thấy một phần của câu trả lời. dự án tác vụ tùy chỉnh đang chạy tiện ích bắt buộc từ DTF chuyển đổi dll được quản lý thành không được quản lý .CA.dll. và .CA.dll này là những gì tôi đang cài đặt cùng với thiết lập của tôi. là có anyway mà tôi có thể kiểm tra những gì con đường là thiết lập nhìn vào để tìm các dll? –

+0

một vấn đề có thể là đường dẫn biến. Tôi đã không bao giờ sử dụng nó như thế :) - hardcode con đường thực sự để xem nếu mọi thứ làm việc. –

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