2009-01-31 26 views
5

我想用C语言编写一个C语言专用的AIR启动程序。我该如何从C程序加载AIR运行时作为进程内共享库

我看过正在运行的AIR程序与进程查看器,并能够找到正在使用的AIR运行时DLL。 AIR程序与Java不同,因为它们作为平台特定的可执行文件进行安装,这些可执行文件在AIR运行时启动后(它们的图标由用户双击)作为进程内共享库绑定到AIR运行时。

那么,我想做一个AIR发射器,而不是java.exe。

java.exe作为一个平台操作系统进程启动,该进程绑定到Java JVM运行时(JRE)作为进程内共享库。要执行的java应用程序被指定为java.exe的命令行参数。一旦运行java.exe并且JVM功能完全正常,则指定的Java应用程序类将由JVM类加载器加载以供执行。然后,指定的Java应用程序就会接管,从某种意义上说是“劫持”java.exe进程。当然,指定的Java应用程序在任何进程列表中都显示为承载它的java.exe程序。

我想让AIR应用程序启动像这样工作。为什么?所以我可以探索攻击AIR的方法,也许可以克服其中许多缺陷。例如,对于初学者,我想通过一些可用于运行中的AIR应用程序的新API扩展AIR运行时体验。

我的第一道命令将是:

  • 实施 的ActionScript3到C绑定接口,足以媲美 到.NET的PInvoke
  • 加入一个API,用于发射过程是 媲美在Java SE中发现的API(Runtime.exec, ProcessBuilder,Process)
  • 将对AIR应用程序的支持添加到 能够与stdin , stdout,stderr。奇怪的是,尽管 Adob​​e在AIR中增加了对本地文件 访问的支持,但他们省略了 与这些标准文件 管道的交互(但它们可在AIR支持的任何 OS平台上找到)。经由 交换AMF对象,以便空气(或Java或任何 AMF能够语言)的应用程序可以 进程间通信 -
  • 实现支持AMF的标准输入, 标准输出,标准错误。这将向微软的PowerShell 添加 。

目前Merapi提供了一个带有Java的AMF桥接器,因此可以证明这一点的功效。唉,Merapi必须使用本地主机端口和套接字进行进程间通信 - 相对于使用stdin/stdout/stderr进程间管道来说,这是一种笨拙的方式。

回答

2

什么我提出的问题试图做原来是由Adobe禁止(只要任何潜在的商业用途):

Adobe® AIR™ Runtime Distribution FAQ

分发或使用Adobe AIR 运行,安装程序文件或者以未公开的方式或目的提取安装程序文件。例如,您的 可能不会分发,直接调用或 为您的软件应用程序中的任何Adobe AIR库或运行时组件 编写包装。 Runtime.dll,运行时可执行文件, template.exe和template.app是 运行时组件的示例。

2

这听起来像你想做一些非常铁杆的AIR黑客攻击。我不认为在您自己的过程中托管AIR运行时将非常容易。但是您可能会考虑嵌入Flash Player ActiveX控件。由于它只是一个COM对象,因此任何COM应用程序都可以CoCreateInstance()Flash Player。COM接口没有很好的文档记录,但这里有一些可能有用的例子:

如果你想获得更低级别的访问权限,你可以嵌入开源Tarmain AS3 VM。该代码有一个名为“avmshell”的示例命令行shell。如果您自己构建Tamarin虚拟机,则可以添加以本机C++实现的新ActionScript类。 Tamarin(和Flash Player)在AS和C++之间使用这种“AVM Glue”实现了它们的许多功能。

+0

我目前有一位Java开发人员正在编写一个Java引导程序,该程序将AIR应用程序作为子进程启动,然后使用Merapi通过回送套接字与AIR应用程序进行异步消息通信。 C程序仍然会使用类似Merapi的方法与AIR应用程序交谈。 – RogerV 2009-02-07 16:46:14

相关问题