C# - 在运行时将文件作为资源添加到我的Exe

时间:2013-02-08 09:58:24

标签: c# .net resources

我发现我可以在Visual Studio 2010中将文件(* .jpg)添加到我的C#资源中。据我所知,应该可以在运行时重新组装exe。我不想自己剥离exe。我正在寻找那些为我做这件事的C#例程。当然我不想修改正在运行的exe,而是修改它的副本。如果我需要在运行时再次编译它,我也可以将它的源代码放在我的exe中。

我的目标:

  1. 创建正在运行的exe的副本
  2. 将文件添加到该副本以某种方式
  3. 关闭正在运行的应用
  4. 当用户执行副本时,它必须将文件作为资源。就是这样。

  5. 编辑: C#编译器+ Visual Studio 2010在目标系统中可用。

    <小时/> (我不是编写一个完整的安装程序,请不要说那些坏话:“重新发明”和“轮子”,我自己知道)

1 个答案:

答案 0 :(得分:1)

在没有完整编译器的情况下,您将很难修改资源部分,不会破坏您的可执行文件。

然而,您可以做的是:

  • 制作ZIP文件(或包含所有文件的其他存档)
  • 将ZIP文件内容的哑声附加到可执行文件的末尾
  • 还附加一个包含存档长度的int32

您可以通过从FileStream开始为ExecutableLength - ZipLength - 4打开ZipLength并读取ExecutableLength - ZipLength - 4个字节来阅读它 - 这样您就可以使用DotNetZip或其他方式读取zip部分库。

然后当你想修改存储的数据时:

  • 在运行时重命名现有的可执行文件(您可以这样做)
  • 读取可执行文件的第一个{{1}}字节,并将其写入一个新文件,其中包含可执行文件在重命名之前的名称。
  • 使用您的信息创建新的ZIP存档并附加。
  • 附加新存档长度的int32。
  • 关闭现有应用并启动新应用。

Tadah - 一个可以修改自己存储资源的可执行文件。