我打算制作一个 AIR 应用程序,但我需要执行一个外部应用程序,并且由于 Adobe AIR 中的安全限制......我在想为什么不尝试通过编写一些类似 System("file执行”); 然后使用 Alchemy 将其更改为 swc 和我们在我的应用程序中... 任何人都尝试过这种类型,或者认为它可以工作?
3 回答
关于 Alchemy,您需要了解的是,它将 C 编译成与 actionscript 相同的字节码,并在与 flash/flex as3 应用程序相同的虚拟机 (AVM2) 下运行。
Alchemy 能够更快地执行某些操作的原因是编译后的 C(编译为字节码)可以通过一些在 flash 10 中添加的优化 AVM2 指令访问原始“内存”(ApplicationDomain.domainMemory)。
我想要了解的是,因为 Alchemy 只是在 AVM2 之上运行,所以它与任何其他应用程序一样受到限制。AIR 应用程序中的 Alchemy 可以比浏览器沙箱中的 Alchemy 做更多的事情,但它仍然受到该沙箱的限制。
如果您确实需要执行外部应用程序,则需要研究Shu或Zinc 之类的东西。
抱歉,我无法提供更多帮助。
这行不通 - Alchemy 并不是真的/真的不适合与外界交互的程序。我认为它不支持执行系统调用,即使 Alchemy 支持它,flash/air 运行时也肯定会阻止它。
如果您不需要跨平台行为,您可以考虑创建一个老式的“投影仪”。可以使用 fscommand 从投影仪 exe 启动程序 - 请注意,您要启动的可执行文件必须位于二进制文件旁边名为 fscommand 的文件夹中。如果这还不够,您可以尝试第三方商业工具,例如http://www.northcode.com/。
不,Richard Szalay 是正确的:Alchemy 将 C 代码编译为 ActionScript 字节码,因此生成的 SWF 仍然受制于与任何其他相同的沙盒限制;AIR 限制可能更宽松,但使用 Alchemy 在这方面没有任何好处。
但是,您仍然可以使用套接字连接“调出”沙箱,前提是您有一个应用程序正在侦听该连接;查看Merapi——如果您愿意使用 Java,它可能可以作为一个简单的解决方案提供帮助,尽管您当然可以使用其他东西(例如 C#)来自己开发。