2012-09-17 43 views
8

Tôi đang cố gắng đăng ký một DLL bằng cách sử dụng WiX. Bây giờ tôi biết và hiểu rằng tôi nên sử dụng heat và làm cho nó để kéo thông tin đăng ký cho tôi, nhưng nhiệt dường như thất bại với thông báo lỗi sau: heat.exe : warning HEAT5150 : Could not harvest data from a file that was expected to be a SelfReg DLL: C:\Users\seb\Desktop\Development\addin.dll. If this file does not support SelfReg you can ignore this warning. Otherwise, this error detail may be helpful to diagnose the failure: Unable to load file: C:\Users\seb\Desktop\Development\addin.dll, error: 193Không thể đăng ký DLL bằng cách sử dụng WiX

Tôi đã nhìn xung quanh và tìm thấy bài đăng này giải thích một chút chi tiết hơn về registering DLLs nhưng tôi muốn tránh lộ trình tự đăng ký nếu có thể. Tôi cũng thấy đề cập đến việc đăng ký DLL một cách thủ công dưới đây, nhưng tôi không quá thạo với các đối tượng đăng ký hoặc COM để biết nơi tôi thậm chí có thể nhận được CLSID, ProgId và bất kỳ thông tin nào khác đã được đề cập.

Nếu bất cứ ai có thể chỉ cho tôi đúng hướng hoặc giải thích cho tôi những gì tôi cần làm để chạy DLL thông qua heat nó sẽ được đánh giá rất nhiều.

Trả lời

1

Đây có phải là tệp DLL không được quản lý/gốc không? Phụ thuộc Walker có cho thấy bất kỳ phụ thuộc bị thiếu nào không? Thông thường điều này có nghĩa là DllRegisterFunction không thành công và Heat không thể trích xuất bất kỳ dữ liệu nào. Khắc phục sự cố đó và bạn sẽ nhận được siêu dữ liệu XML tốt.

+0

Đó là một tệp DLL được tạo bằng ATL 6.0. Nếu tôi gọi regserv32 trên đó, mọi thứ đều tốt và hệ thống nhận ra nó, nhưng cho đến bây giờ nó vẫn luôn được tải như một SelfReg. – Seb

+0

Loại vấn đề này thực sự phức tạp để giải quyết. Nếu bạn có thể chia sẻ các DLL tôi có thể cố gắng giải nén nó cho bạn. Bạn cũng có thể sử dụng công cụ chụp nhanh đăng ký trên máy sạch để ghi lại regsvr32 và sau đó tự tác giả vào wx. Hoặc sử dụng đánh giá InstallShield để trích xuất tối ưu COM và WiX để dịch ngược lại thành wx. Rất nhiều thủ thuật nhưng đòi hỏi kinh nghiệm. –

+0

Không thể thực sự chia sẻ DLL do nó là tài sản của công ty, nhưng tôi đã cố gắng sử dụng RegSpy và nó đã bị đóng băng trong khoảng 8 giờ. Hy vọng rằng nó chỉ là cố gắng để kéo dữ liệu ra. – Seb

0

Tôi đã nhận được cùng một vấn đề với Wix heat.exe: cảnh báo HEAT5150: Không thể thu thập dữ liệu từ tệp được mong đợi là một SelfReg DLL. Lý do là dll không thể tìm thấy phụ thuộc để tải. Tôi nghĩ bạn phải có những vấn đề tương tự. Tôi chạy công cụ Process Monitor và áp dụng bộ lọc để nắm bắt sự kiện heat.exe. Tôi đã có thể tìm ra nguyên nhân gốc rễ của vấn đề. Về cơ bản tôi đã phải đặt tất cả dll phụ thuộc vào cùng một vị trí mà dll chính của tôi là. Đối với trường hợp của bạn addin.dll cần phải trỏ đến cùng một vị trí nơi dll phụ thuộc của bạn.

Blog sau đây về cảnh báo này đã giúp tôi rất nhiều để tìm ra nguyên nhân gốc rễ.

http://marc.durdin.net/2009/12/case-of-hidden-exception.html?

+1

Sau khi dành gần một ngày thiết lập điều này tôi vẫn không có nơi nào với điều này. Lỗi được hiển thị trong bài đăng trên blog đề cập đến một ngoại lệ được ném bởi mục tiêu. Trong trường hợp nhiệt của tôi ném ngoại lệ nói rằng tệp không thể tải. Tôi thậm chí còn thêm tất cả các phụ thuộc hiển thị trong Process Monitor. Tôi vẫn gặp lỗi. Có lẽ tôi chỉ bị mắc kẹt với việc tự đăng ký DLL này. – Seb

11

Tôi biết điều này là cũ nhưng tôi muốn thêm một câu trả lời ở đây - lý do điều này xảy ra là vì dll bạn đang cố gắng đăng ký là 64 bit dll - và Heat.exe là 32 bit để nó không thể tải dll trong không gian địa chỉ của nó. Dù sao, chỉ cần trỏ đến một phiên bản 32 bit của dll để tạo tệp wxs và bạn sẽ không nhận được lỗi đó.

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