将应用程序打包到单个二进制文件中的通用跨平台工具?

时间:2014-04-10 06:33:17

标签: deployment language-agnostic cross-platform packaging

我有一个由几个脚本文件组成的应用程序(在本例中用Lua编写,例如Main.luaHelper1.luaHelper2.lua)。为了在Windows上运行应用程序,当前需要具有这些脚本文件以及解释器(lua52.exelua52.dll)。然后可以使用lua52.exe Main.lua <arguments>启动该程序。

理想情况下,我想分发一个可执行文件Main.exe,而不是包含5个文件的文件夹。以Main.exe <arguments>启动时,应发生类似以下内容:

  1. 将所有5个文件解压缩到临时目录
  2. 启动lua52.exe Main.lua <arguments>
  3. 完成后删除临时目录
  4. 是否有任何工具可以打包5个文件并创建Main.exe

    我相信对于Python(仅限),pyinstaller -F符合这些要求。是否有一个通用工具,不依赖于Python(或Lua)和理想的跨平台(Windows,OS X和Linux)可以做到这一点?

    编辑:如果没有可以执行此操作的跨平台工具,我很乐意在每个平台上使用不同的工具。对于Windows,似乎WinRAR几乎可以满足我的需求(通过创建SFX存档),但不幸的是它似乎不支持将<arguments>转发到lua52.exe

    有没有人知道Windows工具能更好地满足我对WinRAR的需求?另外,OS X和/或Linux是否有类似的工具?

3 个答案:

答案 0 :(得分:1)

如果您只定位一个特定平台,则应该有可用的安装程序构建器。例如,对于Windows,http://nsis.sourceforge.net/Main_Page 您的要求相当简单,所以实际上您可以在便携式c / c ++ / java中编写自己的简单运行器/安装程序,并为不同的系统创建不同的安装程序(因为lua52.exe只能在Windows下运行)。

如果您的应用程序需要跨平台,则需要一些常见的运行时:java / ruby​​ / nodejs或者您可以尝试构建智能shell脚本。其他选择是上线并创建一个Web应用程序

答案 1 :(得分:1)

您是否考虑过WinZip self-extractor

  

WinZip®Self-Extractor创建自解压Zip文件。这些   自解压Zip文件是电子文件分发的理想选择,   因为它们包含多个压缩文件,所以最小化下载   时间并确保重要文件不会分开。

     

自解压Zip文件可以选择运行“设置”或   由文件创建者提供的“安装”程序   解压缩。

它特定于Windows平台,但我已经将它用于软件发行版,它非常好用,非常实惠。它还有一个很好的优势,即已经拥有Lua解释器的偏执高级用户可以从同一存档中手动提取Main.lua脚本,而无需信任您的本机可执行文件(安装程序或解释程序)。请参阅上面的链接以获取功能的详细列表。

另外,对于跨平台,您打包的lua解释器显然是针对特定平台的,因此您需要为每个平台提供特定于平台的可执行存档。因此,除了发布准备时间之外,使用统一的跨平台工具生成所有特定于平台的安装程序并没有多大的附加价值。您可以考虑使用大多数用户可能已经拥有的Java JRE之类的install4j(尽管如果他们不这样做,那么强制他们下载Java只是因为安装程序可以运行似乎有点傻)。

答案 2 :(得分:0)

对于跨平台部署,BitRock有一个很棒的工具集(假设你有钱可以花钱),请参阅http://installbuilder.bitrock.com/installbuilder-features.html

我不知道它究竟是如何工作的,但最终结果是很好的多平台安装程序,Bitnami使用它打包他们的开源应用程序(我见过Windows和Linux安装程序)< / p>

如果您特别关注lua解决方案,请查看以下答案:Easiest way to compile a lua script (*.exe)...?

或者您可以考虑构建自己的完全自定义的exe加载器(因为lua是开源的,您可以轻松地嵌入它)。 http://www.freelists.org/post/luajit/Interested-in-lua2exe,5中包含的C源代码回答“lua2exe”Google查询可以提供帮助

要将.NET应用程序打包成包含其所有资源的单个文件,请查看在这里:http://research.microsoft.com/en-us/people/mbarnett/ILMerge.aspx