使用 C# 将文件嵌入到外部 exe
Embed a file into an external exe with C#
所以我制作了一种解释型编程语言,一切都很顺利,除了一件事:我想制作一个 "compiler" 将用户的代码嵌入到解释器的副本中,这样就可以了用户需要做的是双击嵌入代码的可执行文件,它会 运行.
所以问题是:如何将文件嵌入到已编译的可执行文件中?我确实可以在编译之前访问可执行文件,但嵌入过程必须在
之后进行
我更喜欢 C# 中的解决方案,但我很绝望,可以使用 C++ 或 VB.NET,甚至是批处理文件
因此,经过一番激烈的谷歌搜索后,我找到了一个名为 Mono.Cecil
的库,它完全符合我的要求。我能够使用以下代码将文件注入可执行文件:
string fileName = "Interpreter.exe"; // The file which will have toInject injected in it
string outputName = "Compiled.exe"; // The output file to compile
string toInject = "program.txt"; // The file we will be injecting into fileName
string resourceName = "program.txt"; // The name of the file once it's inside fileName
var module = ModuleDefinition.ReadModule(filename);
var file = new EmbeddedResource(
resourceName,
ManifestResourceAttributes.Private,
File.ReadAllBytes(toInject));
module.Resources.Add(file);
module.Write(outputName);
所以我制作了一种解释型编程语言,一切都很顺利,除了一件事:我想制作一个 "compiler" 将用户的代码嵌入到解释器的副本中,这样就可以了用户需要做的是双击嵌入代码的可执行文件,它会 运行.
所以问题是:如何将文件嵌入到已编译的可执行文件中?我确实可以在编译之前访问可执行文件,但嵌入过程必须在
之后进行我更喜欢 C# 中的解决方案,但我很绝望,可以使用 C++ 或 VB.NET,甚至是批处理文件
因此,经过一番激烈的谷歌搜索后,我找到了一个名为 Mono.Cecil
的库,它完全符合我的要求。我能够使用以下代码将文件注入可执行文件:
string fileName = "Interpreter.exe"; // The file which will have toInject injected in it
string outputName = "Compiled.exe"; // The output file to compile
string toInject = "program.txt"; // The file we will be injecting into fileName
string resourceName = "program.txt"; // The name of the file once it's inside fileName
var module = ModuleDefinition.ReadModule(filename);
var file = new EmbeddedResource(
resourceName,
ManifestResourceAttributes.Private,
File.ReadAllBytes(toInject));
module.Resources.Add(file);
module.Write(outputName);