2010-04-07 29 views
7

Tôi đang cố gắng tạo hành động tùy chỉnh cho bản cài đặt Wix của mình và thao tác này không hoạt động và tôi không chắc chắn lý do.Không thể chạy Hành động Tuỳ chỉnh Wix trong MSI

Dưới đây là các bit trong Wix tập tin thích hợp:

<Binary Id="INSTALLERHELPER" SourceFile=".\Lib\InstallerHelper.dll" /> 
<CustomAction Id="HelperAction" BinaryKey="INSTALLERHELPER" DllEntry="CustomAction1" Execute="immediate" /> 

Dưới đây là các tập tin lớp đầy đủ cho hành động tùy chỉnh của tôi:

using Microsoft.Deployment.WindowsInstaller; 

namespace InstallerHelper 
{ 
    public class CustomActions 
    { 
    [CustomAction] 
    public static ActionResult CustomAction1(Session session) 
    { 
     session.Log("Begin CustomAction1"); 

     return ActionResult.Success; 
    } 
    } 
} 

Hành vi được điều hành bởi một bấm nút trong UI (đối với bây giờ):

<Control Id="Next" Type="PushButton" X="248" Y="243" Width="56" Height="17" Default="yes" Text="!(loc.WixUINext)" > 
     <Publish Event="DoAction" Value="HelperAction">1</Publish> 
    </Control> 

Khi tôi chạy MSI, tôi nhận được lỗi này trong nhật ký:

MSI (c) (08:5C) [10:08:36:978]: Connected to service for CA interface. 
MSI (c) (08:4C) [10:08:37:030]: Note: 1: 1723 2: SQLHelperAction 3: CustomAction1 4: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
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 SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 
MSI (c) (08:4C) [10:08:38:501]: Product: SessionWorks :: Judge Edition -- 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 SQLHelperAction, entry: CustomAction1, library: C:\Users\NATHAN~1.TYL\AppData\Local\Temp\MSI684F.tmp 

Action ended 10:08:38: SQLHelperAction. Return value 3. 
DEBUG: Error 2896: Executing action SQLHelperAction failed. 
The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2896. The arguments are: SQLHelperAction, , 

Không có hai mã lỗi hoặc thông điệp nào cho tôi là đủ để cho tôi biết có gì sai. Hoặc có lẽ tôi chỉ không hiểu những gì họ nói là sai.

Lúc đầu, tôi nghĩ rằng có thể là vì tôi đã sử dụng Wix 3.5, vì vậy chỉ để chắc chắn tôi đã thử sử dụng Wix 3.0, nhưng tôi nhận được lỗi tương tự.

Bất kỳ ý tưởng nào về những gì tôi đang làm sai?

+1

"Một DLL cần thiết để cài đặt này hoàn thành không thể chạy." - Điều này chỉ ra rằng trình cài đặt tìm thấy dll nhưng không thể tìm thấy một phương pháp trong đó. Bạn đã đề cập rằng bạn đã thay đổi mã sau khi bạn đăng nhật ký - bạn có thể đăng nhật ký được cập nhật không? Làm cách nào bạn chạy nhật ký - bạn đã làm/l * vx tùy chọn? – demp

Trả lời

7

Đối với hội đồng hành động tùy chỉnh của bạn, bạn cần tệp cấu hình và đặt thuộc tính thành true. Đảm bảo bạn đặt tên cho tệp cấu hình của mình là CustomAction.config. Nếu không, nó sẽ không hoạt động. Tôi giả sử bạn đang chạy trên .NET Framework 4.

Xem here để biết thêm thông tin. Ngoài ra, như AntonyW đã chỉ ra, fuslogvw.exe là rất hữu ích trong kịch bản này.

6

Tác vụ tùy chỉnh được khởi chạy qua DoAction không thể ghi vào tệp nhật ký.

Điều này làm tôi bối rối khi lần đầu tiên tôi bắt đầu sử dụng WiX.

Nếu bạn muốn xem điều gì đang diễn ra, bạn có thể sử dụng System.Diagnostics.Debugger.Launch() khi bắt đầu Tác vụ tùy chỉnh. Điều này sẽ nhắc bạn đính kèm Visual Studio vào quá trình để bạn có thể gỡ lỗi nó.

+0

Vâng, hạn chế cài đặt Windows ngu ngốc. –

+0

Tuy nhiên, họ có thể ghi vào các tập tin trên máy mục tiêu! –

+3

Debugger.Launch() không làm gì cho tôi. – jcmcbeth

0

Đối với tôi, đó là CustomAction DllEntry của tôi không khớp với tên phương thức của tôi. tức là

<CustomAction Id="CheckingPID" BinaryKey="CheckPID.CA" DllEntry="BadValue" /> 

public static ActionResult CheckPID(Session session) 
0

Bạn đã thử thay đổi cài đặt thư viện thời gian chạy trên DLL hành động tùy chỉnh chưa? Các tùy chọn chế độ gỡ lỗi/MDd và/MtD yêu cầu các phiên bản gỡ lỗi của thời gian chạy C++ nói riêng, không có sẵn trên các máy sản xuất (không có giấy phép phân phối lại cho chúng). Nếu bạn sử dụng tùy chọn trình biên dịch/MD, bạn cũng có thể cần phải cài đặt phiên bản runtime Visual Studio C++ mà bạn yêu cầu trên các máy của người dùng, có một mô-đun hợp nhất cho rằng: C++ Redistributable package with WIX.

8

thay vì tham khảo tài liệu tham khảo .dll .CA.dll, nó hoạt động cho tôi.

+0

Ah, cuối cùng, đó cũng là cho tôi. – laifukang

+1

Đây chính xác là những gì đã xảy ra với tôi. Tôi đã tạo một dự án có tên "Company.CA" đã tạo ra "Company.CA.dll". Nhưng sau đó WiX nhồi tất cả mọi thứ vào "Company.CA.CA.dll" và tôi đã không nhận thấy. Tôi đã lãng phí cả một giờ rồi! –

1

Lỗi này xảy ra khi bạn có cấu hình/nền tảng dự án trình cài đặt được gỡ lỗi/x64 và cấu hình/nền tảng dự án hành động tùy chỉnh được đặt thành gỡ lỗi/x86 một cách lặp lại.

Đúng nền tảng thiết để xây dựng các dự án cho cùng một nền tảng

Trong trường hợp thay đổi của tôi platorm giải quyết vấn đề này.

Cảm ơn Yogesh

1

hơn Một câu trả lời có thể - bạn có thể đã quy định quyền CA DLL, và xác định các phương pháp đúng, nhưng nếu phương pháp này là không được trang trí với [CustomAction] bạn sẽ nhận được lỗi đó.

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