2009-01-31 15 views
5

Tôi muốn xây dựng một chương trình AIR AIR đặc biệt trong C dọc theo dòng java.exe.Làm thế nào tôi có thể tải thời gian chạy AIR như một thư viện được chia sẻ trong quá trình từ một chương trình C

Tôi đã xem các chương trình AIR đang chạy với trình xem quy trình và có thể định vị tệp DLL thời gian chạy AIR đang được sử dụng. Các chương trình AIR khác với Java ở chỗ chúng được cài đặt dưới dạng các tệp thực thi nền tảng cụ thể ràng buộc thời gian chạy AIR như một thư viện được chia sẻ trong quá trình khi chúng được khởi chạy (biểu tượng của chúng được người dùng nhấp đúp).

Vâng, tôi muốn tạo một trình khởi chạy AIR thay vì giống như java.exe.

java.exe được khởi chạy dưới dạng một quy trình nền tảng hệ điều hành liên kết với Java JVM runtime (JRE) như một thư viện được chia sẻ trong quá trình. Ứng dụng java sẽ được thực thi được chỉ định như là một đối số dòng lệnh cho java.exe. Khi java.exe đang chạy và JVM có đầy đủ chức năng, lớp ứng dụng java được chỉ định được nạp bởi trình nạp lớp JVM để thực thi. Ứng dụng Java được chỉ định đó sẽ tiếp quản, theo nghĩa "chiếm đoạt" quá trình của java.exe. Tất nhiên, ứng dụng java được chỉ định hiển thị trong bất kỳ danh sách quy trình nào là chương trình java.exe lưu trữ nó.

Tôi muốn thực hiện việc khởi chạy ứng dụng AIR như thế này. Tại sao? Vì vậy, tôi có thể khám phá cách để hack AIR và có lẽ khắc phục một số rất nhiều, nhiều thiếu sót của nó. Ví dụ, để bắt đầu tôi muốn mở rộng kinh nghiệm thời gian chạy AIR với một số API mới có sẵn cho ứng dụng AIR đang chạy.

đặt hàng đầu tiên của tôi về kinh doanh sẽ được:

  • Thực hiện một giao diện liên kết của ActionScript3 C mà có thể so sánh để NET PInvoke
  • Thêm một API cho quá trình tung ra rằng được so sánh với các API được tìm thấy trong Java SE để thực hiện việc này (Runtime.exec, ProcessBuilder, Process)
  • Thêm hỗ trợ cho ứng dụng AIR tới có thể tương tác với stdin , stdout, stderr. Kỳ lạ thay, mặc dù Adobe đã thêm hỗ trợ cho tệp cục bộ quyền truy cập ở AIR, họ đã bỏ qua tương tác với các ống tiêu chuẩn này (tuy nhiên chúng được tìm thấy trên bất kỳ nền tảng hệ điều hành nào mà AIR hỗ trợ).
  • Thực hiện hỗ trợ của AMF qua stdin, stdout , stderr - vì vậy AIR (hoặc Java hoặc bất kỳ ngôn ngữ có khả năng AMF) ứng dụng có thể interprocess communication qua trao đổi đối tượng AMF. Thao tác này sẽ thêm một cú chạm của PowerShell của Microsoft vào AIR.

Hiện tại Merapi cung cấp cầu AMF với Java để chứng minh tính hiệu quả của việc này. Than ôi, Merapi phải sử dụng một cổng localhost và socket để thực hiện giao tiếp interprocess - đó là một cách vụng về để đi tương đối so với sử dụng stdin/stdout/stderr interprocess pipe thay thế.

Trả lời

2

gì câu hỏi của tôi đã tạo ra những cố gắng làm hóa ra lại bị cấm bởi Adobe (cho đến nay như bất kỳ mục đích thương mại tiềm năng):

Từ Adobe® AIR™ Runtime Distribution FAQ:

Distribute hoặc sử dụng thời gian chạy Adobe AIR , tệp trình cài đặt hoặc trích xuất các tệp cài đặt theo cách thức hoặc mục đích không được đăng ký . Ví dụ: bạn không thể phân phối, gọi trực tiếp hoặc viết trình bao bọc cho bất kỳ thư viện AIR hoặc các thành phần thời gian chạy nào của Adobe trong ứng dụng phần mềm. Runtime.dll, Tệp thi hành thời gian chạy, template.exe và template.app là ví dụ về Thành phần thời gian chạy.

2

Có vẻ như bạn muốn thực hiện một số tấn công AIR. Tôi không nghĩ rằng lưu trữ thời gian chạy AIR trong quá trình của riêng bạn sẽ rất dễ dàng. Nhưng bạn có thể xem xét nhúng Flash Player ActiveX Control. Vì nó chỉ là một đối tượng COM, bất kỳ ứng dụng COM nào cũng có thể CoCreateInstance() Trình phát Flash.Giao diện COM không được ghi lại đầy đủ, nhưng dưới đây là một số ví dụ có thể hữu ích:

  • F-IN-BOX là thư viện của nhà phát triển để nâng cao tính năng Macromedia Flash Player ActiveX. Nó không sử dụng công cụ riêng của mình để hiển thị phim nhưng cung cấp một trình bao bọc xung quanh mã swflash.ocx/flash.ocx chính thức thay thế.
  • How to embed Flash Player ActiveX using BoxedApp SDK

Nếu bạn muốn để có được truy cập ở mức thậm chí thấp hơn, bạn có thể nhúng các mã nguồn mở Tarmain AS3 VM. Mã này có một ví dụ dòng lệnh shell gọi là "avmshell". Nếu bạn tự xây dựng Tamarin VM, bạn có thể thêm các lớp ActionScript mới được thực hiện trong bản C++ gốc. Tamarin (và Flash Player) thực hiện nhiều tính năng của chúng bằng cách sử dụng "Keo AVM" này giữa AS và C++.

+0

Tôi hiện đang có một trong những nhà phát triển Java viết chương trình "dây đeo khởi động" của Java để khởi chạy ứng dụng AIR của chúng tôi dưới dạng quá trình con và sau đó sử dụng Merapi để nhắn tin không đồng bộ giao tiếp với ứng dụng AIR qua ổ cắm loopback. Chương trình C sẽ vẫn chỉ sử dụng cách tiếp cận giống như Merapi để nói chuyện với ứng dụng AIR. – RogerV

+0

Nhưng nếu chương trình C đã tải thư viện chia sẻ thời gian chạy AIR, điều đó sẽ làm cho mọi thứ trở nên chặt chẽ hơn về sử dụng bộ nhớ, tốc độ khởi chạy ứng dụng, v.v. Nói chung, người dùng có thể loại bỏ Java - trong trường hợp của chúng tôi chúng ta cần chạy applet Oracle Forms Java. Nhưng Java JVM rất dễ tải trong proc. – RogerV