能否在Delphi应用程序中嵌入和运行exe文件?

7

资源文件(.RES)可以接受任何类型的二进制文件,但如果它是一个exe文件,我该如何运行它?


4
许多恶意软件都这么做。你采用这种方式的原因是什么,而不是使用安装程序/卸载程序的礼貌方式?当你的软件在别人的机器上运行时,应该表现良好。 - user160694
有趣的观察... OP 发生了什么事? - Vector
我会使用它来提取应用程序更新器,从远程服务器更新我的应用程序,然后新的应用程序会在下一次执行时将其删除。 - NaN
4个回答

12

您需要将其作为文件提取到磁盘并执行。

虽然您不必将其提取到磁盘,正如Cosmin Prund在评论中所说,但如果不这样做,需要很多努力。


+1 这绝对是最简单和最明显的解决方案。 - Andreas Rejbrand
5
然而,需要记住的是不能将文件提取到与当前应用程序相同的目录中,因为后者很可能位于只读的“Program Files”文件夹中。相反,应该使用当前用户的临时目录。 - Andreas Rejbrand
2
你不需要将它提取到磁盘上。只是不将其提取到磁盘需要大量的努力和使用未记录的Windows功能。 - Cosmin Prund
1
必须记住,如果您将其提取到用户的临时目录,则另一个会话可能正在共享相同的临时目录(终端服务)-请务必使用唯一的名称。 - Ian Boyd

5

点击此处查看内存执行单元。它可以让你在不将exe文件写入磁盘的情况下从内存中执行该文件。


这个链接是一个很好的解决方案,可以轻松地更改以适应资源。看一下 TResourceStream(http://www.delphidabbler.com/articles?article=3),你只需要更改 FileToBytes 函数(可能还要重命名它,以便名称表明其目的,比如 ResourceToBytes?)。 - Pateman
我能否通过使用64位应用程序在内存中执行32位exe文件?以上例程是否可行? - Mehmet Fide
尝试了uExecFromMem,关闭病毒警告“Virtool:Win32/DelfInject.gen!BI”后,这段代码的编译版本表现非常出色。我担心这不能用于真正的程序,这很遗憾 :-( - Codebeat

1

是的,这是可能的。在网上有一个Delphi库可以做到这一点,但我无论如何都想不起它叫什么了。它允许您执行一个普通的exe文件,无论它在内存中的位置在哪里。因此,您可以将其加载到流中,或者只是将其嵌入资源中。

我意识到我的回复有点令人沮丧,因为我不记得库的名称,但至少现在您知道它是可以实现的。如果您在谷歌上搜索“从内存执行PE exe”和“Delphi”,那么我相信您会找到它。


0

你可能想要看一下Orean的XBundler:http://www.oreans.com/xbundler.php

我使用过他们的许可产品(WinLicense),并且对产品、支持、响应和更新非常满意。

事实上,我即将购买XBundler,以便可以安全地将一个dll嵌入到我的exe中。

Tom


2
每当我发布一个链接到我使用的商业产品,而且它与帖子原帖直接相关时,我就会被莫名其妙地踩。也许一些Stack Overflow读者对商业软件过敏?(如果我是SO之王,我会禁止无解释的踩...但这是另一个话题了...) - RobertFrank
1
我完全同意关于没有解释的-1票的观点;你的帖子(以及其他帖子)看起来并不像我们通常的垃圾邮件艺术家的作品 :) 但是这篇特定的帖子肯定需要一些复制和粘贴的示例,说明如何在捆绑后调用exe,或者其他表明您已成功使用其产品的迹象。 (或者,也许,一些理由可以证明这是一个足够困难的问题,可以证明商业程序的存在是有道理的。)我只是说与大多数其他帖子相比,链接到商业软件的门槛要高得多... - sarnold
+1 好建议,sarnold。我没有想到过这个。我会在未来的帖子中包含这种事例。谢谢。 - RobertFrank

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接