2009-07-23 31 views
7

Tôi thực sự thích cách tiện ích SysInternals (ví dụ: Process Explorer) xử lý khả năng tương thích 64bit. Dường như tệp thực thi 32bit có phiên bản 64 bit được nhúng trong nó và trích xuất nó nếu cần.Bất kỳ công cụ nào có sẵn để đóng gói các tệp thi hành 32bit/64bit cùng nhau?

Tôi muốn một công cụ tự động hóa điều này - thực hiện các gói thực thi 32 bit và 64bit, đóng gói chúng lại với nhau bằng cách nào đó và chèn mã gốc để khởi chạy đúng tệp thực thi theo nền tảng được chạy.

Trước khi tôi bắt đầu cuộn của riêng mình, có ai biết điều gì đó như thế này đã tồn tại không?

+0

Không ai có thể xác định công cụ đóng gói sẽ thực hiện việc này, vì vậy tôi đã chấp nhận câu trả lời mà tôi thấy hữu ích nhất. – snowcrash09

Trả lời

2

Mark Russinovich của danh tiếng SysInternals mô tả phương pháp của họ here. Họ đã nhúng hình ảnh x64 vào hình ảnh x86. Thật không may ở trên bài đăng blog không thực sự đi vào chi tiết quá nhiều nhưng đề cập đến kỹ thuật của họ dựa trên một bài viết cũ hơn nhiều được tìm thấy here.

4

Điều này dường như đã được bao phủ đã (mặc dù nó khá cạn trên chi tiết) trong vòng ...

Roll 64-bit and 32-bit versions of an app into the same binary?

+0

Bother - không tìm thấy bài đăng đó khi tôi tìm kiếm. Tuy nhiên, nó không thực sự trả lời câu hỏi của tôi - sửa đổi tiêu đề của tôi để làm cho nó rõ ràng hơn. – snowcrash09

2

Không phải là một công cụ, nhưng có vẻ như khá dễ dàng để nhúng file thực thi của bạn trong một ++ Dự án VC như tài nguyên và chạy đúng tài nguyên sau khi kiểm tra môi trường hệ điều hành.

Sử dụng chức năng IsWow64Process để phát hiện 32 hoặc 64 bit và đây là cách viết đẹp bao gồm mã nguồn về cách nhúng các tệp thi hành: http://www.codeproject.com/KB/winsdk/binaryresources.aspx.

2

Trong khi điều này là có thể, tôi sẽ coi nó là một thực hành tồi vì hầu hết các ứng dụng đó (ví dụ: Process Explorer) giải nén tập tin đó trong thư mục làm việc. Nếu bạn muốn đặt các chương trình trong thư mục "Program Files", thì các cuộc đụng độ với thư mục đó là chỉ đọc.

Đối với tôi, có vẻ như dễ dàng hơn trong việc tách hai chương trình và tạo lối tắt chỉ với tệp x86. Nếu phiên bản đó phát hiện 64 bit, nó chỉ cần khởi chạy tệp x64.

Nếu bạn có lý do thực sự tốt để kết hợp hai yếu tố đó, hơn là hãy coi nó là tài nguyên có vẻ giống như một con đường chính xác.

0

Here is a guide để biên dịch tập lệnh AutoIT thực hiện công việc, mặc dù bạn không có bất kỳ kiểm soát nào về cách đóng gói tác phẩm trình khởi chạy hoạt động.

tôi sẽ tái tạo các script AutoIt đây trong trường hợp liên kết biến mất:

; Check if we’re on 64-bit OS… 
If EnvGet(“PROCESSOR_ARCHITEW6432″)=”” Then 
    ; No we’re not – run x86 version… 
    FileInstall(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”) 
    RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x86.exe”) 
    FileDelete(@TempDir & “\ETrustCheck_x86.exe”) 
Else 
    ; Yes we are – run x64 version.. 
    FileInstall(“D:\Support\ETrustCheck_x64.exe”,@TempDir & “\ETrustCheck_x64.exe”) 
    RunWait(“D:\Support\ETrustCheck_x86.exe”,@TempDir & “\ETrustCheck_x64.exe”) 
    FileDelete(@TempDir & “\ETrustCheck_x64.exe”) 
EndIf 

; The END 

Kịch bản này có thể được bao bọc bởi các biên tập kịch bản AutoIt vào 32bit launcher với hai thực thi của bạn đóng gói vào nó.

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