C# – 在运行时将文件作为资源添加到我的Exe
我发现我可以在Visual Studio 2010中将文件(* .jpg)添加到我的C#资源中。据我所知,应该可以在运行时重新组装exe。 我不想自己剥离exe。 我正在寻找那些为我做这件事的C#例程。 当然我不想修改正在运行的exe,而是修改它的副本。 如果我需要在运行时再次编译它,我也可以将它的源代码放在我的exe中。
我的目标:
- 创建正在运行的exe的副本
- 以某种方式将文件添加到该副本。
- 关闭正在运行的应用
- 当用户执行副本时,它必须将文件作为资源。 而已。
编辑: C#编译器+ Visual Studio 2010在目标系统上可用。
(我不是编写一个完整的安装程序,请不要说那些坏话:“重新发明”和“轮子”,我自己知道)
在没有完整编译器的情况下,您将很难修改资源部分,不会破坏您的可执行文件。
但你可以做的是:
- 制作ZIP文件(或包含所有文件的其他存档)
- 将ZIP文件的内容愚蠢附加到可执行文件的末尾
- 还附加一个包含存档长度的int32
您可以通过从ExecutableLength - ZipLength - 4
开始为您自己的可执行文件打开FileStream
并读取ZipLength
字节来读取它ExecutableLength - ZipLength - 4
提供了可以使用DotNetZip或其他库读取的zip部分。
然后,当您要修改存储的数据时:
- 运行时重命名现有的可执行文件(您可以这样做)
- 读取
ExecutableLength - ZipLength - 4
的第一个ExecutableLength - ZipLength - 4
个字节,并将它们写入一个新文件,其中包含可执行文件在重命名之前的名称。 - 创建包含您的信息的新ZIP存档并附加该存档。
- 附加新归档长度的int32。
- 关闭现有应用并启动新应用。
Tadah – 可以修改自己存储的资源的可执行文件。