![从 Windows 中的目录创建单个可执行文件?](https://linux22.com/image/1407378/%E4%BB%8E%20Windows%20%E4%B8%AD%E7%9A%84%E7%9B%AE%E5%BD%95%E5%88%9B%E5%BB%BA%E5%8D%95%E4%B8%AA%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%EF%BC%9F.png)
那里有一个答案,但已经有两年了,并且没有提供任何关于如何做到这一点的信息。
情况:我有一个文件夹,里面有一个可执行文件、一些必需的 dll 和一些图像。我想将所有这些打包成一个可执行文件。如果执行,它将运行该可执行文件。
我发现这个超级用户帖子。但是,它似乎没有提供解决方案。
如果您熟悉 Python,有一个名为 PyInstaller 的应用程序。它从 Python 源代码创建单文件可执行文件。
我不确定它的具体内部工作原理,但它通常会做这样的事情:
- 将可执行文件目录包装成新的可执行文件,例如
app.exe
- 新的可执行文件执行一个程序,该程序将隐藏目录解压到临时文件夹中,该文件夹名为 _MEIxxxxx,x 为数字。例如:
C:\Users\Me\AppData\Local\Temp\_MEI188722
- 从该文件夹执行该程序。
据我所知,他们使用黑客黑魔法来实现这一点。我想知道是否有一个程序可以对非 Python 文件执行这种黑魔法。
答案1
安西斯http://en.wikipedia.org/wiki/Nullsoft_Scriptable_Install_System是我见过的最好的选择。我为工作应用程序制作了几个包装器,我们不希望用户浏览用于修复 PC 等的文件。我本周刚刚构建了一个病毒扫描程序前端,它使用公司代理自动下载 msert/mcafee stinger/mcafee rootkit,然后为技术人员运行所有 3 个应用程序。
您可以使用标准模板/示例执行您的要求,在主要部分设置输出目录 [ $OUTDIR %temp%_MEI188722 ] 并为程序所需的原始目录中的每个文件添加 [ file yourapp.exe ] 行。接下来使用 execwait 行来运行相关的应用程序。睡眠 20ms 的命令,然后删除 %temp%_MEI188722,以便在文件不再使用后将其删除。
将安装程序设置为静默模式将阻止任何标准安装程序对话框出现,您的应用程序将在片刻后加载。或者,如果您需要用户首先选择任何选项,或者希望应用程序在出现某种错误时返回消息,您可以创建自定义对话框页面。教程和社区非常活跃,并且很有帮助,所以一旦你习惯了 nsis 的工作方式,它应该很简单。 http://hmne.sourceforge.net/ 这是一个方便的程序,可以让您更轻松地编辑脚本文件,以便制作 exe。
答案2
Windows 不允许以本机方式从容器(如 zip 文件)内部启动应用程序。这就是 PyInstaller 解压到临时目录以运行实际应用程序的原因。
像 ZIP 和 7Zip 这样的压缩器可以让你创建自解压可执行文件。它是常规压缩文件加上解压所需的可执行代码。打包成一个文件。7zip 提供了为安装程序创建自解压存档的选项。也许你可以使用此选项来运行标准程序而不是安装程序:http://7zip.bugaco.com/7zip/MANUAL/switches/sfx.htm
您可以将其配置为在提取后运行您想要的任何文件。我不确定您是否能够删除提示。