3

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

我的目标:

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

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


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

4

1 回答 1

1

如果没有完整编译器的好处,您将很难以不会破坏可执行文件的方式修改资源部分。

但是,您可以做的是:

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

您可以通过为您自己的可执行文件打开一个FileStream开始ExecutableLength - ZipLength - 4并读取ZipLength字节来读取它 - 它只为您提供可以使用 DotNetZip 或其他库读取的 zip 部分。

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

  • 在运行时重命名现有的可执行文件(您可以这样做)
  • 读取ExecutableLength - ZipLength - 4可执行文件的第一个字节并将它们写入一个新文件,该文件的名称是可执行文件在重命名之前的原始名称。
  • 使用您的信息创建新的 ZIP 存档并将其附加。
  • 附加新存档长度的 int32。
  • 关闭现有应用程序并启动新应用程序。

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

于 2013-02-08T10:21:13.633 回答