2009-10-19 32 views
18

Tôi muốn tạo tệp CustomAction C# DLL phụ thuộc vào bên thứ ba .NET DLL (trong trường hợp cụ thể này là MySql.Data.dll). Tôi có tập tin DLL hành động tùy chỉnh C# làm việc với đoạn WiX dưới đây. Tôi chỉ cố gắng tìm ra cách để thêm phụ thuộc vào hành động tùy chỉnh một cách an toàn. Lưu ý: Tôi không thực sự cần tệp tệp DLL của bên thứ ba này cho ứng dụng đã cài đặt để chạy.Làm thế nào để thực thi tệp DLL hành động tùy chỉnh WiX với các phụ thuộc

<Binary Id="MyCustomAction.dll" SourceFile="MyCustomAction.CA.dll" /> 

    <CustomAction Id="FixupConfigForMysql" Return="check" /> 

    <InstallExecuteSequence> 
    <Custom Action='FixupConfigForMysql' After='InstallFiles'>NOT Installed</Custom> 
    </InstallExecuteSequence> 

Tôi có cần cài đặt tệp DLL của bên thứ ba (MySql.Data.dll) để có được hành động tùy chỉnh để chạy không?

Tôi có thể thêm một thẻ nhị phân khác với tệp DLL của bên thứ ba không?

Trả lời

19

DTF trong bộ công cụ WiX có một cơ chế để đưa lắp ráp của bạn hành động tùy chỉnh và tất cả các tài liệu tham khảo của nó thành một nhị phân đơn (dll self-extracting, về cơ bản). Tôi không viết các hành động tùy chỉnh được quản lý (C/C++ tạo các hành động tùy chỉnh với ít phụ thuộc hơn và tăng tỷ lệ thành công) nhưng nó được cho là chỉ hoạt động khi xây dựng trong VS.

+8

Điều này dường như chỉ hoạt động, có thể do quy trình tạo hành động tùy chỉnh xử lý việc thêm các phụ thuộc này. Nếu tôi hiểu nó một cách chính xác, chúng sẽ trở thành một phần của .CA.dll được tạo ra bởi công cụ Custom Action build. http://blogs.msdn.com/jasongin/archive/2008/05/23/custom-action-project-templates.aspx –

+4

@AdamTegen Cảm ơn bạn đã đăng bài viết đó, đã lưu tôi một tuần nữa đập đầu tôi vào bức tường! Dòng quan trọng là "Quá trình xây dựng hành động tùy chỉnh sẽ tự động đóng gói bất kỳ hội đồng không phải GAC nào mà CA của bạn phụ thuộc vào" Tôi có tất cả các hội đồng phụ thuộc của tôi trong GAC trên hộp phát triển của tôi và không thể hiểu tại sao họ không làm như vậy ' t dường như có mặt trên hộp kiểm tra. Cảm ơn! –

+2

Như một lưu ý cho những người khác, hãy chắc chắn rằng phần tử 'Binary' trỏ đến tệp' .CA.dll' mà WiX tạo ra và không phải là tệp DLL gốc. – Cocowalla

4

Bạn có thể sử dụng <Binary /> để thêm bất cứ điều gì các file cần thiết để chạy hành động tùy chỉnh. Điều đó nên đi cho bất kỳ dlls bên thứ 3 bạn yêu cầu quá. Các tệp được bao gồm bằng phần tử nhị phân chỉ được sử dụng trong quá trình cài đặt và sẽ không được coi là một phần của ứng dụng đang được cài đặt.

Cập nhật: kết nối giữa CustomAction và Binary được thực hiện bằng cách tham chiếu nhị phân từ hành động tùy chỉnh bằng thuộc tính BinaryKey. Trừ khi bạn có thể có nhiều thuộc tính nhị phân (tôi chưa thử tính năng này và không trực tiếp thấy bất kỳ hỗ trợ nào trong số này trong MSI custom action table), bạn chỉ có thể có hành động tùy chỉnh tùy thuộc vào một số nhị phân. Do đó, nhị phân sẽ cần phải thực hiện tất cả các phụ thuộc cần thiết trong chính nó.

Điều đó nói rằng, nếu dll của bạn là tất cả .Net hội đồng, một ý tưởng sẽ được sử dụng ILMerge để gói chúng thành một hội đồng duy nhất.

+1

Điều đó sẽ không hoạt động. Không có luồng nhị phân bổ sung nào được trích xuất. –

3

Đặt thuộc tính 'Sao chép địa phương' trên tham chiếu cứng thành True trong Visual Studio.

1

Theo nhận xét của ông Mensching, tôi sẽ điền chi tiết hơn một chút.

Giả sử bạn đang ở trên ít nhất Wix 3.0, bạn có thể sử dụng MakeSfxCA.exe để gói phụ thuộc trong một DLL duy nhất. (Đây là một bổ trợ từ DFT - Deployment Tools Foundation.) Về cơ bản, bắt đầu bằng cách đảm bảo dự án đang sao chép các DLL phụ thuộc của bạn. Tạo một tệp CustomAction.config. Thử nghiệm với một tập tin .bat đơn giản như:

REM MyMakeSfxCA.bat - Run under $(TargetDir); abs. paths reqd. 
"%WIX%\SDK\MakeSfxCA"^
    %cd%\Managed_custom_action_pkg.dll^
    "%WIX%\SDK\x86\sfxca.dll"^
    %cd%\Managed_custom_action.dll^
    %cd%\Dependent1.dll^
    %cd%\Dependent2.dll^
    %cd%\Microsoft.Web.Administration.dll^
    %cd%\Microsoft.Deployment.WindowsInstaller.dll^
    %cd%\CustomAction.config 

Khi đã hoạt động, chuyển đổi thành tổ chức sự kiện Post-xây dựng:

"$(WIX)\SDK\MakeSfxCA"^
    $(TargetDir)\Managed_custom_action_pkg.dll^
    "$(WIX)\SDK\x86\sfxca.dll"^
    $(TargetDir)\Managed_custom_action.dll^
    $(TargetDir)\Dependent1.dll^
    $(TargetDir)\Dependent2.dll^
    $(TargetDir)\Microsoft.Web.Administration.dll^
    $(TargetDir)\Microsoft.Deployment.WindowsInstaller.dll^
    $(TargetDir)\CustomAction.config 

Trong file .wxs của bạn, Binary chính của bạn sẽ trông giống như:

<Binary Id="Managed_custom_action_CA_dll" 
     SourceFile="$(var.Managed_custom_action.TargetDir)$(var.Managed_custom_action.TargetName)_pkg.dll" /> 

Đối với họ CustomAction.config, bạn có thể tìm thấy ví dụ trực tuyến.

Đây là cách tốt nhất mà tôi đã tìm thấy.

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