您可以将文件嵌入exe,并在每次使用时进行更新吗?

时间:2018-07-29 20:18:15

标签: c++ winapi

我正在尝试开发一个用于管理有关多个提供程序的信息的应用程序。 目标系统是Windows,我将使用c ++进行编码。

不希望用户在与计算机有关的任何事情上都得心应手,因此我想使其尽可能地简单。现在,我的目标是仅分发可执行文件,该可执行文件应将它们引入的所有信息存储在其中。 每个用户都存储他们自己的提供程序的信息,因此我不需要重复使用即可与其他实例共享数据。他们确实通过csv将信息上传到预先存在的系统中,但是我可以轻松地处理。

我希望他们每月至少引入一次新信息,所以我需要更新嵌入的信息。那有可能吗?制作便携式exe并更新其信息?到目前为止,我见过的唯一允许保存某些拟人化的便携式应用程序都是通过将文件与exe一起拖动来实现的。

我尽量避免使用SQL以避免兼容性问题(对于我自己的应用程序,我使用外部TXT并解析数据),但是如果您告诉我这是唯一的方法,那么我将使用sql。

我还看到了有关嵌入文件的其他几个问题,但似乎所有这些都是常量。我的文件需要更新

谢谢!

编辑:谢谢大家的评论。我已经了解到,我想要的东西不值得创建的问题。我将数据分开存储并努力工作,以便我的同事了解可执行文件和数据之间的区别(就像向奶奶的祖母解释互联网...)

1 个答案:

答案 0 :(得分:0)

虽然我不会说这是不可能的,但它绝对既不简单也不漂亮,也不应该有人建议这样做。

基本问题是:.exe运行时,.exe文件映射到内存中,无法修改。现在,您可以要做的一件事就是让您的.exe启动时,在某个位置创建其自身的临时副本,启动该副本,并告诉新过程原始图像的位置(例如,通过命令行参数),然后具有原始出口。然后,该临时副本可以修改原始图像。要将数据放入.exe,您可以使用Resources,也可以手动修改PE映像,例如,使用在映像内创建的特殊部分来保存数据。您也可以将任意数据简单地附加到.exe文件的末尾,而不会损坏它。

但是,我想再次强调,我不建议实际做这样的事情。我只是将数据存储在单独的文件中。如果您的用户熟悉Excel,那么他们应该熟悉将数据存储在文件中的想法……