【问题标题】:Concatenate data to .net application将数据连接到 .net 应用程序
【发布时间】:2011-08-06 10:00:04
【问题描述】:

我想制作一个程序,将 exe 和数据连接到一个文件中。

基本上:
程序 A(程序 B,数据)=> 程序 C

程序 A 将与 Streams 合并为一个。即使使用copy /b B.exe + file.data 也会想到。所以我不太关心文件合并的干净程度。

这个想法是程序 B 知道它会以这种方式被使用,并会寻找数据。想到的问题是程序 C 如何知道它的 exe 代码在哪里结束以及数据从哪里开始?我知道 dos exe 曾经有头数据来定义它们的大小,但我不知道 .net 中存在什么来进行这种检查。

【问题讨论】:

  • 你想完成什么?
  • 我想你可能想修改你的问题。
  • @trickdev - 谢谢,我吃完午饭回来了,即使我能理解我在问什么。它被重写了。

标签: c# file append


【解决方案1】:

虽然您可以从 PE 标头中计算出 .exe 的大小,但还有一种更简单的方法:将附加部分的长度写为最后一个单词以及一个幻数。要阅读它,Seek(-WordSizePlusMagicNumberSize, SeekOrigin.End),阅读它们并验证它们是否有效。

【讨论】:

  • 我想到了这个解决方案,但它不适用于平面二进制 concat。我可以获得多少我们的 PE 标头来完成这项任务?
  • 很久没看PE文件的结构了。我想在“PE 文件格式”上进行谷歌搜索会为您提供所需的信息。基本格式从未改变,也永远不会改变。这是为了适应 .Net 应用程序等新事物而进行的整体格式更改,但我认为这不会影响您如何找到自然结束的方式。我不清楚为什么你不能连接一个文件,然后附加大小和一个幻数。
【解决方案2】:

如果您的目标是将数据嵌入到可执行文件中,是否可以将数据文件作为资源包含在 Visual Studio 中?

【讨论】:

  • 我之前不是很清楚。我想将数据附加到基本 exe 并让它知道数据的开始位置。由于在解决方案的开发过程中不会这样做,所以我不能那样添加它。
【解决方案3】:

将数据添加为嵌入式资源。

在 Visual Studio 中添加您希望添加的文件,然后将文件属性中的构建操作从无(非代码类型的默认值)更改为嵌入式资源。然后编译

下一步取决于你想用它做什么?您可以通过 ResourceManager 从您的应用程序中访问它,或者以类似的方式,您可以编写另一个应用程序来从中提取此资源数据。

您的问题需要一些上下文

或者,如果您真的在谈论两个流,那么您可能在谈论 ADS,Alternate Data Streams,如果没有记错的话,这很痛苦,但是那里有代码可以轻松(ish) API

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2017-04-19
    • 1970-01-01
    • 2023-03-03
    • 2011-07-27
    相关资源
    最近更新 更多