2010-03-04 27 views
7

Tôi biết đó là tình huống lạ, nhưng tôi cần nhúng một tập tin EXE (hoặc mã lắp ráp) vào dự án của tôi, vì vậy nó chỉ có thể được bắt đầu bằng ứng dụng (nó có thể 't tạo EXE trong hệ thống tập tin và khởi động nó) ....NET: nhúng tập tin EXE vào dự án

Có thể không?

Chỉnh sửa:

Nó không phải là .NET EXE. Dù sao tôi đã thêm file test.exe như một nguồn lực để dự án của tôi và tôi đã làm điều này

Dim exestr As Stream = Nothing 
    Dim a As Assembly = Assembly.GetExecutingAssembly 
    exestr = a.GetManifestResourceStream("Test.exe") 
+0

Điều này là không thể. Tại sao bạn đang cố gắng làm điều này? – SLaks

Trả lời

2

Tôi đang nghĩ tạo một RAM disk, ghi tệp exe của bạn vào tệp từ tệp tài nguyên .NET của bạn và thực thi tệp ở đó. Không có gì chạm vào đĩa vật lý.

Tôi không có liên kết cho API đĩa RAM có thể lập trình nhưng bạn có thể tìm thấy thứ gì đó để thao tác từ chương trình của mình. Các lợi ích khác là máy quét virus vẫn có thể thừa nhận nó cho an ninh.

Ngoài ra tôi đang nghĩ rằng nếu ứng dụng của bạn đang chạy trên đĩa thì không có lý do chính đáng tại sao tệp thi hành được đề cập không thể nằm trên đĩa. Nếu bạn đang truyền nó qua mạng (tải xuống) hoặc một cái gì đó, thì lưu vào đĩa trước và xóa nó khi thực hiện xong.

+0

cảm ơn bạn, tôi sẽ cố gắng, hy vọng công việc ... Dù sao tôi không muốn viết và mở tệp vì người dùng không nên sao chép thứ hai exe và bắt đầu nó khi họ muốn. – Marcx

+0

Có phải đó là giải pháp đĩa RAM cuối cùng không? Chỉ tò mò thôi. Nếu bạn sử dụng phần mềm nào để thực hiện nó? –

+0

Tôi nghĩ rằng vấn đề với điều này là đĩa RAM yêu cầu phần mềm của bên thứ 3 đã được cài đặt. Mà nếu bạn có thể làm điều đó tại sao bạn không thể chỉ viết vào hệ thống tập tin? – jcmcbeth

4

Nếu EXE là lắp ráp Net, bạn có thể nhúng các nhị phân được biên soạn trong chương trình (bên ngoài) của bạn, tải nó sử dụng Assembly.Load(byte[]). EDIT: Vì không, bạn không thể.

Sau khi tải lắp ráp, bạn có thể gọi các chức năng từ lắp ráp bên trong (chẳng hạn như phương pháp Main) như bất kỳ lắp ráp nào khác hoặc bạn có thể viết AppDomain.CurrentDomain.ExecuteAssembly(innerAssembly.FullName).

+0

cập nhật bài đăng đầu tiên ... exe không phải là .Net exe .. – Marcx

+0

Tôi sẽ giữ câu trả lời này để tham khảo. – SLaks

+0

+1 để biết thông tin hữu ích. – si618

5

Không thể. Đây là một quyết định thiết kế cốt lõi được thực hiện bởi Dave Cutler và đồng khi họ thiết kế Windows NT. Quá trình phải được một tệp trên hệ thống tệp hỗ trợ. Windows sử dụng một tệp ánh xạ bộ nhớ để ánh xạ mã của quy trình vào bộ nhớ ảo. Điều này không khác với chương trình .NET, mặc dù rất nhiều mã của nó được JIT biên dịch thành bộ nhớ. Việc lắp ráp có chứa IL được ánh xạ theo cùng một cách.

Tốt cho hơn là hoạt động hệ điều hành hiệu quả, người dùng và máy quét vi-rút thực sự không thích mã thực thi xuất hiện ở đâu cả.

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