2017-06-05 14 views
5

Tôi cần đọc số FileVersion của tệp thực thi. Vấn đề là tôi không có một tập tin thực sự trên đĩa, chỉ có một mảng các byte. API FileVersion chỉ có phương thức GetVersionInfo(string fileName), nó không có bất kỳ phương pháp nào để lấy phiên bản từ tệp.Làm cách nào để có được thông tin FileVersion của tệp thực thi được lưu trữ trong bộ nhớ dưới dạng một mảng byte?

Tôi đã thử tìm kiếm nguồn với trình dịch ngược, nhưng có vẻ phức tạp hơn một bản sao/dán đơn giản có thể làm.

Có cách nào để đọc FileVersion của tệp không, vì tôi có byte nội dung tệp, mà không cần ghi tệp vào đĩa?

+0

Có lẽ đây là một câu hỏi ngớ ngẩn, nhưng bạn đã thử viết mảng byte của bạn vào một tệp trên đĩa rồi gọi 'GetVersionInfo' trên đó chưa? (Giả sử rằng mảng byte thậm chí sẽ chứa thông tin này ở vị trí đầu tiên.) –

+0

Vâng, bạn có thể đọc phần '.rsrc' từ hình ảnh PE, nhưng điều đó có lẽ sẽ không tầm thường ... trừ khi bạn có rất tốt lý do không, tôi khuyên bạn nên viết tệp vào đĩa. –

+1

Bắt đầu bằng http://secana.github.io/PeNet/html/5886c81e-a545-ed37-eb3d-af21b3e00b52.htm –

Trả lời

0

Thật không may, sau nhiều lần đào và tìm kiếm nguồn .NET Core, thư viện Javascript có sẵn, v.v. Tôi quyết định rằng điều này không dễ (hoặc có thể) và không đáng để tìm ra.

Thay vào đó, tôi đã đi với cách tiếp cận đơn giản hơn:

  • Viết các tập tin vào đĩa trong một số loại tạm thời vị trí
  • Đọc phiên bản từ tập tin trên đĩa
  • Xóa file

Mã này là mã .NET đơn giản và thẳng về phía trước, không yêu cầu các thủ thuật hay thư viện JS phức tạp.

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