2008-10-07 37 views
15

Tôi đang phát triển trong một môi trường bị hạn chế nghiêm trọng, nhưng các nhà phát triển cũng có quyền kiểm soát chặt chẽ.Visual C++ Redistributables mà không sử dụng VCRedist_x86.exe

VCRedist_x86.exe - Một 4Mb phân phối lại - không có gì thú vị (bốn giờ để chuyển). Tôi thực sự muốn chỉ phân phối lại MFC90.dll, msvcm90.dll, msvcp90.dll và msvcr90.dll - đó là giống như 2Mb. Tuy nhiên, Redistributing Visual C++ Files nói:

Không được hỗ trợ phân phối lại các ứng dụng C/C++ được tạo mà không có tệp kê khai. Các thư viện Visual C++ không thể được sử dụng bởi các ứng dụng C/C++ mà không có một tệp kê khai ràng buộc ứng dụng với các thư viện này. Để biết thêm thông tin, hãy xem Choosing a Deployment Method.

Kế hoạch ban đầu của tôi về sao chép các tệp DLL vào thư mục làm việc của chương trình dường như không làm việc trong thế giới biểu hiện mới dũng cảm này.

Dự đoán tiếp theo của tôi là dọn dẹp các mục đăng ký được yêu cầu để đưa các tệp vào thư mục WinSxS và tự điền nó (thay vì sử dụng chương trình 4 meg).

[sửa] Phần mềm này thường xuyên được cập nhật, do đó các tệp DLL được ưu tiên mạnh mẽ để liên kết tĩnh. [/ edit]

Làm cách nào để phân phối thành công các tệp cần thiết nhưng giữ nguyên chi phí?

Trả lời

13

Chúng tôi sử dụng này: Howto: Deploy VC2008 apps without installing vcredist_x86.exe

Về cơ bản

  • Đừng nhúng một biểu hiện trong các tập tin exe của bạn.
  • Sao chép các tệp DLL C++ và tệp kê khai của chúng vào thư mục của ứng dụng.
  • Xóa "publicKeyToken" khỏi tất cả tệp kê khai (của bạn và Microsoft).
  • Nếu cần thiết, thay đổi thông tin phiên bản trong các tập tin manifest của ứng dụng của bạn để phù hợp với các tập tin manifest Microsoft (hoặc ngược lại)
4

Chỉ định/MT (Đa luồng) cho cài đặt "thư viện thời gian chạy" trong trang thuộc tính trình biên dịch. Liên kết tĩnh này chống lại thư viện thời gian chạy, do đó bạn không phải cài đặt redistributable.

1

Cài đặt chúng dưới dạng hội đồng riêng tư. Xem ở đây:

http://msdn.microsoft.com/en-us/library/ms235291.aspx

Lưu ý rằng nếu bạn không cần tất cả các DLL miễn là bạn có thể sửa đổi các tập tin manifest để chỉ tham khảo những cái bạn cần.

26

[Tôi là SxS duy trì hiện tại Microsoft]

tôi sẽ mạnh mẽ đề xuất chống lại xóa thuộc tính publicKeyToken khỏi tệp kê khai. Triển khai riêng của các dll sẽ hoạt động tốt với thuộc tính này vẫn còn nguyên vẹn. Tuy nhiên, việc xóa nó sẽ ngăn ứng dụng của bạn hưởng lợi từ các bản cập nhật bảo mật nếu có phiên bản mới hơn của CRT được cài đặt tập trung vào máy đích, vì các phụ thuộc sẽ không còn khớp nữa.

Vì vậy, để tóm tắt: an toàn để nhúng tệp kê khai của bạn, với mặc định. Sao chép tệp kê khai CRT + tệp DLL trực tiếp vào thư mục của tệp thi hành của bạn mà không cần chỉnh sửa. Đó là nó. Tương thích Win2k +.

+3

Hi Eugene: Bạn có nói rằng nếu bạn triển khai ứng dụng của bạn với các tệp DLL và tệp kê khai CRT/MFC/etc cục bộ, thì các bản cập nhật Windows ảnh hưởng đến những tệp này sẽ tìm thấy chúng trong thư mục cài đặt của bạn và cập nhật chúng?!?! – HotOil

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