【问题标题】:How to copy resources from one executable to other如何将资源从一个可执行文件复制到另一个
【发布时间】:2012-02-14 16:50:25
【问题描述】:

好的,我的问题有点奇怪。但是我们开始了。

我正在尝试开发一个可执行文件“包装器”和一个控制台程序。控制台程序的任务是将图标和版本信息从另一个 exe 文件复制到包装文件,以便包装文件和 exe 文件看起来完全相同。除此之外,exe文件被附加到最后的包装文件中。这样当包装器被执行时,它可以提取并执行附加的 exe 文件。

我的问题是如何创建包装文件以容纳来自其他 exe 文件的图标和版本信息?我的意思是我的资源文件应该如何?

接下来是如何复制图标和版本信息。我搜索并找到了一些代码和 MSDN 说明,但每个人都使用 FindResource、LoadResource 等。但是按照这种方法,我丢失了包装文件的原始内容。我的文件大小从最初的 67kb 减少到 14kb,当我在记事本中打开时,我看到很多内容都不见了......

使用 SHGetFileInfo() 可以做任何事情吗?这可用于从 exe 文件中获取 HICON。但是如何使用这个 HICON 来替换包装文件中的图标资源??

【问题讨论】:

  • 这有什么关系??至少有人给出答案
  • 要求答案无济于事。一遍又一遍地问同样的问题不会有帮助。我建议你阅读faq
  • 我知道。但是这个问题和上一个问题有点不同。所以我想我会把它分成2个问题..
  • 同一个问题。您想将资源从一个地方复制到另一个地方。它们是图标资源还是版本资源并不重要。

标签: c winapi resources icons exe


【解决方案1】:

previous question 中的基本方法是正确的。您绝对不想与 SHGetFileInfo 和 HICON 混在一起。资源的类型应该无关紧要。

你的包装器应该从没有资源开始。例如,这可确保您添加的任何图标都是第一个编号和最低编号,从而保证用作应用程序图标。

要了解您的代码发生了什么,请使用可以查看生成的 exe 中的资源的工具。 Visual C++ Express 无法做到这一点,但付费版本可以。或者,谷歌提供了一堆免费的实用程序来做到这一点。 Here's one, 不知道好不好。该页面还包含一些其他工具的链接。

【讨论】:

  • 但是如果我不在包装器中保留任何资源,那么程序将如何更新图标数据???
  • @S.Swaroop 来自 MSDN:“UpdateResource 添加、删除或替换可移植可执行 (PE) 文件中的资源。”你添加一个资源;有什么问题?
  • 我试过了。我从包装文件中删除了所有资源。然后我尝试修改图标。我在这里使用了该程序 [link]stackoverflow.com/questions/9278108/…,但它挂起并且不执行任何操作。但是如果我在使用程序之前在exe中添加一些随机图标资源,可以更改图标但会出现大小问题。
  • @S.Swaroop:由于循环的构造方式,您的代码挂起。如果没有找到图标,则使用continue 返回循环顶部,这意味着您永远不会检查iLoop 是否已达到十,因此如果没有图标,循环将永远不会终止。编写循环的更传统方法是for (i = 1; i <= 10; ++i),并在找到图标时退出循环(使用break)。附:如果您在调试器中单步执行您的代码,这将是显而易见的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
相关资源
最近更新 更多